@qwickapps/react-framework 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +123 -1
  2. package/dist/components/AccessibilityProvider.d.ts +64 -0
  3. package/dist/components/AccessibilityProvider.d.ts.map +1 -0
  4. package/dist/components/Breadcrumbs.d.ts +39 -0
  5. package/dist/components/Breadcrumbs.d.ts.map +1 -0
  6. package/dist/components/ErrorBoundary.d.ts +39 -0
  7. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  8. package/dist/components/QwickApp.d.ts.map +1 -1
  9. package/dist/components/index.d.ts +3 -0
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/index.bundled.css +12 -0
  12. package/dist/index.esm.js +910 -44
  13. package/dist/index.js +916 -47
  14. package/dist/templates/TemplateResolver.d.ts.map +1 -1
  15. package/dist/utils/htmlTransform.d.ts.map +1 -1
  16. package/dist/utils/logger.d.ts +15 -3
  17. package/dist/utils/logger.d.ts.map +1 -1
  18. package/package.json +4 -2
  19. package/src/components/AccessibilityProvider.tsx +466 -0
  20. package/src/components/Breadcrumbs.tsx +223 -0
  21. package/src/components/ErrorBoundary.tsx +216 -0
  22. package/src/components/QwickApp.tsx +17 -11
  23. package/src/components/__tests__/AccessibilityProvider.test.tsx +330 -0
  24. package/src/components/__tests__/Breadcrumbs.test.tsx +268 -0
  25. package/src/components/__tests__/ErrorBoundary.test.tsx +163 -0
  26. package/src/components/index.ts +3 -0
  27. package/src/stories/AccessibilityProvider.stories.tsx +284 -0
  28. package/src/stories/Breadcrumbs.stories.tsx +304 -0
  29. package/src/stories/ErrorBoundary.stories.tsx +159 -0
  30. package/src/stories/{form/FormComponents.stories.tsx → FormComponents.stories.tsx} +8 -8
  31. package/src/templates/TemplateResolver.ts +2 -6
  32. package/src/utils/__tests__/nested-dom-fix.test.tsx +53 -0
  33. package/src/utils/__tests__/optional-logging.test.ts +83 -0
  34. package/src/utils/htmlTransform.tsx +69 -3
  35. package/src/utils/logger.ts +60 -5
  36. package/dist/schemas/Builders.d.ts +0 -7
  37. package/dist/schemas/Builders.d.ts.map +0 -1
  38. package/dist/schemas/types.d.ts +0 -7
  39. package/dist/schemas/types.d.ts.map +0 -1
  40. package/dist/types/DataBinding.d.ts +0 -7
  41. package/dist/types/DataBinding.d.ts.map +0 -1
  42. package/dist/types/DataProvider.d.ts +0 -7
  43. package/dist/types/DataProvider.d.ts.map +0 -1
package/README.md CHANGED
@@ -4,7 +4,20 @@ A complete React framework for building modern, responsive applications with int
4
4
 
5
5
  ## What's New
6
6
 
7
- ### August 31, 2025 - CMS Content Components
7
+ ### September 2, 2025 - Built-in Error Handling & Accessibility
8
+ - **Automatic Error Boundaries**: QwickApp now automatically wraps all content with ErrorBoundary for robust error handling
9
+ - **Built-in Accessibility**: AccessibilityProvider automatically included for WCAG 2.1 AA compliance
10
+ - **Generic Components**: Moved ErrorBoundary, AccessibilityProvider, and Breadcrumbs to framework level
11
+ - **Complete Test Coverage**: Added comprehensive unit tests and Storybook stories for all new components
12
+ - **Zero Configuration**: Error handling and accessibility features work out-of-the-box with QwickApp
13
+
14
+ ### September 1, 2025 - Optional Dependencies & Performance
15
+ - **Optional Logging**: Made `@qwickapps/logging` an optional dependency with console fallback
16
+ - **Reduced Bundle Size**: Core framework no longer includes logging overhead by default
17
+ - **React Error Fixes**: Fixed React error #62 in Markdown mixed content scenarios
18
+ - **DOM Nesting**: Added automatic cleanup of invalid DOM nesting from marked.js output
19
+
20
+ ### August 31, 2025 - CMS Content Components
8
21
  - **Html Component**: Transform HTML strings into React components with configurable transformation rules
9
22
  - **Markdown Component**: Convert Markdown to React components using marked library with Html component integration
10
23
  - **Transform System**: Extensible HTML transformation architecture with optimized rule sets for Article and Markdown content
@@ -40,6 +53,12 @@ A complete React framework for building modern, responsive applications with int
40
53
  - **Markdown Component**: Convert Markdown to React components with syntax highlighting
41
54
  - **Transform System**: Extensible HTML element transformation with fallback handling
42
55
 
56
+ ### 🛡️ **Built-in Error Handling & Accessibility**
57
+ - **ErrorBoundary**: Automatic error catching with user-friendly fallback UI and retry functionality
58
+ - **AccessibilityProvider**: WCAG 2.1 AA compliance with system preference detection and ARIA announcements
59
+ - **Breadcrumbs**: Accessible navigation hierarchy with keyboard support and customization
60
+ - **Automatic Integration**: All features automatically enabled in QwickApp without configuration
61
+
43
62
  ### 🚀 **Developer Experience**
44
63
  - **TypeScript First**: Full TypeScript support with comprehensive types
45
64
  - **Storybook**: Interactive component documentation
@@ -52,6 +71,16 @@ A complete React framework for building modern, responsive applications with int
52
71
  npm install @qwickapps/react-framework
