@qwickapps/react-framework 1.3.2 → 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.
- package/README.md +106 -0
- package/dist/components/AccessibilityProvider.d.ts +64 -0
- package/dist/components/AccessibilityProvider.d.ts.map +1 -0
- package/dist/components/Breadcrumbs.d.ts +39 -0
- package/dist/components/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +39 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/QwickApp.d.ts.map +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/index.bundled.css +12 -0
- package/dist/index.esm.js +795 -12
- package/dist/index.js +800 -10
- package/package.json +1 -1
- package/src/components/AccessibilityProvider.tsx +466 -0
- package/src/components/Breadcrumbs.tsx +223 -0
- package/src/components/ErrorBoundary.tsx +216 -0
- package/src/components/QwickApp.tsx +17 -11
- package/src/components/__tests__/AccessibilityProvider.test.tsx +330 -0
- package/src/components/__tests__/Breadcrumbs.test.tsx +268 -0
- package/src/components/__tests__/ErrorBoundary.test.tsx +163 -0
- package/src/components/index.ts +3 -0
- package/src/stories/AccessibilityProvider.stories.tsx +284 -0
- package/src/stories/Breadcrumbs.stories.tsx +304 -0
- package/src/stories/ErrorBoundary.stories.tsx +159 -0
- package/dist/schemas/Builders.d.ts +0 -7
- package/dist/schemas/Builders.d.ts.map +0 -1
- package/dist/schemas/types.d.ts +0 -7
- package/dist/schemas/types.d.ts.map +0 -1
- package/dist/types/DataBinding.d.ts +0 -7
- package/dist/types/DataBinding.d.ts.map +0 -1
- package/dist/types/DataProvider.d.ts +0 -7
- package/dist/types/DataProvider.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -4,6 +4,13 @@ A complete React framework for building modern, responsive applications with int
|
|
|
4
4
|
|
|
5
5
|
## What's New
|
|
6
6
|
|
|
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
|
+
|
|
7
14
|
### September 1, 2025 - Optional Dependencies & Performance
|
|
8
15
|
- **Optional Logging**: Made `@qwickapps/logging` an optional dependency with console fallback
|
|
9
16
|
- **Reduced Bundle Size**: Core framework no longer includes logging overhead by default
|
|
@@ -46,6 +53,12 @@ A complete React framework for building modern, responsive applications with int
|
|
|
46
53
|
- **Markdown Component**: Convert Markdown to React components with syntax highlighting
|
|
47
54
|
- **Transform System**: Extensible HTML element transformation with fallback handling
|
|
48
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
|
+
|
|
49
62
|
### 🚀 **Developer Experience**
|
|
50
63
|
- **TypeScript First**: Full TypeScript support with comprehensive types
|
|
51
64
|
- **Storybook**: Interactive component documentation
|
|
@@ -797,6 +810,99 @@ For complete documentation, see [@qwickapps/logging](../qwickapps-logging/README
|
|
|
797
810
|
3. **Leverage the built-in performance monitoring** for theme changes
|
|
798
811
|
4. **Consider lazy loading** for large component trees
|
|
799
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
|
+
|
|
800
906
|
## License
|
|
801
907
|
|
|
802
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;
|
|
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;
|
|
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}
|