pelatform-ui 1.1.0

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 ADDED
@@ -0,0 +1,259 @@
1
+ # pelatform-ui
2
+
3
+ A Modern and Minimal React UI Library built with TailwindCSS. The main package that provides access to all Pelatform UI components, hooks, and utilities through a unified interface. This package includes all the components, hooks, and utilities from the other Pelatform UI packages.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ bun add pelatform-ui
9
+ ```
10
+
11
+ ### Peer Dependencies
12
+
13
+ Make sure you have these installed:
14
+
15
+ ```bash
16
+ bun add react react-dom @tanstack/react-query lucide-react motion next-themes sonner
17
+ ```
18
+
19
+ ### Import Styles
20
+
21
+ ```typescript
22
+ import "pelatform-ui/css";
23
+ ```
24
+
25
+ ## Package Structure
26
+
27
+ pelatform-ui is the main entry point that consolidates all Pelatform UI packages:
28
+
29
+ - **@@pelatform/ui.general** - Core utilities and types
30
+ - **@@pelatform/ui.hook** - React hooks (15 hooks)
31
+ - **@@pelatform/ui.animation** - Animation components (14 components)
32
+ - **@@pelatform/ui.aria** - Accessible ARIA components (2 components)
33
+ - **@@pelatform/ui.base** - Base headless components (40+ components)
34
+ - **@@pelatform/ui.default** - Styled default components (71 components)
35
+
36
+ Plus additional ready-to-use components for layouts, navigation, and UI elements.
37
+
38
+ ## Import Paths
39
+
40
+ ```typescript
41
+ // Main exports (utilities, types, icons)
42
+ import { cn, cva, googleTrackEvent } from "pelatform-ui";
43
+
44
+ // Hooks
45
+ import { useHydrated, useMobile, useMediaQuery } from "pelatform-ui/hooks";
46
+
47
+ // Animation components
48
+ import {
49
+ ShimmeringText,
50
+ CountingNumber,
51
+ Marquee,
52
+ } from "pelatform-ui/animation";
53
+
54
+ // ARIA components
55
+ import { DateField, ShowMore } from "pelatform-ui/aria";
56
+
57
+ // Base components
58
+ import { Button, Input, Select } from "pelatform-ui/base";
59
+
60
+ // Default styled components
61
+ import { Card, DataGrid, Kanban } from "pelatform-ui/default";
62
+
63
+ // All components (base + default + custom)
64
+ import { SiteHeader, SiteFooter, CommandMenu } from "pelatform-ui/components";
65
+
66
+ // Styles
67
+ import "pelatform-ui/css";
68
+ ```
69
+
70
+ ## Quick Start
71
+
72
+ ```typescript
73
+ import { Button, Card, Input } from "pelatform-ui/default";
74
+ import { useHydrated } from "pelatform-ui/hooks";
75
+ import "pelatform-ui/css";
76
+
77
+ function App() {
78
+ const hydrated = useHydrated();
79
+
80
+ if (!hydrated) return null;
81
+
82
+ return (
83
+ <Card>
84
+ <Input placeholder="Enter text" />
85
+ <Button>Submit</Button>
86
+ </Card>
87
+ );
88
+ }
89
+ ```
90
+
91
+ ## Components
92
+
93
+ ### Layout Components
94
+
95
+ - **Auth** - Authentication page layout
96
+ - **Blank** - Minimal blank layout
97
+ - **Body** - Main content body
98
+ - **ComingSoon** - Coming soon page
99
+ - **Error** - Error page layout
100
+ - **Grid** - Grid-based layout
101
+ - **Section** - Content section
102
+ - **SiteHeader** - Sticky header with blur
103
+ - **SiteFooter** - Site footer
104
+ - **Wrapper** - Container wrapper
105
+
106
+ ### Navigation Components
107
+
108
+ - **BackLink** - Back navigation link
109
+ - **CommandMenu** - Command palette
110
+ - **MainNav** - Main navigation menu
111
+ - **MobileNav** - Mobile navigation
112
+
113
+ ### Feedback Components
114
+
115
+ - **Alert** - Alert notifications
116
+ - **AlertToast** - Toast notifications
117
+ - **AlertNotification** - Notification alerts
118
+ - **AlertComingsoon** - Coming soon alert
119
+ - **Dialog** - Modal dialog
120
+ - **ScreenLoader** - Loading screen
121
+
122
+ ### UI Components
123
+
124
+ - **Announcement** - Announcement banner with tags
125
+ - **BackgroundPaths** - Decorative backgrounds
126
+ - **Book** - Book/document display
127
+ - **DotsPattern** - Dot pattern background
128
+ - **GridBackground** - Grid pattern background
129
+ - **HexagonBadge** - Hexagon-shaped badge
130
+ - **Icons** - Icon components
131
+ - **ImageInput** - Image upload input
132
+ - **LanguageSwitcher** - Language selector
133
+ - **Logo** - Brand logo
134
+ - **ModeSwitcher** - Theme mode toggle
135
+ - **MovingBorder** - Animated border effect
136
+ - **Subscribe** - Email subscription
137
+ - **Toolbar** - Toolbar component
138
+ - **UserAvatar** - User avatar display
139
+
140
+ ### Provider Components
141
+
142
+ - **QueryProvider** - TanStack Query provider
143
+ - **ThemeProvider** - Theme management (next-themes + tooltip)
144
+
145
+ ### MDX Components
146
+
147
+ - **CodeDisplay** - Code snippet display
148
+ - **Download** - Download link
149
+ - **Link** - Custom link
150
+ - **Video** - Video embed
151
+ - **Wrapper** - MDX content wrapper
152
+ - **YouTube** - YouTube embed
153
+
154
+ ### Utility Components
155
+
156
+ - **Fonts** - Font configuration
157
+ - **RecaptchaPopover** - reCAPTCHA integration
158
+ - **Shared** - Shared utilities
159
+
160
+ ## Theme Management
161
+
162
+ ```typescript
163
+ import { ThemeProvider } from "pelatform-ui/components";
164
+
165
+ function App({ children }) {
166
+ return (
167
+ <ThemeProvider
168
+ attribute="class"
169
+ defaultTheme="system"
170
+ enableSystem
171
+ disableTransitionOnChange
172
+ >
173
+ {children}
174
+ </ThemeProvider>
175
+ );
176
+ }
177
+ ```
178
+
179
+ ## Hooks
180
+
181
+ 15 production-ready hooks for common use cases:
182
+
183
+ - **useAnalytics** - CRUD operation tracking
184
+ - **useBodyClass** - Body class management
185
+ - **useCopyToClipboard** - Clipboard operations
186
+ - **useFileUpload** - File upload with drag & drop
187
+ - **useHydrated** - SSR-safe hydration detection
188
+ - **useMediaQuery** - Media query tracking
189
+ - **useMenu** - Menu navigation state
190
+ - **useMobile** - Mobile detection
191
+ - **useMounted** - Mount state detection
192
+ - **useMutationObserver** - DOM mutation observation
193
+ - **useRecaptchaV2** - reCAPTCHA integration
194
+ - **useRemoveGAParams** - GA parameter cleanup
195
+ - **useScrollPosition** - Scroll tracking
196
+ - **useSliderInput** - Slider input management
197
+ - **useViewport** - Viewport dimensions
198
+
199
+ ## Styling
200
+
201
+ The package uses Tailwind CSS with custom theme configuration. Import the CSS in your app:
202
+
203
+ ```typescript
204
+ import "pelatform-ui/css";
205
+ ```
206
+
207
+ CSS includes:
208
+
209
+ - Theme variables
210
+ - Component styles
211
+ - Animation utilities
212
+ - Pattern backgrounds
213
+ - Custom transitions
214
+
215
+ ## TypeScript Support
216
+
217
+ Full TypeScript support with comprehensive type definitions for all components and hooks.
218
+
219
+ ## Features
220
+
221
+ - 100+ total components across all packages
222
+ - 15 React hooks for common use cases
223
+ - Full dark mode support
224
+ - Responsive design
225
+ - Accessibility (WCAG 2.1)
226
+ - SSR-safe implementations
227
+ - Tree-shakeable exports
228
+ - TanStack Query integration
229
+ - Next.js optimized
230
+ - Tailwind CSS styling
231
+
232
+ ## Dependencies
233
+
234
+ ### Production Dependencies
235
+
236
+ - `@radix-ui/react-dialog`
237
+ - `radix-ui`
238
+ - `tw-animate-css`
239
+
240
+ ### Peer Dependencies
241
+
242
+ - `react`
243
+ - `react-dom`
244
+ - `@tanstack/react-query`
245
+ - `lucide-react`
246
+ - `motion`
247
+ - `next-themes`
248
+ - `sonner`
249
+
250
+ ## Links
251
+
252
+ - [npm Package](https://www.npmjs.com/package/pelatform-ui)
253
+ - [Contributing Guide](../../../CONTRIBUTING.md)
254
+ - [Code of Conduct](../../../CODE_OF_CONDUCT.md)
255
+ - [License](../../../LICENSE)
256
+
257
+ ## License
258
+
259
+ MIT © [Pelatform Inc.](../../../LICENSE)
@@ -0,0 +1,101 @@
1
+ @layer components {
2
+ .apexcharts-text,
3
+ .apexcharts-title-text,
4
+ .apexcharts-legend-text {
5
+ font-family: inherit !important;
6
+ }
7
+
8
+ .apexcharts-title-text {
9
+ font-weight: var(--font-weight-normal);
10
+ }
11
+
12
+ .apexcharts-pie-label {
13
+ @apply text-xs;
14
+ }
15
+
16
+ .apexcharts-toolbar {
17
+ text-align: start !important;
18
+ }
19
+
20
+ .apexcharts-menu {
21
+ border: 1px solid var(--color-border) !important;
22
+ box-shadow: var(--box-shadow-sm) !important;
23
+ background-color: var(--color-background) !important;
24
+ border-radius: 0.625rem !important;
25
+ padding: 0.5rem 0 !important;
26
+ overflow: hidden;
27
+ min-width: 10rem !important;
28
+ }
29
+
30
+ .apexcharts-menu .apexcharts-menu-item {
31
+ padding: 0.5rem 0.5rem !important;
32
+ }
33
+
34
+ .apexcharts-menu .apexcharts-menu-item:hover {
35
+ background-color: var(--gray-100) !important;
36
+ }
37
+
38
+ .apexcharts-tooltip {
39
+ border: 1px solid var(--color-border) !important;
40
+ box-shadow: var(--box-shadow-sm) !important;
41
+ background-color: var(--color-background) !important;
42
+ border-radius: 0.625rem !important;
43
+ color: var(--color-secondary-foreground) !important;
44
+ }
45
+
46
+ .apexcharts-tooltip .apexcharts-tooltip-title {
47
+ @apply text-foreground text-sm font-medium;
48
+ padding: 0.25rem 0.5rem !important;
49
+ background-color: transparent !important;
50
+ border-bottom: 1px solid var(--color-border) !important;
51
+ }
52
+
53
+ .apexcharts-xaxistooltip {
54
+ border: 1px solid var(--color-border) !important;
55
+ box-shadow: var(--box-shadow-sm) !important;
56
+ background-color: var(--color-background) !important;
57
+ border-radius: 0.625rem;
58
+ color: var(--color-foreground);
59
+ }
60
+
61
+ .apexcharts-xaxistooltip:before {
62
+ border-bottom: 0 !important;
63
+ }
64
+
65
+ .apexcharts-legend {
66
+ display: flex;
67
+ flex-direction: column;
68
+ @apply gap-2;
69
+ }
70
+
71
+ .apexcharts-legend .apexcharts-legend-series {
72
+ @apply gap-1;
73
+ display: flex;
74
+ align-items: center;
75
+ }
76
+
77
+ .apexcharts-legend .apexcharts-legend-series .apexcharts-legend-text {
78
+ @apply text-muted-foreground text-sm font-medium;
79
+ }
80
+
81
+ .apexcharts-card-rounded .apexcharts-canvas svg {
82
+ border-bottom-left-radius: var(--radius-xl);
83
+ border-bottom-right-radius: var(--radius-xl);
84
+ }
85
+
86
+ .apexcharts-rounded-sm .apexcharts-canvas svg {
87
+ border-radius: var(--radius-sm);
88
+ }
89
+
90
+ .apexcharts-rounded .apexcharts-canvas svg {
91
+ border-radius: var(--radius-md);
92
+ }
93
+
94
+ .apexcharts-rounded-lg .apexcharts-canvas svg {
95
+ border-radius: var(--radius-lg);
96
+ }
97
+
98
+ .apexcharts-rounded-xl .apexcharts-canvas svg {
99
+ border-radius: var(--radius-xl);
100
+ }
101
+ }
@@ -0,0 +1,19 @@
1
+ @layer components {
2
+ .bg-book-bind-bg {
3
+ background: linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0) 100%);
4
+ }
5
+
6
+ .bg-book-pages {
7
+ background: linear-gradient(90deg, #f1f1f1 0%, #ffffff 100%);
8
+ }
9
+
10
+ .shadow-book {
11
+ box-shadow:
12
+ 0 4px 6px -1px rgba(0, 0, 0, 0.1),
13
+ 0 2px 4px -1px rgba(0, 0, 0, 0.06);
14
+ }
15
+
16
+ .book-bg {
17
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
18
+ }
19
+ }
@@ -0,0 +1,12 @@
1
+ @layer components {
2
+ .animate-move {
3
+ animation: move 0.6s ease-out forwards;
4
+ will-change: transform;
5
+ }
6
+
7
+ .grid-container {
8
+ @apply container max-w-7xl;
9
+ margin-inline: auto;
10
+ padding-inline: 0rem;
11
+ }
12
+ }
@@ -0,0 +1,51 @@
1
+ @layer components {
2
+ .pf-image-input {
3
+ @apply relative inline-flex size-20 cursor-pointer items-center justify-center;
4
+
5
+ input[type="file"] {
6
+ @apply absolute size-0 appearance-none opacity-0;
7
+ }
8
+ }
9
+
10
+ .pf-image-input-remove {
11
+ @apply bg-background border-border end-px top-px absolute z-1 flex size-5 cursor-pointer items-center justify-center rounded-full border shadow-sm;
12
+
13
+ i {
14
+ @apply text-muted-foreground text-[11px];
15
+ }
16
+
17
+ svg {
18
+ @apply text-muted-foreground size-3.25;
19
+ }
20
+
21
+ &:hover {
22
+ i {
23
+ @apply text-foreground;
24
+ }
25
+
26
+ svg {
27
+ @apply text-foreground;
28
+ }
29
+ }
30
+ }
31
+
32
+ .pf-image-input-placeholder {
33
+ @apply border-border pf-image-input-empty:border-border relative size-full overflow-hidden rounded-full border bg-cover bg-no-repeat;
34
+ }
35
+
36
+ .pf-image-input-preview {
37
+ @apply relative size-full overflow-hidden rounded-full bg-cover bg-no-repeat;
38
+ }
39
+ }
40
+
41
+ @custom-variant pf-image-input-empty {
42
+ [data-pf-image-input-initialized].empty & {
43
+ @slot;
44
+ }
45
+ }
46
+
47
+ @custom-variant image-input-changed {
48
+ [data-pf-image-input-initialized].changed & {
49
+ @slot;
50
+ }
51
+ }
@@ -0,0 +1,25 @@
1
+ @layer components {
2
+ /* Base Leaflet container styles */
3
+ .leaflet-container {
4
+ /* Leaflet pane and control styles */
5
+ & .leaflet-pane,
6
+ & .leaflet-top,
7
+ & .leaflet-bottom,
8
+ & .leaflet-control {
9
+ z-index: 1 !important;
10
+ }
11
+
12
+ /* Leaflet popup content wrapper styles */
13
+ & .leaflet-popup-content-wrapper {
14
+ border-radius: var(--radius-md);
15
+ text-align: center;
16
+ background-color: var(--color-popover);
17
+
18
+ /* Leaflet popup content styles */
19
+ & .leaflet-popup-content {
20
+ font-family: inherit;
21
+ @apply text-xs;
22
+ }
23
+ }
24
+ }
25
+ }
@@ -0,0 +1,34 @@
1
+ @layer utilities {
2
+ .bg-dashed {
3
+ background-image: linear-gradient(
4
+ 45deg,
5
+ var(--color-border) 12.5%,
6
+ transparent 12.5%,
7
+ transparent 50%,
8
+ var(--color-border) 50%,
9
+ var(--color-border) 62.5%,
10
+ transparent 62.5%,
11
+ transparent 100%
12
+ );
13
+ background-size: 0.25rem 0.25rem;
14
+ }
15
+
16
+ .grid-magicpattern {
17
+ width: 100%;
18
+ height: 100%;
19
+ background-size: cover;
20
+ background-position: center center;
21
+ background-repeat: repeat;
22
+ background-image: url("data:image/svg+xml;utf8,%3Csvg viewBox=%220 0 2000 1400%22 xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cmask id=%22b%22 x=%220%22 y=%220%22 width=%222000%22 height=%221400%22%3E%3Cpath fill=%22url(%23a)%22 d=%22M0 0h2000v1400H0z%22%2F%3E%3C%2Fmask%3E%3Cpath fill=%22%23fff%22 d=%22M0 0h2000v1400H0z%22%2F%3E%3Cg style=%22transform-origin:center center%22 stroke=%22%23d8d8d88f%22 stroke-width=%222%22 mask=%22url(%23b)%22%3E%3Cpath fill=%22none%22 d=%22M0 0h100v100H0zM100 0h100v100H100zM200 0h100v100H200zM300 0h100v100H300z%22%2F%3E%3Cpath fill=%22%23d8d8d878%22 d=%22M400 0h100v100H400z%22%2F%3E%3Cpath fill=%22%23d8d8d808%22 d=%22M500 0h100v100H500z%22%2F%3E%3Cpath fill=%22none%22 d=%22M600 0h100v100H600zM700 0h100v100H700zM800 0h100v100H800zM900 0h100v100H900z%22%2F%3E%3Cpath fill=%22%23d8d8d826%22 d=%22M1000 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d852%22 d=%22M1100 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d805%22 d=%22M1200 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d888%22 d=%22M1300 0h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 0h100v100h-100zM1500 0h100v100h-100zM1600 0h100v100h-100zM1700 0h100v100h-100zM1800 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d816%22 d=%22M1900 0h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M0 100h100v100H0zM100 100h100v100H100z%22%2F%3E%3Cpath fill=%22%23d8d8d842%22 d=%22M200 100h100v100H200z%22%2F%3E%3Cpath fill=%22%23d8d8d87d%22 d=%22M300 100h100v100H300z%22%2F%3E%3Cpath fill=%22%23d8d8d836%22 d=%22M400 100h100v100H400z%22%2F%3E%3Cpath fill=%22%23d8d8d82e%22 d=%22M500 100h100v100H500z%22%2F%3E%3Cpath fill=%22%23d8d8d85b%22 d=%22M600 100h100v100H600z%22%2F%3E%3Cpath fill=%22%23d8d8d888%22 d=%22M700 100h100v100H700z%22%2F%3E%3Cpath fill=%22none%22 d=%22M800 100h100v100H800zM900 100h100v100H900z%22%2F%3E%3Cpath fill=%22%23d8d8d83a%22 d=%22M1000 100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1100 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d88e%22 d=%22M1200 100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d80c%22 d=%22M1400 100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1500 100h100v100h-100zM1600 100h100v100h-100zM1700 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d827%22 d=%22M1800 100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 100h100v100h-100zM0 200h100v100H0zM100 200h100v100H100zM200 200h100v100H200zM300 200h100v100H300zM400 200h100v100H400zM500 200h100v100H500zM600 200h100v100H600zM700 200h100v100H700zM800 200h100v100H800zM900 200h100v100H900zM1000 200h100v100h-100zM1100 200h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d838%22 d=%22M1200 200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 200h100v100h-100zM1400 200h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d818%22 d=%22M1500 200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 200h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d865%22 d=%22M1700 200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1800 200h100v100h-100zM1900 200h100v100h-100zM0 300h100v100H0zM100 300h100v100H100zM200 300h100v100H200zM300 300h100v100H300zM400 300h100v100H400z%22%2F%3E%3Cpath fill=%22%23d8d8d85a%22 d=%22M500 300h100v100H500z%22%2F%3E%3Cpath fill=%22none%22 d=%22M600 300h100v100H600zM700 300h100v100H700z%22%2F%3E%3Cpath fill=%22%23d8d8d866%22 d=%22M800 300h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 300h100v100H900zM1000 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d871%22 d=%22M1100 300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1200 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d872%22 d=%22M1300 300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 300h100v100h-100zM1500 300h100v100h-100zM1600 300h100v100h-100zM1700 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d80d%22 d=%22M1800 300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 300h100v100h-100zM0 400h100v100H0zM100 400h100v100H100z%22%2F%3E%3Cpath fill=%22%23d8d8d838%22 d=%22M200 400h100v100H200z%22%2F%3E%3Cpath fill=%22none%22 d=%22M300 400h100v100H300z%22%2F%3E%3Cpath fill=%22%23d8d8d86f%22 d=%22M400 400h100v100H400z%22%2F%3E%3Cpath fill=%22%23d8d8d855%22 d=%22M500 400h100v100H500z%22%2F%3E%3Cpath fill=%22none%22 d=%22M600 400h100v100H600zM700 400h100v100H700zM800 400h100v100H800zM900 400h100v100H900zM1000 400h100v100h-100zM1100 400h100v100h-100zM1200 400h100v100h-100zM1300 400h100v100h-100zM1400 400h100v100h-100zM1500 400h100v100h-100zM1600 400h100v100h-100zM1700 400h100v100h-100zM1800 400h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d826%22 d=%22M1900 400h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M0 500h100v100H0z%22%2F%3E%3Cpath fill=%22%23d8d8d849%22 d=%22M100 500h100v100H100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M200 500h100v100H200zM300 500h100v100H300z%22%2F%3E%3Cpath fill=%22%23d8d8d838%22 d=%22M400 500h100v100H400z%22%2F%3E%3Cpath fill=%22none%22 d=%22M500 500h100v100H500zM600 500h100v100H600zM700 500h100v100H700z%22%2F%3E%3Cpath fill=%22%23d8d8d811%22 d=%22M800 500h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 500h100v100H900z%22%2F%3E%3Cpath fill=%22%23d8d8d82d%22 d=%22M1000 500h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1100 500h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d80b%22 d=%22M1200 500h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 500h100v100h-100zM1400 500h100v100h-100zM1500 500h100v100h-100zM1600 500h100v100h-100zM1700 500h100v100h-100zM1800 500h100v100h-100zM1900 500h100v100h-100zM0 600h100v100H0z%22%2F%3E%3Cpath fill=%22%23d8d8d85f%22 d=%22M100 600h100v100H100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M200 600h100v100H200zM300 600h100v100H300zM400 600h100v100H400zM500 600h100v100H500zM600 600h100v100H600zM700 600h100v100H700zM800 600h100v100H800z%22%2F%3E%3Cpath fill=%22%23d8d8d854%22 d=%22M900 600h100v100H900z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1000 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d833%22 d=%22M1100 600h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1200 600h100v100h-100zM1300 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d838%22 d=%22M1400 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d84e%22 d=%22M1500 600h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 600h100v100h-100zM1700 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d801%22 d=%22M1800 600h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 600h100v100h-100zM0 700h100v100H0zM100 700h100v100H100zM200 700h100v100H200z%22%2F%3E%3Cpath fill=%22%23d8d8d821%22 d=%22M300 700h100v100H300z%22%2F%3E%3Cpath fill=%22none%22 d=%22M400 700h100v100H400zM500 700h100v100H500zM600 700h100v100H600zM700 700h100v100H700z%22%2F%3E%3Cpath fill=%22%23d8d8d826%22 d=%22M800 700h100v100H800z%22%2F%3E%3Cpath fill=%22%23d8d8d86d%22 d=%22M900 700h100v100H900z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1000 700h100v100h-100zM1100 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d876%22 d=%22M1200 700h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 700h100v100h-100zM1400 700h100v100h-100zM1500 700h100v100h-100zM1600 700h100v100h-100zM1700 700h100v100h-100zM1800 700h100v100h-100zM1900 700h100v100h-100zM0 800h100v100H0zM100 800h100v100H100zM200 800h100v100H200z%22%2F%3E%3Cpath fill=%22%23d8d8d859%22 d=%22M300 800h100v100H300z%22%2F%3E%3Cpath fill=%22none%22 d=%22M400 800h100v100H400z%22%2F%3E%3Cpath fill=%22%23d8d8d889%22 d=%22M500 800h100v100H500z%22%2F%3E%3Cpath fill=%22%23d8d8d858%22 d=%22M600 800h100v100H600z%22%2F%3E%3Cpath fill=%22none%22 d=%22M700 800h100v100H700zM800 800h100v100H800zM900 800h100v100H900zM1000 800h100v100h-100zM1100 800h100v100h-100zM1200 800h100v100h-100zM1300 800h100v100h-100zM1400 800h100v100h-100zM1500 800h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d831%22 d=%22M1600 800h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1700 800h100v100h-100zM1800 800h100v100h-100zM1900 800h100v100h-100zM0 900h100v100H0z%22%2F%3E%3Cpath fill=%22%23d8d8d816%22 d=%22M100 900h100v100H100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M200 900h100v100H200zM300 900h100v100H300zM400 900h100v100H400zM500 900h100v100H500z%22%2F%3E%3Cpath fill=%22%23d8d8d869%22 d=%22M600 900h100v100H600z%22%2F%3E%3Cpath fill=%22%23d8d8d809%22 d=%22M700 900h100v100H700z%22%2F%3E%3Cpath fill=%22none%22 d=%22M800 900h100v100H800zM900 900h100v100H900zM1000 900h100v100h-100zM1100 900h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d820%22 d=%22M1200 900h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 900h100v100h-100zM1400 900h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d82c%22 d=%22M1500 900h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 900h100v100h-100zM1700 900h100v100h-100zM1800 900h100v100h-100zM1900 900h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d82f%22 d=%22M0 1000h100v100H0z%22%2F%3E%3Cpath fill=%22%23d8d8d881%22 d=%22M100 1000h100v100H100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M200 1000h100v100H200z%22%2F%3E%3Cpath fill=%22%23d8d8d85c%22 d=%22M300 1000h100v100H300z%22%2F%3E%3Cpath fill=%22none%22 d=%22M400 1000h100v100H400zM500 1000h100v100H500zM600 1000h100v100H600zM700 1000h100v100H700zM800 1000h100v100H800zM900 1000h100v100H900zM1000 1000h100v100h-100zM1100 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d85c%22 d=%22M1200 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d832%22 d=%22M1300 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 1000h100v100h-100zM1500 1000h100v100h-100zM1600 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d81d%22 d=%22M1700 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1800 1000h100v100h-100zM1900 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d853%22 d=%22M0 1100h100v100H0z%22%2F%3E%3Cpath fill=%22none%22 d=%22M100 1100h100v100H100z%22%2F%3E%3Cpath fill=%22%23d8d8d849%22 d=%22M200 1100h100v100H200z%22%2F%3E%3Cpath fill=%22none%22 d=%22M300 1100h100v100H300zM400 1100h100v100H400zM500 1100h100v100H500zM600 1100h100v100H600z%22%2F%3E%3Cpath fill=%22%23d8d8d81d%22 d=%22M700 1100h100v100H700z%22%2F%3E%3Cpath fill=%22none%22 d=%22M800 1100h100v100H800zM900 1100h100v100H900zM1000 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d863%22 d=%22M1100 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d83f%22 d=%22M1200 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 1100h100v100h-100zM1400 1100h100v100h-100zM1500 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d824%22 d=%22M1600 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1700 1100h100v100h-100zM1800 1100h100v100h-100zM1900 1100h100v100h-100zM0 1200h100v100H0z%22%2F%3E%3Cpath fill=%22%23d8d8d850%22 d=%22M100 1200h100v100H100z%22%2F%3E%3Cpath fill=%22%23d8d8d87f%22 d=%22M200 1200h100v100H200z%22%2F%3E%3Cpath fill=%22none%22 d=%22M300 1200h100v100H300zM400 1200h100v100H400zM500 1200h100v100H500zM600 1200h100v100H600zM700 1200h100v100H700zM800 1200h100v100H800zM900 1200h100v100H900zM1000 1200h100v100h-100zM1100 1200h100v100h-100zM1200 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d838%22 d=%22M1300 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d888%22 d=%22M1400 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1500 1200h100v100h-100zM1600 1200h100v100h-100zM1700 1200h100v100h-100zM1800 1200h100v100h-100zM1900 1200h100v100h-100zM0 1300h100v100H0zM100 1300h100v100H100zM200 1300h100v100H200zM300 1300h100v100H300z%22%2F%3E%3Cpath fill=%22%23d8d8d838%22 d=%22M400 1300h100v100H400z%22%2F%3E%3Cpath fill=%22none%22 d=%22M500 1300h100v100H500zM600 1300h100v100H600zM700 1300h100v100H700zM800 1300h100v100H800z%22%2F%3E%3Cpath fill=%22%23d8d8d841%22 d=%22M900 1300h100v100H900z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1000 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d862%22 d=%22M1100 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1200 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d842%22 d=%22M1300 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d854%22 d=%22M1400 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1500 1300h100v100h-100zM1600 1300h100v100h-100zM1700 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22%23d8d8d840%22 d=%22M1800 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 1300h100v100h-100z%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CradialGradient id=%22a%22%3E%3Cstop offset=%220%22 stop-color=%22%23fff%22 stop-opacity=%22.838%22%2F%3E%3Cstop offset=%2286.5%25%22 stop-color=%22%23fff%22 stop-opacity=%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E");
23
+ }
24
+ .dark {
25
+ .grid-magicpattern {
26
+ width: 100%;
27
+ height: 100%;
28
+ background-size: cover;
29
+ background-position: center center;
30
+ background-repeat: repeat;
31
+ background-image: url("data:image/svg+xml;utf8,%3Csvg viewBox=%220 0 2000 1400%22 xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cmask id=%22b%22 x=%220%22 y=%220%22 width=%222000%22 height=%221400%22%3E%3Cpath fill=%22url(%23a)%22 d=%22M0 0h2000v1400H0z%22%2F%3E%3C%2Fmask%3E%3Cpath d=%22M0 0h2000v1400H0z%22%2F%3E%3Cg style=%22transform-origin:center center%22 stroke=%22%236565658f%22 stroke-width=%222%22 mask=%22url(%23b)%22%3E%3Cpath fill=%22none%22 d=%22M0 0h100v100H0zM100 0h100v100H100zM200 0h100v100H200z%22%2F%3E%3Cpath fill=%22%2365656582%22 d=%22M300 0h100v100H300z%22%2F%3E%3Cpath fill=%22none%22 d=%22M400 0h100v100H400zM500 0h100v100H500zM600 0h100v100H600zM700 0h100v100H700zM800 0h100v100H800zM900 0h100v100H900z%22%2F%3E%3Cpath fill=%22%2365656534%22 d=%22M1000 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656539%22 d=%22M1100 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656580%22 d=%22M1200 0h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 0h100v100h-100zM1400 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656567%22 d=%22M1500 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656574%22 d=%22M1600 0h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1700 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656584%22 d=%22M1800 0h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 0h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565657b%22 d=%22M0 100h100v100H0z%22%2F%3E%3Cpath fill=%22none%22 d=%22M100 100h100v100H100zM200 100h100v100H200zM300 100h100v100H300z%22%2F%3E%3Cpath fill=%22%2365656555%22 d=%22M400 100h100v100H400z%22%2F%3E%3Cpath fill=%22none%22 d=%22M500 100h100v100H500zM600 100h100v100H600zM700 100h100v100H700z%22%2F%3E%3Cpath fill=%22%2365656504%22 d=%22M800 100h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 100h100v100H900zM1000 100h100v100h-100zM1100 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656515%22 d=%22M1200 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565653f%22 d=%22M1300 100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 100h100v100h-100zM1500 100h100v100h-100zM1600 100h100v100h-100zM1700 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656531%22 d=%22M1800 100h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565657f%22 d=%22M1900 100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M0 200h100v100H0zM100 200h100v100H100z%22%2F%3E%3Cpath fill=%22%2365656550%22 d=%22M200 200h100v100H200z%22%2F%3E%3Cpath fill=%22none%22 d=%22M300 200h100v100H300z%22%2F%3E%3Cpath fill=%22%236565654a%22 d=%22M400 200h100v100H400z%22%2F%3E%3Cpath fill=%22none%22 d=%22M500 200h100v100H500zM600 200h100v100H600zM700 200h100v100H700zM800 200h100v100H800zM900 200h100v100H900z%22%2F%3E%3Cpath fill=%22%2365656563%22 d=%22M1000 200h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656540%22 d=%22M1100 200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1200 200h100v100h-100zM1300 200h100v100h-100zM1400 200h100v100h-100zM1500 200h100v100h-100zM1600 200h100v100h-100zM1700 200h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656563%22 d=%22M1800 200h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565657e%22 d=%22M1900 200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M0 300h100v100H0zM100 300h100v100H100zM200 300h100v100H200z%22%2F%3E%3Cpath fill=%22%2365656510%22 d=%22M300 300h100v100H300z%22%2F%3E%3Cpath fill=%22%2365656514%22 d=%22M400 300h100v100H400z%22%2F%3E%3Cpath fill=%22none%22 d=%22M500 300h100v100H500zM600 300h100v100H600z%22%2F%3E%3Cpath fill=%22%236565656a%22 d=%22M700 300h100v100H700z%22%2F%3E%3Cpath fill=%22%236565651e%22 d=%22M800 300h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 300h100v100H900zM1000 300h100v100h-100zM1100 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565653d%22 d=%22M1200 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656572%22 d=%22M1300 300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 300h100v100h-100zM1500 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656584%22 d=%22M1600 300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1700 300h100v100h-100zM1800 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656562%22 d=%22M1900 300h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565650b%22 d=%22M0 400h100v100H0z%22%2F%3E%3Cpath fill=%22%236565652e%22 d=%22M100 400h100v100H100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M200 400h100v100H200zM300 400h100v100H300zM400 400h100v100H400z%22%2F%3E%3Cpath fill=%22%236565655a%22 d=%22M500 400h100v100H500z%22%2F%3E%3Cpath fill=%22none%22 d=%22M600 400h100v100H600z%22%2F%3E%3Cpath fill=%22%2365656541%22 d=%22M700 400h100v100H700z%22%2F%3E%3Cpath fill=%22none%22 d=%22M800 400h100v100H800zM900 400h100v100H900zM1000 400h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656557%22 d=%22M1100 400h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1200 400h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565651a%22 d=%22M1300 400h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656503%22 d=%22M1400 400h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1500 400h100v100h-100zM1600 400h100v100h-100zM1700 400h100v100h-100zM1800 400h100v100h-100zM1900 400h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565654b%22 d=%22M0 500h100v100H0z%22%2F%3E%3Cpath fill=%22none%22 d=%22M100 500h100v100H100zM200 500h100v100H200zM300 500h100v100H300zM400 500h100v100H400zM500 500h100v100H500zM600 500h100v100H600z%22%2F%3E%3Cpath fill=%22%236565656a%22 d=%22M700 500h100v100H700z%22%2F%3E%3Cpath fill=%22%2365656559%22 d=%22M800 500h100v100H800z%22%2F%3E%3Cpath fill=%22%2365656507%22 d=%22M900 500h100v100H900z%22%2F%3E%3Cpath fill=%22%2365656505%22 d=%22M1000 500h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1100 500h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656586%22 d=%22M1200 500h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656577%22 d=%22M1300 500h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 500h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656532%22 d=%22M1500 500h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 500h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656571%22 d=%22M1700 500h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656526%22 d=%22M1800 500h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 500h100v100h-100zM0 600h100v100H0zM100 600h100v100H100z%22%2F%3E%3Cpath fill=%22%2365656587%22 d=%22M200 600h100v100H200z%22%2F%3E%3Cpath fill=%22none%22 d=%22M300 600h100v100H300z%22%2F%3E%3Cpath fill=%22%2365656574%22 d=%22M400 600h100v100H400z%22%2F%3E%3Cpath fill=%22%2365656543%22 d=%22M500 600h100v100H500z%22%2F%3E%3Cpath fill=%22%2365656528%22 d=%22M600 600h100v100H600z%22%2F%3E%3Cpath fill=%22none%22 d=%22M700 600h100v100H700zM800 600h100v100H800zM900 600h100v100H900zM1000 600h100v100h-100zM1100 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656502%22 d=%22M1200 600h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 600h100v100h-100zM1400 600h100v100h-100zM1500 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565656c%22 d=%22M1600 600h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1700 600h100v100h-100zM1800 600h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565653d%22 d=%22M1900 600h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M0 700h100v100H0zM100 700h100v100H100z%22%2F%3E%3Cpath fill=%22%236565655b%22 d=%22M200 700h100v100H200z%22%2F%3E%3Cpath fill=%22none%22 d=%22M300 700h100v100H300z%22%2F%3E%3Cpath fill=%22%2365656551%22 d=%22M400 700h100v100H400z%22%2F%3E%3Cpath fill=%22none%22 d=%22M500 700h100v100H500zM600 700h100v100H600zM700 700h100v100H700z%22%2F%3E%3Cpath fill=%22%2365656539%22 d=%22M800 700h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 700h100v100H900zM1000 700h100v100h-100zM1100 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656543%22 d=%22M1200 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656555%22 d=%22M1300 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656541%22 d=%22M1400 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656509%22 d=%22M1500 700h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656554%22 d=%22M1700 700h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1800 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656565%22 d=%22M1900 700h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565654d%22 d=%22M0 800h100v100H0z%22%2F%3E%3Cpath fill=%22none%22 d=%22M100 800h100v100H100zM200 800h100v100H200zM300 800h100v100H300zM400 800h100v100H400zM500 800h100v100H500zM600 800h100v100H600zM700 800h100v100H700z%22%2F%3E%3Cpath fill=%22%2365656570%22 d=%22M800 800h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 800h100v100H900zM1000 800h100v100h-100zM1100 800h100v100h-100zM1200 800h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656555%22 d=%22M1300 800h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 800h100v100h-100zM1500 800h100v100h-100zM1600 800h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565654b%22 d=%22M1700 800h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1800 800h100v100h-100zM1900 800h100v100h-100zM0 900h100v100H0zM100 900h100v100H100zM200 900h100v100H200zM300 900h100v100H300zM400 900h100v100H400zM500 900h100v100H500zM600 900h100v100H600zM700 900h100v100H700zM800 900h100v100H800z%22%2F%3E%3Cpath fill=%22%236565656e%22 d=%22M900 900h100v100H900z%22%2F%3E%3Cpath fill=%22%2365656577%22 d=%22M1000 900h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1100 900h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565651c%22 d=%22M1200 900h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1300 900h100v100h-100zM1400 900h100v100h-100zM1500 900h100v100h-100zM1600 900h100v100h-100zM1700 900h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656516%22 d=%22M1800 900h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 900h100v100h-100zM0 1000h100v100H0z%22%2F%3E%3Cpath fill=%22%2365656576%22 d=%22M100 1000h100v100H100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M200 1000h100v100H200zM300 1000h100v100H300zM400 1000h100v100H400zM500 1000h100v100H500z%22%2F%3E%3Cpath fill=%22%2365656555%22 d=%22M600 1000h100v100H600z%22%2F%3E%3Cpath fill=%22none%22 d=%22M700 1000h100v100H700zM800 1000h100v100H800z%22%2F%3E%3Cpath fill=%22%236565658c%22 d=%22M900 1000h100v100H900z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1000 1000h100v100h-100zM1100 1000h100v100h-100zM1200 1000h100v100h-100zM1300 1000h100v100h-100zM1400 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656549%22 d=%22M1500 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 1000h100v100h-100zM1700 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656553%22 d=%22M1800 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656516%22 d=%22M1900 1000h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M0 1100h100v100H0zM100 1100h100v100H100zM200 1100h100v100H200z%22%2F%3E%3Cpath fill=%22%236565657b%22 d=%22M300 1100h100v100H300z%22%2F%3E%3Cpath fill=%22%2365656556%22 d=%22M400 1100h100v100H400z%22%2F%3E%3Cpath fill=%22%2365656569%22 d=%22M500 1100h100v100H500z%22%2F%3E%3Cpath fill=%22%236565654a%22 d=%22M600 1100h100v100H600z%22%2F%3E%3Cpath fill=%22none%22 d=%22M700 1100h100v100H700z%22%2F%3E%3Cpath fill=%22%2365656503%22 d=%22M800 1100h100v100H800z%22%2F%3E%3Cpath fill=%22none%22 d=%22M900 1100h100v100H900zM1000 1100h100v100h-100zM1100 1100h100v100h-100zM1200 1100h100v100h-100zM1300 1100h100v100h-100zM1400 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656518%22 d=%22M1500 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1600 1100h100v100h-100zM1700 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656564%22 d=%22M1800 1100h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 1100h100v100h-100zM0 1200h100v100H0zM100 1200h100v100H100zM200 1200h100v100H200zM300 1200h100v100H300zM400 1200h100v100H400zM500 1200h100v100H500z%22%2F%3E%3Cpath fill=%22%236565650a%22 d=%22M600 1200h100v100H600z%22%2F%3E%3Cpath fill=%22%2365656565%22 d=%22M700 1200h100v100H700z%22%2F%3E%3Cpath fill=%22none%22 d=%22M800 1200h100v100H800zM900 1200h100v100H900zM1000 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656544%22 d=%22M1100 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1200 1200h100v100h-100zM1300 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656568%22 d=%22M1400 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1500 1200h100v100h-100zM1600 1200h100v100h-100zM1700 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656563%22 d=%22M1800 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1900 1200h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656565%22 d=%22M0 1300h100v100H0z%22%2F%3E%3Cpath fill=%22none%22 d=%22M100 1300h100v100H100zM200 1300h100v100H200zM300 1300h100v100H300zM400 1300h100v100H400z%22%2F%3E%3Cpath fill=%22%2365656545%22 d=%22M500 1300h100v100H500z%22%2F%3E%3Cpath fill=%22%2365656549%22 d=%22M600 1300h100v100H600z%22%2F%3E%3Cpath fill=%22%236565651d%22 d=%22M700 1300h100v100H700z%22%2F%3E%3Cpath fill=%22%2365656585%22 d=%22M800 1300h100v100H800z%22%2F%3E%3Cpath fill=%22%2365656580%22 d=%22M900 1300h100v100H900z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1000 1300h100v100h-100zM1100 1300h100v100h-100zM1200 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22%236565652c%22 d=%22M1300 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1400 1300h100v100h-100zM1500 1300h100v100h-100zM1600 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22%2365656540%22 d=%22M1700 1300h100v100h-100z%22%2F%3E%3Cpath fill=%22none%22 d=%22M1800 1300h100v100h-100zM1900 1300h100v100h-100z%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CradialGradient id=%22a%22%3E%3Cstop offset=%220%22 stop-color=%22%23fff%22 stop-opacity=%22.838%22%2F%3E%3Cstop offset=%2286.5%25%22 stop-color=%22%23fff%22 stop-opacity=%220%22%2F%3E%3C%2FradialGradient%3E%3C%2Fdefs%3E%3C%2Fsvg%3E");
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,89 @@
1
+ @layer components {
2
+ /* Base pf-rating styles */
3
+ .pf-rating {
4
+ display: inline-flex;
5
+ align-items: stretch;
6
+
7
+ & input {
8
+ appearance: none;
9
+ position: absolute;
10
+ inset-inline-start: 9999px;
11
+
12
+ &[disabled] {
13
+ display: none;
14
+ }
15
+ }
16
+ }
17
+
18
+ /* pf-rating on state */
19
+ .pf-rating-on {
20
+ @apply text-yellow-400;
21
+ }
22
+
23
+ /* pf-rating off state */
24
+ .pf-rating-off {
25
+ @apply text-muted-foreground;
26
+ }
27
+
28
+ /* pf-rating label base styles */
29
+ .pf-rating-label {
30
+ display: inline-flex !important;
31
+ align-items: center;
32
+
33
+ & .pf-rating-on {
34
+ display: none !important;
35
+ }
36
+
37
+ & .pf-rating-off {
38
+ display: inline-flex !important;
39
+ }
40
+ }
41
+
42
+ /* Hover and checked states for pf-rating label */
43
+ .pf-rating:hover label.pf-rating-label,
44
+ label.pf-rating-label,
45
+ label.pf-rating-label.checked,
46
+ div.pf-rating-label.checked {
47
+ & .pf-rating-on {
48
+ display: inline-flex !important;
49
+ }
50
+
51
+ & .pf-rating-off {
52
+ display: none !important;
53
+ }
54
+ }
55
+
56
+ /* Sibling hover and checked states */
57
+ label.pf-rating-label:hover ~ label.pf-rating-label,
58
+ .pf-rating-input:checked ~ .pf-rating-label {
59
+ & .pf-rating-on {
60
+ display: none !important;
61
+ }
62
+
63
+ & .pf-rating-off {
64
+ display: inline-flex !important;
65
+ }
66
+ }
67
+
68
+ /* Indeterminate pf-rating label state */
69
+ .pf-rating-label.indeterminate {
70
+ position: relative;
71
+
72
+ & .pf-rating-on {
73
+ display: inline-flex !important;
74
+ position: absolute;
75
+ z-index: 1;
76
+ overflow: hidden;
77
+ inset-inline-start: 0;
78
+ }
79
+
80
+ & .pf-rating-off {
81
+ display: inline-flex !important;
82
+ }
83
+ }
84
+
85
+ /* Cursor for label */
86
+ label.pf-rating-label {
87
+ cursor: pointer;
88
+ }
89
+ }