53
72
  ```
54
73
 
74
+ ### Optional Dependencies
75
+
76
+ The framework uses console-based logging by default. For advanced logging features, optionally install:
77
+
78
+ ```bash
79
+ npm install @qwickapps/logging
80
+ ```
81
+
82
+ This will enable structured logging with configurable levels and outputs. If not installed, the framework automatically falls back to console logging.
83
+
55
84
  ## Quick Start
56
85
 
57
86
  ### Basic Setup
@@ -781,6 +810,99 @@ For complete documentation, see [@qwickapps/logging](../qwickapps-logging/README
781
810
  3. **Leverage the built-in performance monitoring** for theme changes
782
811
  4. **Consider lazy loading** for large component trees
783
812
 
813
+ ## Built-in Error Handling & Accessibility
814
+
815
+ QwickApp automatically includes robust error handling and accessibility features without any configuration needed.
816
+
817
+ ### ErrorBoundary
818
+
819
+ All QwickApp instances are automatically wrapped with an ErrorBoundary that:
820
+ - Catches JavaScript errors anywhere in the component tree
821
+ - Displays user-friendly fallback UI with retry functionality
822
+ - Shows error details in development mode
823
+ - Supports custom error handling callbacks
824
+
825
+ ```tsx
826
+ import { ErrorBoundary } from '@qwickapps/react-framework';
827
+
828
+ // For standalone usage outside QwickApp
829
+ <ErrorBoundary onError={(error, errorInfo) => console.log(error)}>
830
+ <MyComponent />
831
+ </ErrorBoundary>
832
+
833
+ // Or use as Higher-Order Component
834
+ const SafeComponent = withErrorBoundary(MyComponent, {
835
+ fallback: <div>Custom error UI</div>
836
+ });
837
+ ```
838
+
839
+ ### AccessibilityProvider
840
+
841
+ All QwickApp instances automatically include accessibility features:
842
+ - **System Preferences**: Detects high contrast, reduced motion preferences
843
+ - **Keyboard Navigation**: Enhanced focus indicators for keyboard users
844
+ - **Screen Reader Support**: ARIA live announcements
845
+ - **Accessibility Auditing**: Development-time accessibility issue detection
846
+
847
+ ```tsx
848
+ import { useAccessibility } from '@qwickapps/react-framework';
849
+
850
+ function MyComponent() {
851
+ const {
852
+ highContrast,
853
+ reducedMotion,
854
+ isKeyboardUser,
855
+ announce,
856
+ runAudit
857
+ } = useAccessibility();
858
+
859
+ return (
860
+ <div>
861
+ {highContrast && <p>High contrast mode enabled</p>}
862
+ <button onClick={() => announce('Action completed', 'polite')}>
863
+ Complete Action
864
+ </button>
865
+ </div>
866
+ );
867
+ }
868
+ ```
869
+
870
+ ### Breadcrumbs
871
+
872
+ Generic breadcrumb navigation with full accessibility support:
873
+
874
+ ```tsx
875
+ import { Breadcrumbs, useBreadcrumbs } from '@qwickapps/react-framework';
876
+
877
+ const breadcrumbItems = [
878
+ { label: 'Home', href: '/', icon: <HomeIcon /> },
879
+ { label: 'Products', href: '/products' },
880
+ { label: 'Electronics', href: '/products/electronics', current: true },
881
+ ];
882
+
883
+ function Navigation() {
884
+ const handleNavigate = (item, index) => {
885
+ console.log('Navigate to:', item.label);
886
+ };
887
+
888
+ return (
889
+ <Breadcrumbs
890
+ items={breadcrumbItems}
891
+ onNavigate={handleNavigate}
892
+ separator="→"
893
+ maxItems={4}
894
+ />
895
+ );
896
+ }
897
+
898
+ // Or use the hook for dynamic breadcrumbs
899
+ function DynamicBreadcrumbs() {
900
+ const { breadcrumbs, addBreadcrumb, setBreadcrumbs } = useBreadcrumbs();
901
+
902
+ return <Breadcrumbs items={breadcrumbs} />;
903
+ }
904
+ ```
905
+
784
906
  ## License
785
907
 
786
908
  This software is licensed under the **PolyForm Shield License 1.0.0**.
@@ -0,0 +1,64 @@
1
+ import React, { ReactNode } from 'react';
2
+ export interface AccessibilityState {
3
+ highContrast: boolean;
4
+ reducedMotion: boolean;
5
+ largeText: boolean;
6
+ focusVisible: boolean;
7
+ isKeyboardUser: boolean;
8
+ issues: AccessibilityIssue[];
9
+ lastAnnouncement: Announcement | null;
10
+ preferences: Record<string, any>;
11
+ }
12
+ export interface AccessibilityIssue {
13
+ type: string;
14
+ message: string;
15
+ level: 'error' | 'warning' | 'info';
16
+ element?: Element;
17
+ }
18
+ export interface Announcement {
19
+ message: string;
20
+ level: 'polite' | 'assertive';
21
+ timestamp: number;
22
+ }
23
+ export interface AccessibilityContextValue extends AccessibilityState {
24
+ setHighContrast: (enabled: boolean) => void;
25
+ setReducedMotion: (enabled: boolean) => void;
26
+ setLargeText: (enabled: boolean) => void;
27
+ setFocusVisible: (enabled: boolean) => void;
28
+ announce: (message: string, level?: 'polite' | 'assertive') => void;
29
+ announcePolite: (message: string) => void;
30
+ announceAssertive: (message: string) => void;
31
+ addIssue: (issue: AccessibilityIssue) => void;
32
+ clearIssues: () => void;
33
+ runAudit: () => void;
34
+ }
35
+ export interface AccessibilityProviderProps {
36
+ children: ReactNode;
37
+ enableAudit?: boolean;
38
+ }
39
+ /**
40
+ * Accessibility Provider Component
41
+ * Provides comprehensive accessibility context and utilities
42
+ *
43
+ * Features:
44
+ * - System preference detection (high contrast, reduced motion)
45
+ * - Keyboard navigation detection
46
+ * - ARIA live announcements
47
+ * - Focus management
48
+ * - Accessibility auditing
49
+ * - Settings persistence
50
+ */
51
+ export declare const AccessibilityProvider: React.FC<AccessibilityProviderProps>;
52
+ /**
53
+ * Hook to access accessibility context
54
+ */
55
+ export declare const useAccessibility: () => AccessibilityContextValue;
56
+ /**
57
+ * Higher-Order Component for accessibility enhancements
58
+ */
59
+ export declare const withAccessibility: <P extends object>(WrappedComponent: React.ComponentType<P>) => {
60
+ (props: P): import("react/jsx-runtime").JSX.Element;
61
+ displayName: string;
62
+ };
63
+ export default AccessibilityProvider;
64
+ //# sourceMappingURL=AccessibilityProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessibilityProvider.d.ts","sourceRoot":"","sources":["../../src/components/AccessibilityProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAoD,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3F,MAAM,WAAW,kBAAkB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,gBAAgB,EAAE,YAAY,GAAG,IAAI,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CAClB;AAcD,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACpE,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,gBAAgB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC;IACpE,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB;AAqHD,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAoPtE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,yBAQnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EACjD,kBAAkB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YAEO,CAAC;;CAchD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ export interface BreadcrumbItem {
3
+ label: string;
4
+ href?: string;
5
+ icon?: React.ReactNode;
6
+ current?: boolean;
7
+ }
8
+ export interface BreadcrumbsProps {
9
+ items: BreadcrumbItem[];
10
+ separator?: React.ReactNode;
11
+ className?: string;
12
+ onNavigate?: (item: BreadcrumbItem, index: number) => void;
13
+ maxItems?: number;
14
+ showRoot?: boolean;
15
+ }
16
+ /**
17
+ * Generic Breadcrumbs component for navigation hierarchy
18
+ *
19
+ * Features:
20
+ * - Accessible navigation with proper ARIA labels
21
+ * - Customizable separators and icons
22
+ * - Responsive design with item truncation
23
+ * - Support for custom navigation handlers
24
+ * - Keyboard navigation support
25
+ * - Screen reader friendly
26
+ */
27
+ export declare const Breadcrumbs: React.FC<BreadcrumbsProps>;
28
+ /**
29
+ * Hook for managing breadcrumb state
30
+ */
31
+ export declare const useBreadcrumbs: () => {
32
+ breadcrumbs: BreadcrumbItem[];
33
+ addBreadcrumb: (item: BreadcrumbItem) => void;
34
+ removeBreadcrumb: (index: number) => void;
35
+ setBreadcrumbs: (items: BreadcrumbItem[]) => void;
36
+ clearBreadcrumbs: () => void;
37
+ };
38
+ export default Breadcrumbs;
39
+ //# sourceMappingURL=Breadcrumbs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/components/Breadcrumbs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA+IlD,CAAC;AAmBF;;GAEG;AACH,eAAO,MAAM,cAAc;;0BAGqB,cAAc;8BAIV,MAAM;4BAID,cAAc,EAAE;;CAexE,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,39 @@
1
+ import React, { Component, ErrorInfo, ReactNode } from 'react';
2
+ interface Props {
3
+ children: ReactNode;
4
+ fallback?: ReactNode;
5
+ onError?: (error: Error, errorInfo: ErrorInfo) => void;
6
+ showErrorDetails?: boolean;
7
+ }
8
+ interface State {
9
+ hasError: boolean;
10
+ error: Error | null;
11
+ errorInfo: ErrorInfo | null;
12
+ }
13
+ /**
14
+ * Generic ErrorBoundary component for catching and handling React errors
15
+ *
16
+ * Features:
17
+ * - Catches JavaScript errors anywhere in child component tree
18
+ * - Displays fallback UI with retry functionality
19
+ * - Shows error details in development mode
20
+ * - Customizable error handling and fallback UI
21
+ * - Automatic error logging
22
+ */
23
+ export declare class ErrorBoundary extends Component<Props, State> {
24
+ constructor(props: Props);
25
+ static getDerivedStateFromError(error: Error): State;
26
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
27
+ handleRetry: () => void;
28
+ handleRefresh: () => void;
29
+ render(): string | number | boolean | Iterable<React.ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
30
+ }
31
+ /**
32
+ * Higher-order component that wraps a component with ErrorBoundary
33
+ */
34
+ export declare function withErrorBoundary<P extends object>(WrappedComponent: React.ComponentType<P>, errorBoundaryProps?: Omit<Props, 'children'>): {
35
+ (props: P): import("react/jsx-runtime").JSX.Element;
36
+ displayName: string;
37
+ };
38
+ export default ErrorBoundary;
39
+ //# sourceMappingURL=ErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../src/components/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/D,UAAU,KAAK;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACvD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,KAAK;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,qBAAa,aAAc,SAAQ,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC7C,KAAK,EAAE,KAAK;IASxB,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;IASpD,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;IAwBpD,WAAW,aAMT;IAEF,aAAa,aAIX;IAEF,MAAM;CAgHN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EACjD,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACxC,kBAAkB,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;YAED,CAAC;;EAS5C;AAED,eAAe,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"QwickApp.d.ts","sourceRoot":"","sources":["../../src/components/QwickApp.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAiC,MAAM,OAAO,CAAC;AACtD,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,gBAAgB,CAAC;AAMxB,UAAU,sBAAuB,SAAQ,aAAa;IACpD,yDAAyD;IACzD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,sBAAsB,CAAC;CAErC;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAuFrD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,oBAM9B,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"QwickApp.d.ts","sourceRoot":"","sources":["../../src/components/QwickApp.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAiC,MAAM,OAAO,CAAC;AACtD,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,gBAAgB,CAAC;AAQxB,UAAU,sBAAuB,SAAQ,aAAa;IACpD,yDAAyD;IACzD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,sBAAsB,CAAC;CAErC;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA2FrD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,oBAM9B,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -19,6 +19,9 @@ export * from './Scaffold';
19
19
  export * from './ResponsiveMenu';
20
20
  export * from './QwickApp';
21
21
  export * from './AccessibilityChecker';
22
+ export * from './ErrorBoundary';
23
+ export * from './AccessibilityProvider';
24
+ export * from './Breadcrumbs';
22
25
  export { default as Logo } from './Logo';
23
26
  export type { LogoProps } from './Logo';
24
27
  export { default as QwickAppsLogo } from './QwickAppsLogo';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AAGvC,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,12 @@
1
+ @media (max-width:600px){.cover-image-header .MuiButton-root .MuiButton-startIcon+*{display:none}.cover-image-header .MuiButton-root{min-width:36px;padding:6px 8px}}html[data-palette=default]:not([data-theme=dark]),html[data-palette=default][data-theme=light]{--palette-primary-main:#007bff;--palette-primary-light:#4a90e2;--palette-primary-dark:#0056b3;--palette-on-primary:#fff;--palette-secondary-main:#6c757d;--palette-secondary-light:#868e96;--palette-secondary-dark:#495057;--palette-on-secondary:#fff;--palette-surface-main:#fff;--palette-surface-variant:#f5f5f5;--palette-surface-elevated:#fff;--palette-on-surface:#000;--palette-background-main:#fff;--palette-background-dark:#fafafa;--palette-background-overlay:hsla(0,0%,100%,.95);--palette-on-background:#000;--palette-header-bg-start:hsla(0,0%,100%,.98);--palette-header-bg-end:hsla(0,0%,100%,.95);--palette-header-collapsed-bg-start:hsla(0,0%,100%,.99);--palette-header-collapsed-bg-end:hsla(0,0%,100%,.96);--palette-text-primary:#000;--palette-text-secondary:#666;--palette-text-disabled:rgba(0,0,0,.38);--palette-text-inverted:#fff;--palette-border-main:#e0e0e0;--palette-border-light:rgba(0,0,0,.12);--palette-border-lighter:rgba(0,0,0,.05);--palette-border-medium:#ccc;--palette-success-main:#28a745;--palette-success-light:#d4edda;--palette-success-dark:#155724;--palette-on-success:#fff;--palette-success-border:#c3e6cb;--palette-error-main:#dc3545;--palette-error-light:#f8d7da;--palette-error-dark:#721c24;--palette-on-error:#fff;--palette-error-border:#f5c6cb;--palette-warning-main:#ffc107;--palette-warning-light:#fff3cd;--palette-warning-dark:#856404;--palette-on-warning:#000;--palette-warning-border:#ffeeba;--palette-info-main:#007acc;--palette-info-light:#f0f8ff;--palette-info-dark:#058;--palette-on-info:#fff;--palette-info-border:#007acc;--palette-accent-main:#ff6b35;--palette-accent-light:#ffb3a0;--palette-accent-dark:#cc5429;--palette-on-accent:#fff;--palette-control-main:#1a1a1a;--palette-control-light:#2a2a2a;--palette-control-text:#ccc;--palette-control-border:#333}html[data-palette=default][data-theme=dark]{--palette-primary-main:#4a90e2;--palette-primary-light:#87ceeb;--palette-primary-dark:#1a365d;--palette-on-primary:#fff;--palette-secondary-main:#868e96;--palette-secondary-light:#adb5bd;--palette-secondary-dark:#6c757d;--palette-on-secondary:#fff;--palette-surface-main:#1e1e1e;--palette-surface-variant:#2a2a2a;--palette-surface-elevated:#353535;--palette-on-surface:#fff;--palette-background-main:#121212;--palette-background-dark:#2a2a2a;--palette-background-overlay:rgba(30,30,30,.95);--palette-on-background:#fff;--palette-header-bg-start:hsla(0,0%,7%,.98);--palette-header-bg-end:hsla(0,0%,7%,.95);--palette-header-collapsed-bg-start:hsla(0,0%,7%,.99);--palette-header-collapsed-bg-end:hsla(0,0%,7%,.96);--palette-text-primary:#fff;--palette-text-secondary:#b0b0b0;--palette-text-disabled:hsla(0,0%,100%,.38);--palette-text-inverted:#000;--palette-border-main:#555;--palette-border-light:hsla(0,0%,100%,.12);--palette-border-lighter:hsla(0,0%,100%,.05);--palette-border-medium:#333;--palette-success-main:#4ade80;--palette-success-light:#064e3b;--palette-success-dark:#22c55e;--palette-on-success:#fff;--palette-success-border:#065f46;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-on-error:#fff;--palette-error-border:#991b1b;--palette-warning-main:#fbbf24;--palette-warning-light:#78350f;--palette-warning-dark:#f59e0b;--palette-on-warning:#000;--palette-warning-border:#92400e;--palette-info-main:#60a5fa;--palette-info-light:#1e3a8a;--palette-info-dark:#3b82f6;--palette-on-info:#fff;--palette-info-border:#1d4ed8;--palette-accent-main:#ff8a65;--palette-accent-light:#ffcc9c;--palette-accent-dark:#cc6e52;--palette-on-accent:#fff;--palette-control-main:#2a2a2a;--palette-control-light:#3a3a3a;--palette-control-text:#e0e0e0;--palette-control-border:#555}html[data-palette=autumn]:not([data-theme=dark]),html[data-palette=autumn][data-theme=light]{--palette-primary-main:#ea580c;--palette-primary-light:#fb923c;--palette-primary-dark:#c2410c;--palette-on-primary:#fff;--palette-secondary-main:#b45309;--palette-secondary-light:#d97706;--palette-secondary-dark:#92400e;--palette-on-secondary:#fff;--palette-surface-main:#fffbeb;--palette-surface-variant:#fef3c7;--palette-surface-elevated:#fff;--palette-on-surface:#451a03;--palette-background-main:#fefce8;--palette-background-dark:#fef3c7;--palette-background-overlay:hsla(55,92%,95%,.95);--palette-on-background:#78350f;--palette-header-bg-start:hsla(55,92%,95%,.98);--palette-header-bg-end:hsla(55,92%,95%,.95);--palette-header-collapsed-bg-start:hsla(55,92%,95%,.99);--palette-header-collapsed-bg-end:hsla(55,92%,95%,.96);--palette-text-primary:#451a03;--palette-text-secondary:#78350f;--palette-text-disabled:rgba(69,26,3,.38);--palette-text-inverted:#fff;--palette-border-main:#d4d4aa;--palette-border-light:rgba(69,26,3,.12);--palette-border-lighter:rgba(69,26,3,.05);--palette-border-medium:#a8a29e;--palette-success-main:#16a34a;--palette-success-light:#dcfce7;--palette-success-dark:#14532d;--palette-success-border:#bbf7d0;--palette-error-main:#dc2626;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-error-border:#fecaca;--palette-warning-main:#f59e0b;--palette-warning-light:#fef3c7;--palette-warning-dark:#78350f;--palette-warning-border:#fde68a;--palette-info-main:#0891b2;--palette-info-light:#e6fffa;--palette-info-dark:#164e63;--palette-on-info:#fff;--palette-info-border:#67e8f9;--palette-accent-main:#dc2626;--palette-accent-light:#f87171;--palette-accent-dark:#991b1b;--palette-on-accent:#fff;--palette-control-main:#451a03;--palette-control-light:#78350f;--palette-control-text:#fef3c7;--palette-control-border:#92400e}html[data-palette=autumn][data-theme=dark]{--palette-primary-main:#fb923c;--palette-primary-light:#fdba74;--palette-primary-dark:#ea580c;--palette-on-primary:#1c1917;--palette-secondary-main:#fbbf24;--palette-secondary-light:#fcd34d;--palette-secondary-dark:#f59e0b;--palette-on-secondary:#1c1917;--palette-surface-main:#1c1917;--palette-surface-variant:#292524;--palette-surface-elevated:#44403c;--palette-on-surface:#fef3c7;--palette-background-main:#0c0a09;--palette-background-dark:#1c1917;--palette-background-overlay:rgba(28,25,23,.95);--palette-on-background:#d6d3d1;--palette-header-bg-start:rgba(12,10,9,.98);--palette-header-bg-end:rgba(12,10,9,.95);--palette-header-collapsed-bg-start:rgba(12,10,9,.99);--palette-header-collapsed-bg-end:rgba(12,10,9,.96);--palette-text-primary:#fef3c7;--palette-text-secondary:#d6d3d1;--palette-text-disabled:hsla(48,96%,89%,.38);--palette-text-inverted:#0c0a09;--palette-border-main:#78716c;--palette-border-light:hsla(48,96%,89%,.12);--palette-border-lighter:hsla(48,96%,89%,.05);--palette-border-medium:#57534e;--palette-success-main:#4ade80;--palette-success-light:#14532d;--palette-success-dark:#22c55e;--palette-success-border:#166534;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#eab308;--palette-warning-light:#78350f;--palette-warning-dark:#ca8a04;--palette-warning-border:#a16207;--palette-info-main:#22d3ee;--palette-info-light:#164e63;--palette-info-dark:#06b6d4;--palette-on-info:#0c0a09;--palette-info-border:#0891b2;--palette-accent-main:#b91c1c;--palette-accent-light:#dc2626;--palette-accent-dark:#7f1d1d;--palette-on-accent:#fef3c7;--palette-control-main:#292524;--palette-control-light:#44403c;--palette-control-text:#f5f5f4;--palette-control-border:#57534e}html[data-palette=ocean]:not([data-theme=dark]),html[data-palette=ocean][data-theme=light]{--palette-primary-main:#0891b2;--palette-primary-light:#22d3ee;--palette-primary-dark:#164e63;--palette-on-primary:#fff;--palette-secondary-main:#0f766e;--palette-secondary-light:#14b8a6;--palette-secondary-dark:#134e4a;--palette-on-secondary:#fff;--palette-surface-main:#f0fdfa;--palette-surface-variant:#ccfbf1;--palette-surface-elevated:#fff;--palette-on-surface:#164e63;--palette-background-main:#ecfeff;--palette-background-dark:#cffafe;--palette-background-overlay:rgba(236,254,255,.95);--palette-on-background:#0f766e;--palette-header-bg-start:rgba(236,254,255,.98);--palette-header-bg-end:rgba(236,254,255,.95);--palette-header-collapsed-bg-start:rgba(236,254,255,.99);--palette-header-collapsed-bg-end:rgba(236,254,255,.96);--palette-text-primary:#164e63;--palette-text-secondary:#0891b2;--palette-text-disabled:rgba(22,78,99,.38);--palette-text-inverted:#fff;--palette-border-main:#a7f3d0;--palette-border-light:rgba(22,78,99,.12);--palette-border-lighter:rgba(22,78,99,.05);--palette-border-medium:#67e8f9;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#065f46;--palette-success-border:#a7f3d0;--palette-error-main:#ef4444;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-error-border:#fecaca;--palette-warning-main:#f59e0b;--palette-warning-light:#fef3c7;--palette-warning-dark:#78350f;--palette-warning-border:#fde68a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#fff;--palette-info-border:#7dd3fc;--palette-accent-main:#f97316;--palette-accent-light:#fb923c;--palette-accent-dark:#ea580c;--palette-on-accent:#fff;--palette-control-main:#0c4a6e;--palette-control-light:#075985;--palette-control-text:#cffafe;--palette-control-border:#0891b2}html[data-palette=ocean][data-theme=dark]{--palette-primary-main:#22d3ee;--palette-primary-light:#67e8f9;--palette-primary-dark:#0891b2;--palette-on-primary:#0a1a1f;--palette-secondary-main:#5eead4;--palette-secondary-light:#99f6e4;--palette-secondary-dark:#14b8a6;--palette-on-secondary:#0a1a1f;--palette-surface-main:#0a1a1f;--palette-surface-variant:#164e63;--palette-surface-elevated:#0e7490;--palette-on-surface:#cffafe;--palette-background-main:#020617;--palette-background-dark:#0c1821;--palette-background-overlay:rgba(10,26,31,.95);--palette-on-background:#5eead4;--palette-header-bg-start:rgba(2,6,23,.98);--palette-header-bg-end:rgba(2,6,23,.95);--palette-header-collapsed-bg-start:rgba(2,6,23,.99);--palette-header-collapsed-bg-end:rgba(2,6,23,.96);--palette-text-primary:#cffafe;--palette-text-secondary:#a5f3fc;--palette-text-disabled:rgba(207,250,254,.38);--palette-text-inverted:#020617;--palette-border-main:#155e75;--palette-border-light:rgba(207,250,254,.12);--palette-border-lighter:rgba(207,250,254,.05);--palette-border-medium:#0c4a6e;--palette-success-main:#34d399;--palette-success-light:#065f46;--palette-success-dark:#10b981;--palette-success-border:#047857;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb7185;--palette-warning-light:#881337;--palette-warning-dark:#e11d48;--palette-warning-border:#be123c;--palette-info-main:#0ea5e9;--palette-info-light:#0c4a6e;--palette-info-dark:#38bdf8;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#ea580c;--palette-accent-light:#fb923c;--palette-accent-dark:#c2410c;--palette-on-accent:#cffafe;--palette-control-main:#164e63;--palette-control-light:#0e7490;--palette-control-text:#ecfeff;--palette-control-border:#155e75}html[data-palette=spring]:not([data-theme=dark]),html[data-palette=spring][data-theme=light]{--palette-primary-main:#16a34a;--palette-primary-light:#4ade80;--palette-primary-dark:#15803d;--palette-on-primary:#fff;--palette-secondary-main:#ec4899;--palette-secondary-light:#f472b6;--palette-secondary-dark:#be185d;--palette-on-secondary:#fff;--palette-surface-main:#f7fee7;--palette-surface-variant:#d9f7be;--palette-surface-elevated:#fff;--palette-on-surface:#14532d;--palette-background-main:#f0fdf4;--palette-background-dark:#dcfce7;--palette-background-overlay:rgba(240,253,244,.95);--palette-on-background:#166534;--palette-text-primary:#14532d;--palette-text-secondary:#166534;--palette-text-disabled:rgba(20,83,45,.38);--palette-text-inverted:#fff;--palette-border-main:#bbf7d0;--palette-border-light:rgba(20,83,45,.12);--palette-border-lighter:rgba(20,83,45,.05);--palette-border-medium:#86efac;--palette-success-main:#22c55e;--palette-success-light:#dcfce7;--palette-success-dark:#15803d;--palette-success-border:#bbf7d0;--palette-error-main:#f43f5e;--palette-error-light:#ffe4e6;--palette-error-dark:#881337;--palette-error-border:#fecdd3;--palette-warning-main:#eab308;--palette-warning-light:#fefce8;--palette-warning-dark:#713f12;--palette-warning-border:#fef08a;--palette-info-main:#0ea5e9;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#14532d;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#fff;--palette-control-main:#365314;--palette-control-light:#4d7c0f;--palette-control-text:#ecfdf5;--palette-control-border:#65a30d}html[data-palette=spring][data-theme=dark]{--palette-primary-main:#4ade80;--palette-primary-light:#86efac;--palette-primary-dark:#16a34a;--palette-on-primary:#0f1f0f;--palette-secondary-main:#f472b6;--palette-secondary-light:#f9a8d4;--palette-secondary-dark:#ec4899;--palette-on-secondary:#0f1f0f;--palette-surface-main:#0f1f0f;--palette-surface-variant:#1a2e1a;--palette-surface-elevated:#2d4a2d;--palette-on-surface:#dcfce7;--palette-background-main:#0a120a;--palette-background-dark:#0f1f0f;--palette-background-overlay:rgba(15,31,15,.95);--palette-on-background:#bbf7d0;--palette-text-primary:#dcfce7;--palette-text-secondary:#bbf7d0;--palette-text-disabled:rgba(220,252,231,.38);--palette-text-inverted:#0a120a;--palette-border-main:#166534;--palette-border-light:rgba(220,252,231,.12);--palette-border-lighter:rgba(220,252,231,.05);--palette-border-medium:#14532d;--palette-success-main:#22c55e;--palette-success-light:#14532d;--palette-success-dark:#4ade80;--palette-success-border:#166534;--palette-error-main:#f472b6;--palette-error-light:#881337;--palette-error-dark:#ec4899;--palette-error-border:#be185d;--palette-warning-main:#facc15;--palette-warning-light:#713f12;--palette-warning-dark:#eab308;--palette-warning-border:#a16207;--palette-info-main:#06b6d4;--palette-info-light:#164e63;--palette-info-dark:#22d3ee;--palette-on-info:#0a120a;--palette-info-border:#0891b2;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#dcfce7;--palette-control-main:#1a2e1a;--palette-control-light:#2d4a2d;--palette-control-text:#dcfce7;--palette-control-border:#166534}html[data-palette=winter]:not([data-theme=dark]),html[data-palette=winter][data-theme=light]{--palette-primary-main:#0077be;--palette-primary-light:#5ba3d0;--palette-primary-dark:#005082;--palette-on-primary:#fff;--palette-secondary-main:#4682b4;--palette-secondary-light:#7ba7cc;--palette-secondary-dark:#2e5984;--palette-on-secondary:#fff;--palette-surface-main:#fafbfc;--palette-surface-variant:#e2e8f0;--palette-surface-elevated:#fff;--palette-on-surface:#0f172a;--palette-background-main:#f8fafc;--palette-background-dark:#f1f5f9;--palette-background-overlay:rgba(248,250,252,.95);--palette-on-background:#475569;--palette-header-bg-start:rgba(248,250,252,.98);--palette-header-bg-end:rgba(248,250,252,.95);--palette-header-collapsed-bg-start:rgba(248,250,252,.99);--palette-header-collapsed-bg-end:rgba(248,250,252,.96);--palette-text-primary:#0f172a;--palette-text-secondary:#475569;--palette-text-disabled:rgba(15,23,42,.38);--palette-text-inverted:#fff;--palette-border-main:#cbd5e1;--palette-border-light:rgba(15,23,42,.12);--palette-border-lighter:rgba(15,23,42,.05);--palette-border-medium:#94a3b8;--palette-success-main:#059669;--palette-success-light:#d1fae5;--palette-success-dark:#064e3b;--palette-success-border:#a7f3d0;--palette-error-main:#dc2626;--palette-error-light:#fee2e2;--palette-error-dark:#7f1d1d;--palette-error-border:#fecaca;--palette-warning-main:#d97706;--palette-warning-light:#fef3c7;--palette-warning-dark:#92400e;--palette-warning-border:#fde68a;--palette-info-main:#0284c7;--palette-info-light:#e0f2fe;--palette-info-dark:#0c4a6e;--palette-on-info:#fff;--palette-info-border:#7dd3fc;--palette-accent-main:#ec4899;--palette-accent-light:#fce7f3;--palette-accent-dark:#be185d;--palette-on-accent:#fff;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}html[data-palette=winter][data-theme=dark]{--palette-primary-main:#7dd3fc;--palette-primary-light:#bae6fd;--palette-primary-dark:#0369a1;--palette-on-primary:#020617;--palette-secondary-main:#94a3b8;--palette-secondary-light:#cbd5e1;--palette-secondary-dark:#64748b;--palette-on-secondary:#020617;--palette-surface-main:#0f172a;--palette-surface-variant:#1e293b;--palette-surface-elevated:#334155;--palette-on-surface:#f8fafc;--palette-background-main:#020617;--palette-background-dark:#0f172a;--palette-background-overlay:rgba(15,23,42,.95);--palette-on-background:#cbd5e1;--palette-header-bg-start:rgba(2,6,23,.98);--palette-header-bg-end:rgba(2,6,23,.95);--palette-header-collapsed-bg-start:rgba(2,6,23,.99);--palette-header-collapsed-bg-end:rgba(2,6,23,.96);--palette-text-primary:#f8fafc;--palette-text-secondary:#cbd5e1;--palette-text-disabled:rgba(248,250,252,.38);--palette-text-inverted:#020617;--palette-border-main:#475569;--palette-border-light:rgba(248,250,252,.12);--palette-border-lighter:rgba(248,250,252,.05);--palette-border-medium:#334155;--palette-success-main:#34d399;--palette-success-light:#064e3b;--palette-success-dark:#10b981;--palette-success-border:#065f46;--palette-error-main:#f87171;--palette-error-light:#7f1d1d;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb923c;--palette-warning-light:#9a3412;--palette-warning-dark:#f97316;--palette-warning-border:#c2410c;--palette-info-main:#38bdf8;--palette-info-light:#0c4a6e;--palette-info-dark:#0ea5e9;--palette-on-info:#020617;--palette-info-border:#0284c7;--palette-accent-main:#f472b6;--palette-accent-light:#fce7f3;--palette-accent-dark:#db2777;--palette-on-accent:#f8fafc;--palette-control-main:#1e293b;--palette-control-light:#334155;--palette-control-text:#e2e8f0;--palette-control-border:#475569}html[data-palette=cosmic]:not([data-theme=dark]),html[data-palette=cosmic][data-theme=light]{--palette-primary-main:#8b5cf6;--palette-primary-light:#a78bfa;--palette-primary-dark:#7c3aed;--palette-on-primary:#fff;--palette-secondary-main:#8b5cf6;--palette-secondary-light:#c4b5fd;--palette-secondary-dark:#6d28d9;--palette-on-secondary:#fff;--palette-surface-main:#faf7ff;--palette-surface-variant:#f3e8ff;--palette-surface-elevated:#fff;--palette-on-surface:#4c1d95;--palette-background-main:#fef7ff;--palette-background-dark:#fae8ff;--palette-background-overlay:rgba(254,247,255,.95);--palette-on-background:#6b21a8;--palette-header-bg-start:rgba(254,247,255,.98);--palette-header-bg-end:rgba(254,247,255,.95);--palette-header-collapsed-bg-start:rgba(254,247,255,.99);--palette-header-collapsed-bg-end:rgba(254,247,255,.96);--palette-text-primary:#4c1d95;--palette-text-secondary:#7c3aed;--palette-text-disabled:rgba(76,29,149,.38);--palette-text-inverted:#fff;--palette-border-main:#c4b5fd;--palette-border-light:rgba(76,29,149,.12);--palette-border-lighter:rgba(76,29,149,.05);--palette-border-medium:#a78bfa;--palette-success-main:#10b981;--palette-success-light:#d1fae5;--palette-success-dark:#047857;--palette-success-border:#6ee7b7;--palette-error-main:#ef4444;--palette-error-light:#fee2e2;--palette-error-dark:#b91c1c;--palette-error-border:#fecaca;--palette-warning-main:#f59e0b;--palette-warning-light:#fef3c7;--palette-warning-dark:#b45309;--palette-warning-border:#fde68a;--palette-info-main:#3b82f6;--palette-info-light:#dbeafe;--palette-info-dark:#1d4ed8;--palette-on-info:#fff;--palette-info-border:#93c5fd;--palette-accent-main:#ec4899;--palette-accent-light:#f472b6;--palette-accent-dark:#be185d;--palette-on-accent:#fff;--palette-control-main:#1e1b4b;--palette-control-light:#3730a3;--palette-control-text:#e0e7ff;--palette-control-border:#8b5cf6}html[data-palette=cosmic][data-theme=dark]{--palette-primary-main:#a78bfa;--palette-primary-light:#c4b5fd;--palette-primary-dark:#8b5cf6;--palette-on-primary:#1e1b4b;--palette-secondary-main:#c4b5fd;--palette-secondary-light:#ddd6fe;--palette-secondary-dark:#a78bfa;--palette-on-secondary:#1e1b4b;--palette-surface-main:#1e1b4b;--palette-surface-variant:#312e81;--palette-surface-elevated:#3730a3;--palette-on-surface:#e0e7ff;--palette-background-main:#0f0c29;--palette-background-dark:#1a1625;--palette-background-overlay:rgba(15,12,41,.95);--palette-on-background:#c4b5fd;--palette-header-bg-start:rgba(15,12,41,.98);--palette-header-bg-end:rgba(15,12,41,.95);--palette-header-collapsed-bg-start:rgba(15,12,41,.99);--palette-header-collapsed-bg-end:rgba(15,12,41,.96);--palette-text-primary:#e0e7ff;--palette-text-secondary:#c4b5fd;--palette-text-disabled:rgba(224,231,255,.38);--palette-text-inverted:#0f0c29;--palette-border-main:#4338ca;--palette-border-light:rgba(224,231,255,.12);--palette-border-lighter:rgba(224,231,255,.05);--palette-border-medium:#312e81;--palette-success-main:#34d399;--palette-success-light:#047857;--palette-success-dark:#10b981;--palette-success-border:#065f46;--palette-error-main:#f87171;--palette-error-light:#b91c1c;--palette-error-dark:#ef4444;--palette-error-border:#991b1b;--palette-warning-main:#fb7185;--palette-warning-light:#881337;--palette-warning-dark:#e11d48;--palette-warning-border:#be123c;--palette-info-main:#60a5fa;--palette-info-light:#1d4ed8;--palette-info-dark:#3b82f6;--palette-on-info:#0f0c29;--palette-info-border:#2563eb;--palette-accent-main:#f472b6;--palette-accent-light:#f9a8d4;--palette-accent-dark:#ec4899;--palette-on-accent:#0f0c29;--palette-control-main:#312e81;--palette-control-light:#4338ca;--palette-control-text:#f3f4f6;--palette-control-border:#4338ca}.dynamic-logo{transition:all .3s ease}.dynamic-logo:hover{transform:scale(1.05)}.logo-first-part{fill:var(--theme-primary);transition:fill .3s ease}.logo-second-part{fill:var(--theme-accent);transition:fill .3s ease}.logo-badge{fill:var(--theme-warning);transition:fill .3s ease}.logo-badge-circle{opacity:.9}.logo-badge-star{fill:var(--theme-accent,var(--theme-warning));opacity:.8}.logo-badge-square{fill:var(--theme-info,var(--theme-warning));opacity:.7}.logo-badge-heart{fill:var(--theme-error,var(--theme-warning));opacity:.8}.logo-tiny,.logo-tiny .logo-first-part,.logo-tiny .logo-second-part{font-size:16px}.logo-small,.logo-small .logo-first-part,.logo-small .logo-second-part{font-size:20px}.logo-medium,.logo-medium .logo-first-part,.logo-medium .logo-second-part{font-size:28px}.logo-large,.logo-large .logo-first-part,.logo-large .logo-second-part{font-size:36px}.logo-extra-large,.logo-extra-large .logo-first-part,.logo-extra-large .logo-second-part{font-size:48px}.dynamic-logo.logo-high-contrast .logo-first-part{filter:drop-shadow(0 0 2px var(--theme-accent));opacity:1}.dynamic-logo.logo-high-contrast .logo-second-part{filter:drop-shadow(0 0 2px var(--theme-warning));opacity:1}.dynamic-logo.logo-high-contrast .logo-badge{filter:drop-shadow(0 0 2px var(--theme-primary));opacity:1}.dynamic-logo.logo-monochrome .logo-first-part,.dynamic-logo.logo-monochrome .logo-second-part{fill:#000;font-weight:900}.dynamic-logo.logo-monochrome .logo-badge{fill:#000;opacity:.8}html[data-theme=dark] .dynamic-logo.logo-monochrome .logo-badge,html[data-theme=dark] .dynamic-logo.logo-monochrome .logo-first-part,html[data-theme=dark] .dynamic-logo.logo-monochrome .logo-second-part{fill:#fff}.dynamic-logo.logo-on-primary .logo-first-part{fill:var(--theme-text-inverted,#fff);font-weight:700}.dynamic-logo.logo-on-primary .logo-second-part{fill:var(--theme-accent-light,#60a5fa);font-weight:700}.dynamic-logo.logo-on-primary .logo-badge{fill:var(--theme-warning,#ffb020);opacity:.9}.dynamic-logo.colorway-accent .logo-first-part{fill:var(--theme-accent,var(--theme-success))}.dynamic-logo.colorway-accent .logo-second-part{fill:var(--theme-info)}.dynamic-logo.colorway-accent .logo-badge{fill:var(--theme-error)}.dynamic-logo.colorway-vibrant .logo-first-part{fill:var(--theme-primary)}.dynamic-logo.colorway-vibrant .logo-second-part{fill:var(--theme-accent,var(--theme-success))}.dynamic-logo.colorway-vibrant .logo-badge{fill:var(--theme-warning)}.dynamic-logo.logo-default .logo-first-part{fill:var(--theme-primary,#3b82f6)}.dynamic-logo.logo-default .logo-second-part{fill:var(--theme-accent,var(--theme-secondary,#6366f1))}.dynamic-logo.logo-default .logo-badge{fill:var(--theme-warning,#f59e0b)}.custom-first-part{fill:#ff6b35!important;font-weight:900!important}.custom-second-part{fill:#004e89!important;font-weight:200!important}.custom-styling{filter:drop-shadow(0 0 3px rgba(255,107,53,.4));text-shadow:1px 1px 2px rgba(0,0,0,.3)}.gradient-text{fill:url(#textGradient);font-weight:600}.page{--page-padding-none:0;--page-padding-small:1rem;--page-padding-medium:1.5rem;--page-padding-large:2rem;min-height:100%;width:100%}.page-variant-centered{align-items:center;display:flex;flex-direction:column;text-align:center}.page-variant-narrow{margin:0 auto;max-width:600px}.page-variant-wide{margin:0 auto;max-width:1400px}.page-variant-fullwidth{max-width:none;width:100%}.page-padding-none{padding:var(--page-padding-none)}.page-padding-small{padding:var(--page-padding-small)}.page-padding-medium{padding:var(--page-padding-medium)}.page-padding-large{padding:var(--page-padding-large)}.page-background-default{background:transparent}.page-background-surface{background:var(--theme-surface)}.page-background-alternate{background:var(--theme-surface-variant)}.page-max-width-small{margin-left:auto;margin-right:auto;max-width:600px}.page-max-width-medium{margin-left:auto;margin-right:auto;max-width:800px}.page-max-width-large{margin-left:auto;margin-right:auto;max-width:1200px}.page-max-width-extra-large{margin-left:auto;margin-right:auto;max-width:1400px}.page-max-width-none{max-width:none}.page-header{margin-bottom:1.5rem}.page-footer{margin-top:1.5rem}.page-title{color:var(--theme-on-background);flex:1;font-size:clamp(1.75rem,4vw,2.5rem);font-weight:600;line-height:1.2;margin:0;transition:font-size .3s ease,font-weight .3s ease,margin .3s ease}.page-title-collapsed .page-title{font-size:clamp(1.25rem,3vw,1.75rem);font-weight:500;margin-bottom:.5rem}.page-title-collapsed .page-header{margin-bottom:1rem}.page-header-actions{align-items:center;display:flex;flex-wrap:wrap;gap:.75rem}.page-content{color:var(--theme-on-background);line-height:1.6;max-height:calc(100vh - var(--page-header-height, 200px));overflow-y:auto}.page-loading{color:var(--theme-on-background);flex-direction:column;gap:1rem;min-height:200px;text-align:center}.loading-spinner,.page-loading{align-items:center;display:flex;justify-content:center}.spinner{animation:spin 1s linear infinite;border-top:3px solid var(--theme-outline-variant);border:3px solid var(--theme-outline-variant);border-radius:50%;border-top-color:var(--theme-primary);height:40px;width:40px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.page-loading-bar{background:var(--theme-outline-variant);height:4px;overflow:hidden;position:relative;width:100%}.page-loading-bar-top{left:0;position:absolute;right:0;top:0}.page-loading-bar-bottom{bottom:0;left:0;position:absolute;right:0}.loading-bar-progress{animation:loading-bar-slide 2s ease-in-out infinite;background:linear-gradient(90deg,var(--theme-primary),var(--theme-secondary));height:100%;width:30%}@keyframes loading-bar-slide{0%{transform:translateX(-100%)}50%{transform:translateX(350%)}to{transform:translateX(-100%)}}.page-loading-dots{min-height:120px}.loading-dots{align-items:center;display:flex;gap:8px}.loading-dots span{animation:loading-dots-bounce 1.4s ease-in-out infinite both;background:var(--theme-primary);border-radius:50%;height:8px;width:8px}.loading-dots span:first-child{animation-delay:-.32s}.loading-dots span:nth-child(2){animation-delay:-.16s}@keyframes loading-dots-bounce{0%,80%,to{opacity:.5;transform:scale(0)}40%{opacity:1;transform:scale(1)}}.loading-message{font-size:.875rem;margin-top:1rem;opacity:.8}.loading-message,.page-message{color:var(--theme-on-background)}.page-message{align-items:flex-start;background:var(--theme-surface-variant);border-left:4px solid;border-radius:var(--theme-border-radius,8px);display:flex;gap:1rem;margin:1rem 0;padding:1rem 1.5rem}.page-message-error{background:rgba(220,38,38,.05);border-left-color:var(--theme-error,#dc2626);color:var(--theme-error,#dc2626)}.page-message-warning{background:rgba(245,158,11,.05);border-left-color:var(--theme-warning,#f59e0b);color:var(--theme-warning,#f59e0b)}.page-message-success{background:rgba(16,185,129,.05);border-left-color:var(--theme-success,#10b981);color:var(--theme-success,#10b981)}.page-message-info{background:rgba(59,130,246,.05);border-left-color:var(--theme-info,#3b82f6);color:var(--theme-info,#3b82f6)}.page-message-loading{background:rgba(var(--theme-primary-rgb,59,130,246),.05);border-left-color:var(--theme-primary);color:var(--theme-primary)}.message-icon{flex-shrink:0;font-size:1.5rem;margin-top:.125rem}.message-content{flex:1;min-width:0}.message-content p{font-size:.875rem;line-height:1.5;margin:0}.message-content h3{font-size:1rem;font-weight:600;margin:0 0 .5rem}.page-message.message-compact{margin:.5rem 0;padding:.75rem 1rem}.page-message.message-prominent{flex-direction:column;justify-content:center;margin:1.5rem 0;min-height:200px;padding:1.5rem 2rem;text-align:center}.page-message.message-prominent .message-icon{font-size:3rem;margin:0 auto 1rem}.page-message.message-prominent .message-content{text-align:center}@media (max-width:768px){.page-header{align-items:stretch;flex-direction:column;gap:1rem}.page-title{font-size:clamp(1.5rem,6vw,2rem)}.page-header-actions{justify-content:flex-start}.page-padding-medium{padding:var(--page-padding-small)}.page-padding-large{padding:var(--page-padding-medium)}.page-max-width-extra-large,.page-max-width-large,.page-max-width-medium,.page-max-width-small{margin-left:1rem;margin-right:1rem;max-width:calc(100% - 2rem)}}@media (max-width:480px){.page-header-actions{justify-content:stretch;width:100%;>*{flex:1;min-width:0}}.retry-button{max-width:300px;width:100%}}@media (prefers-contrast:high){.page-title{font-weight:700}.spinner{border-width:4px}.retry-button{border:2px solid var(--theme-on-primary)}}@media (prefers-reduced-motion:reduce){.spinner{animation:none}.retry-button{transition:none}.retry-button:hover{transform:none}}@media print{.page-error,.page-header-actions,.page-loading{display:none}.page-title{color:#000;font-size:1.5rem}.page-content{color:#000}}.app-scaffold{--appbar-height:64px;--bottom-nav-height:80px;--rail-width-collapsed:80px;--rail-width-expanded:280px;--touch-target-size:48px;--scaffold-background:var(--theme-background);--scaffold-surface:var(--theme-surface);--scaffold-on-surface:var(--theme-on-surface);--scaffold-primary:var(--theme-primary);--scaffold-on-primary:var(--theme-on-primary);--scaffold-outline:var(--theme-border-main);--scaffold-shadow:var(--theme-elevation-2);background:var(--scaffold-background);font-family:var(--theme-font-family,"Segoe UI",sans-serif);min-height:100vh;position:relative}.app-scaffold-appbar{background:var(--scaffold-surface);border-bottom:1px solid var(--scaffold-outline);box-shadow:var(--scaffold-shadow);left:0;position:fixed;right:0;top:0;z-index:1100}.appbar-content{align-items:center;display:flex;height:100%;margin:0 auto;max-width:1200px;padding:0 16px}.appbar-center,.appbar-left,.appbar-right{align-items:center;display:flex;gap:8px}.appbar-left{flex:0 0 auto}.appbar-center{flex:1;justify-content:center;position:relative}.appbar-right{flex:0 0 auto}.appbar-logo{align-items:center;display:flex;height:40px}.appbar-navigation{align-items:center;display:flex;gap:4px}.appbar-actions,.appbar-page-actions{align-items:center;display:flex;gap:8px}.menu-button{align-items:center;background:transparent;border:none;border-radius:50%;color:var(--scaffold-on-surface);cursor:pointer;display:flex;height:var(--touch-target-size);justify-content:center;transition:background-color .2s ease;width:var(--touch-target-size);&:hover{background:rgba(0,0,0,.04)}&:active{background:rgba(0,0,0,.08)}}.hamburger-icon{span{background:currentColor;border-radius:1px;display:block;height:2px;transition:all .3s ease;width:100%}}.menu-item{border-radius:12px;color:var(--scaffold-on-surface);font-size:14px;font-weight:500;justify-content:center;min-height:var(--touch-target-size);min-width:var(--touch-target-size);padding:12px 16px;&:hover:not(.disabled){background:rgba(0,0,0,.04)}&:active:not(.disabled){background:rgba(0,0,0,.08)}&.active{background:var(--scaffold-primary);color:var(--scaffold-on-primary)}&.disabled{cursor:default;opacity:.38}}.menu-item-label{font-size:inherit;font-weight:inherit}.menu-item-badge{align-items:center;border-radius:10px;display:flex;font-size:11px;height:16px;justify-content:center;line-height:1;min-width:16px;padding:2px 6px;position:absolute;right:6px;top:6px}.menu-item-appbar{flex-direction:row;gap:8px;min-width:auto;padding:8px 16px}.menu-item-icon-appbar{height:20px;width:20px}.menu-item-label-appbar{font-size:14px}.bottom-navigation{background:var(--scaffold-surface);border-top:1px solid var(--scaffold-outline);bottom:0;box-shadow:0 -2px 8px rgba(0,0,0,.1);height:var(--bottom-nav-height);left:0;position:fixed;right:0;z-index:1000}.bottom-nav-items{align-items:center;display:flex;height:100%;justify-content:space-around;margin:0 auto;max-width:600px;padding:0 8px}.menu-item-bottom{flex:1;flex-direction:column;gap:4px;max-width:120px;min-width:64px;padding:8px 12px;text-align:center}.menu-item-icon-bottom{height:24px;margin:0 auto;width:24px}.menu-item-label-bottom{font-size:12px;font-weight:500;line-height:1}.navigation-rail{background:var(--scaffold-surface);border-right:1px solid var(--scaffold-outline);bottom:0;box-shadow:2px 0 8px rgba(0,0,0,.1);left:0;overflow:hidden;position:fixed;top:var(--appbar-height);transition:width .3s ease;z-index:1000;&.collapsed{width:var(--rail-width-collapsed)}&.expanded{width:var(--rail-width-expanded)}}.rail-items{display:flex;flex-direction:column;gap:4px;height:100%;overflow-y:auto;padding:12px}.menu-item-rail{flex-direction:row;gap:12px;justify-content:flex-start;min-width:var(--touch-target-size);padding:12px 16px;.collapsed &{justify-content:center;padding:12px;.menu-item-label{display:none}}}.menu-item-icon-rail{height:24px;width:24px}.menu-item-label-rail{font-size:14px;font-weight:500}.drawer-overlay{animation:fadeIn .2s ease;background:rgba(0,0,0,.5);left:0;z-index:1200}.drawer-overlay,.navigation-drawer{bottom:0;position:fixed;right:0;top:0}.navigation-drawer{animation:slideInRight .3s ease;background:var(--scaffold-surface,#fff);box-shadow:-5px 0 20px rgba(0,0,0,.2);display:flex;flex-direction:column;max-width:80vw;overflow:hidden;width:320px}.drawer-header{border-bottom:1px solid var(--scaffold-outline);justify-content:space-between;min-height:var(--appbar-height);padding:16px 24px;h3{color:var(--scaffold-on-surface);font-size:20px;font-weight:500;margin:0}}.drawer-close,.drawer-header{align-items:center;display:flex}.drawer-close{background:transparent;border:none;border-radius:50%;color:var(--scaffold-on-surface);cursor:pointer;font-size:24px;height:var(--touch-target-size);justify-content:center;width:var(--touch-target-size);&:hover{background:rgba(0,0,0,.04)}}.drawer-items{flex:1;overflow-y:auto;padding:8px}.drawer-section{margin-bottom:16px;h4{color:var(--scaffold-primary);font-size:14px;font-weight:600;letter-spacing:.5px;margin:0 0 8px;padding:8px 16px;text-transform:uppercase}}.menu-item-drawer{flex-direction:row;gap:16px;justify-content:flex-start;margin:2px 0;padding:12px 16px;width:100%}.menu-item-icon-drawer{height:24px;width:24px}.menu-item-label-drawer{flex:1;font-size:16px;font-weight:400;text-align:left}.app-scaffold-content{background:var(--scaffold-background);min-height:100vh;padding-bottom:var(--bottom-nav-height,80px);padding-top:var(--appbar-height,64px);transition:padding .3s ease}@media (max-width:599px){.appbar-content{padding:0 8px}.menu-button{height:40px;width:40px}.bottom-nav-items{padding:0 4px}.menu-item-bottom{min-width:56px}}@media (min-width:600px) and (max-width:1023px){.appbar-content{padding:0 12px}}@media (min-width:1024px){.appbar-content{padding:0 16px}}@media (prefers-contrast:high){.menu-item:hover:not(.disabled){background:rgba(0,0,0,.1);outline:2px solid var(--scaffold-on-surface)}.menu-item.active{outline:2px solid var(--scaffold-on-primary)}}@media (prefers-reduced-motion:reduce){.app-scaffold-content,.hamburger-icon span,.menu-item,.navigation-rail{transition:none}.drawer-overlay,.navigation-drawer{animation:none}}@media (prefers-color-scheme:dark){.app-scaffold{--scaffold-shadow:0 2px 8px rgba(0,0,0,.3)}.menu-item:hover:not(.disabled){background:hsla(0,0%,100%,.08)}.menu-item:active:not(.disabled){background:hsla(0,0%,100%,.12)}.menu-button:hover{background:hsla(0,0%,100%,.08)}.menu-button:active{background:hsla(0,0%,100%,.12)}}.responsive-menu{--menu-bg:var(--theme-surface);--menu-text:var(--theme-on-surface);--menu-hover:var(--theme-surface-variant);--menu-active:var(--theme-primary);--menu-active-text:var(--theme-on-primary);--menu-border:var(--theme-outline-variant);--menu-shadow:rgba(0,0,0,.1);font-family:var(--theme-font-family,"Segoe UI",sans-serif);font-size:var(--theme-font-size-body,14px);line-height:1.5}.menu-item{align-items:center;background:transparent;border:none;border-radius:var(--theme-border-radius,8px);color:var(--menu-text);cursor:pointer;display:flex;font-family:inherit;font-size:inherit;gap:.75rem;min-height:48px;padding:.75rem 1rem;position:relative;text-decoration:none;transition:all .2s ease}.menu-item:hover:not(.disabled){background:var(--menu-hover);transform:translateY(-1px)}.menu-item:active:not(.disabled){transform:translateY(0)}.menu-item.active{background:transparent;color:var(--menu-active);font-weight:600}.menu-item.disabled{cursor:not-allowed;opacity:.5}.menu-item-icon{align-items:center;display:flex;flex-shrink:0;height:24px;justify-content:center;width:24px}.menu-item-label{flex:1;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.menu-item-badge{background:var(--theme-error,#dc2626);border-radius:12px;color:var(--theme-on-error,#fff);font-size:.75rem;font-weight:600;min-width:20px;padding:.125rem .375rem;text-align:center}.hamburger-icon{cursor:pointer;display:flex;flex-direction:column;gap:3px;height:16px;width:20px;span{background:currentColor;border-radius:1px;display:block;height:2px;transition:all .3s ease;width:100%}}.mobile-bottom-nav{background:var(--menu-bg);border-top:1px solid var(--menu-border);bottom:0;box-shadow:0 -2px 10px var(--menu-shadow);left:0;position:fixed;right:0;z-index:1000;.mobile-nav-items{-ms-overflow-style:none;align-items:center;display:flex;justify-content:space-around;max-width:100%;overflow-x:auto;padding:.5rem 0;scrollbar-width:none}.mobile-nav-items::-webkit-scrollbar{display:none}.menu-item{flex:1;flex-direction:column;gap:.25rem;max-width:100px;min-width:0;padding:.5rem .75rem;text-align:center;.menu-item-icon{margin:0 auto}.menu-item-label{font-size:.75rem;text-align:center}}}.tablet-nav-rail{background:var(--menu-bg);border-right:1px solid var(--menu-border);box-shadow:2px 0 10px var(--menu-shadow);height:100vh;left:0;overflow:hidden;position:fixed;top:0;transition:width .3s ease;z-index:1000;&.collapsed{width:72px}&.expanded{width:280px}.nav-rail-header{align-items:center;border-bottom:1px solid var(--menu-border);display:flex;justify-content:space-between;min-height:72px;padding:1rem}.nav-rail-logo{flex:1;overflow:hidden;transition:opacity .3s ease}.nav-rail-toggle{background:transparent;border:none;border-radius:var(--theme-border-radius,8px);color:var(--menu-text);cursor:pointer;padding:.5rem}.nav-rail-toggle:hover{background:var(--menu-hover)}.nav-rail-items{display:flex;flex-direction:column;gap:.5rem;height:calc(100vh - 72px);overflow-y:auto;padding:1rem}&.collapsed{.nav-rail-logo{opacity:0}.menu-item{justify-content:center;.menu-item-label{display:none}}}}.desktop-top-nav{background:var(--menu-bg);border-bottom:1px solid var(--menu-border);box-shadow:0 2px 10px var(--menu-shadow);position:sticky;top:0;z-index:1000;.top-nav-content{align-items:center;display:flex;height:64px;margin:0 auto;max-width:1200px;padding:0 2rem}.top-nav-logo{&.logo-left{margin-right:2rem}&.logo-center{left:50%;position:absolute;transform:translateX(-50%)}&.logo-right{margin-left:2rem}}.top-nav-items{align-items:center;display:flex;flex:1;gap:.5rem;justify-content:center;.logo-left~&{justify-content:flex-start}.logo-right~&{justify-content:flex-end}}.menu-toggle{background:transparent;border:none;border-radius:var(--theme-border-radius,8px);color:var(--menu-text);cursor:pointer;padding:.75rem}.menu-toggle:hover{background:var(--menu-hover)}}.menu-drawer-overlay{animation:fadeIn .2s ease;background:rgba(0,0,0,.5);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2000}.menu-drawer{animation:slideInRight .3s ease;background:var(--menu-bg);box-shadow:-5px 0 20px var(--menu-shadow);display:flex;flex-direction:column;height:100vh;max-width:90vw;position:fixed;right:0;top:0;width:320px;.drawer-header{align-items:center;border-bottom:1px solid var(--menu-border);display:flex;justify-content:space-between;padding:1.5rem 2rem;h3{color:var(--menu-text);font-size:1.25rem;font-weight:600;margin:0}}.drawer-close{background:transparent;border:none;border-radius:var(--theme-border-radius,8px);color:var(--menu-text);cursor:pointer;font-size:1.5rem;padding:.25rem}.drawer-close:hover{background:var(--menu-hover)}.drawer-items{display:flex;flex:1;flex-direction:column;gap:.5rem;overflow-y:auto;padding:1rem 2rem}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInRight{0%{transform:translateX(100%)}to{transform:translateX(0)}}@media (max-width:767px){body{padding-bottom:80px}}@media (min-width:768px) and (max-width:1024px){body{margin-left:72px}}@media (prefers-color-scheme:dark){.responsive-menu{--menu-shadow:rgba(0,0,0,.3)}}html[data-theme=dark] .responsive-menu{--menu-hover:var(--theme-surface-elevated,#353535);--menu-shadow:rgba(0,0,0,.4)}html[data-theme=dark] .menu-item{color:var(--theme-on-surface,#fff)}html[data-theme=dark] .menu-item:hover:not(.disabled){background:var(--theme-surface-elevated,#353535);color:var(--theme-on-surface,#fff)}html[data-theme=dark] .menu-item.active{background:transparent;color:var(--theme-primary-light,#87ceeb)}html[data-theme=dark] .menu-item-icon{color:inherit;opacity:.9}html[data-theme=dark] .menu-item-label{color:inherit;font-weight:500}/**
2
+ * All Available Color Palettes
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+
7
+ @import './PaletteDefault.css';
8
+ @import './PaletteAutumn.css';
9
+ @import './PaletteOcean.css';
10
+ @import './PaletteSpring.css';
11
+ @import './PaletteWinter.css';
12
+ @import './PaletteCosmic.css';:root{--theme-primary:var(--palette-primary-main);--theme-primary-light:var(--palette-primary-light);--theme-primary-dark:var(--palette-primary-dark);--theme-on-primary:var(--palette-on-primary);--theme-secondary:var(--palette-secondary-main);--theme-secondary-light:var(--palette-secondary-light);--theme-secondary-dark:var(--palette-secondary-dark);--theme-on-secondary:var(--palette-on-secondary);--theme-accent:var(--palette-accent-main);--theme-accent-light:var(--palette-accent-light);--theme-accent-dark:var(--palette-accent-dark);--theme-on-accent:var(--palette-on-accent);--theme-success:var(--palette-success-main);--theme-success-light:var(--palette-success-light);--theme-success-dark:var(--palette-success-dark);--theme-on-success:var(--palette-on-success);--theme-success-border:var(--palette-success-border);--theme-warning:var(--palette-warning-main);--theme-warning-light:var(--palette-warning-light);--theme-warning-dark:var(--palette-warning-dark);--theme-on-warning:var(--palette-on-warning);--theme-warning-border:var(--palette-warning-border);--theme-error:var(--palette-error-main);--theme-error-light:var(--palette-error-light);--theme-error-dark:var(--palette-error-dark);--theme-on-error:var(--palette-on-error);--theme-error-border:var(--palette-error-border);--theme-info:var(--palette-info-main);--theme-info-light:var(--palette-info-light);--theme-info-dark:var(--palette-info-dark);--theme-on-info:var(--palette-on-info);--theme-info-border:var(--palette-info-border);--theme-background:var(--palette-background-main);--theme-background-dark:var(--palette-background-dark);--theme-background-overlay:var(--palette-background-overlay);--theme-on-background:var(--palette-on-background);--theme-surface:var(--palette-surface-main);--theme-surface-variant:var(--palette-surface-variant);--theme-surface-elevated:var(--palette-surface-elevated);--theme-on-surface:var(--palette-on-surface);--theme-border-main:var(--palette-border-main);--theme-border-light:var(--palette-border-light);--theme-border-lighter:var(--palette-border-lighter);--theme-border-medium:var(--palette-border-medium);--theme-border-dark:var(--palette-border-medium);--theme-text-primary:var(--palette-text-primary);--theme-text-secondary:var(--palette-text-secondary);--theme-text-disabled:var(--palette-text-disabled);--theme-text-inverted:var(--palette-text-inverted);--theme-control-bg:var(--palette-control-main);--theme-control-text:var(--palette-control-text);--theme-control-border:var(--palette-control-border);--theme-control-hover-bg:var(--palette-control-light);--theme-control-hover-text:var(--palette-text-inverted);--theme-control-hover-border:var(--palette-control-border);--theme-panel-bg-start:var(--palette-control-main);--theme-panel-bg-end:var(--palette-surface-elevated);--theme-panel-border:var(--palette-control-border);--theme-panel-shadow:rgba(0,0,0,.6);--theme-floating-bg:var(--palette-background-overlay);--theme-floating-border:var(--palette-border-light);--theme-option-bg:var(--palette-surface-variant);--theme-option-text:var(--palette-text-primary);--theme-option-border:var(--palette-border-main);--theme-option-hover-bg:var(--palette-surface-variant);--theme-option-selected-bg:var(--palette-primary-light);--theme-option-selected-border:var(--palette-primary-main);--theme-option-selected-text:var(--palette-on-primary);--theme-option-correct-bg:var(--palette-success-light);--theme-option-correct-border:var(--palette-success-border);--theme-option-correct-text:var(--palette-success-dark);--theme-option-incorrect-bg:var(--palette-error-light);--theme-option-incorrect-border:var(--palette-error-border);--theme-option-incorrect-text:var(--palette-error-dark);--theme-explanation-bg:var(--palette-info-light);--theme-explanation-border:var(--palette-info-main);--theme-link-color:var(--palette-info-main);--theme-link-hover:var(--palette-info-dark);--theme-code-bg:var(--palette-surface-variant);--theme-code-text:var(--palette-text-primary);--theme-mui-label-bg:var(--palette-surface-main);--theme-outline:var(--palette-border-main);--theme-outline-variant:var(--palette-border-light);--theme-border-radius:12px;--theme-border-radius-small:8px;--theme-border-radius-large:16px;--theme-elevation-1:0 2px 4px rgba(0,0,0,.1);--theme-elevation-2:0 4px 8px rgba(0,0,0,.15);--theme-elevation-3:0 6px 12px rgba(0,0,0,.2);--theme-elevation-4:0 8px 16px rgba(0,0,0,.25)}html[data-theme=light]{--theme-header-bg-start:var(--palette-header-bg-start);--theme-header-bg-end:var(--palette-header-bg-end);--theme-header-collapsed-bg-start:var(--palette-header-collapsed-bg-start);--theme-header-collapsed-bg-end:var(--palette-header-collapsed-bg-end);--theme-control-hover-text:var(--palette-text-inverted);--theme-control-hover-border:#555;--theme-panel-bg-end:#252525;--theme-panel-shadow:rgba(0,0,0,.6);--theme-floating-border:hsla(0,0%,100%,.5);--theme-option-text:#222;--theme-option-hover-bg:#e0e0e0;--theme-option-selected-bg:#d0e0ff;--theme-option-selected-text:var(--palette-primary-dark);--theme-code-bg:rgba(0,0,0,.1)}html[data-theme=dark]{--theme-header-bg-start:var(--palette-header-bg-start);--theme-header-bg-end:var(--palette-header-bg-end);--theme-header-collapsed-bg-start:var(--palette-header-collapsed-bg-start);--theme-header-collapsed-bg-end:var(--palette-header-collapsed-bg-end);--theme-control-hover-text:var(--palette-text-primary);--theme-control-hover-border:#777;--theme-panel-bg-end:var(--palette-surface-elevated);--theme-panel-shadow:rgba(0,0,0,.8);--theme-floating-border:hsla(0,0%,100%,.2);--theme-option-text:var(--palette-text-secondary);--theme-option-hover-bg:var(--palette-surface-elevated);--theme-option-selected-bg:var(--palette-primary-dark);--theme-option-selected-text:var(--palette-primary-light);--theme-code-bg:hsla(0,0%,100%,.1);--theme-code-text:var(--palette-text-secondary);--theme-mui-label-bg:#292929;--theme-elevation-1:0 2px 4px rgba(0,0,0,.2);--theme-elevation-2:0 4px 8px rgba(0,0,0,.3);--theme-elevation-3:0 6px 12px rgba(0,0,0,.4);--theme-elevation-4:0 8px 16px rgba(0,0,0,.5)}*{transition:background-color .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1)}.MuiButton-root:focus,.MuiFab-root:hover,.MuiIconButton-root:focus,.MuiMenuItem-root:hover,:active,:focus,:hover,button:focus,input:focus,select:focus,textarea:focus{transition:none}