@snowbomb1/nova-ui 1.0.10 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/index.d.ts +307 -23
  2. package/dist/nova-ui.css +1 -1
  3. package/package.json +1 -1
  4. package/dist/components/Accordion/Accordion.d.ts +0 -6
  5. package/dist/components/Accordion/index.d.ts +0 -1
  6. package/dist/components/ActionSheet/ActionSheet.d.ts +0 -15
  7. package/dist/components/ActionSheet/index.d.ts +0 -1
  8. package/dist/components/Alert/Alert.d.ts +0 -6
  9. package/dist/components/Alert/index.d.ts +0 -1
  10. package/dist/components/AppLayout/AppLayout.d.ts +0 -10
  11. package/dist/components/AppLayout/index.d.ts +0 -1
  12. package/dist/components/Box/Box.d.ts +0 -8
  13. package/dist/components/Box/index.d.ts +0 -1
  14. package/dist/components/Button/Button.d.ts +0 -10
  15. package/dist/components/Button/index.d.ts +0 -1
  16. package/dist/components/Checkbox/Checkbox.d.ts +0 -8
  17. package/dist/components/Checkbox/index.d.ts +0 -1
  18. package/dist/components/Container/Container.d.ts +0 -12
  19. package/dist/components/Container/index.d.ts +0 -1
  20. package/dist/components/FloatingMenuButton/FloatingMenuButton.d.ts +0 -7
  21. package/dist/components/FloatingMenuButton/index.d.ts +0 -1
  22. package/dist/components/Form field/FormField.d.ts +0 -10
  23. package/dist/components/Form field/index.d.ts +0 -1
  24. package/dist/components/Header/Header.d.ts +0 -6
  25. package/dist/components/Header/index.d.ts +0 -1
  26. package/dist/components/Input/Input.d.ts +0 -12
  27. package/dist/components/Input/index.d.ts +0 -1
  28. package/dist/components/Modal/Modal.d.ts +0 -10
  29. package/dist/components/Modal/index.d.ts +0 -1
  30. package/dist/components/Select/Select.d.ts +0 -28
  31. package/dist/components/Select/index.d.ts +0 -1
  32. package/dist/components/SideNav/SideNav.d.ts +0 -15
  33. package/dist/components/SideNav/index.d.ts +0 -1
  34. package/dist/components/Stepper/Stepper.d.ts +0 -10
  35. package/dist/components/Stepper/index.d.ts +0 -1
  36. package/dist/components/Toast/Toast.d.ts +0 -12
  37. package/dist/components/Toast/index.d.ts +0 -1
  38. package/dist/components/Toggle/Toggle.d.ts +0 -7
  39. package/dist/components/Toggle/index.d.ts +0 -1
  40. package/dist/components/Tooltip/Tooltip.d.ts +0 -7
  41. package/dist/components/Tooltip/index.d.ts +0 -1
  42. package/dist/components/TopNav/ThemeToggler.d.ts +0 -1
  43. package/dist/components/TopNav/TopNav.d.ts +0 -7
  44. package/dist/components/TopNav/index.d.ts +0 -1
  45. package/dist/components/Viewer/Viewer.d.ts +0 -16
  46. package/dist/components/Viewer/ViewerLoader.d.ts +0 -9
  47. package/dist/components/Viewer/index.d.ts +0 -1
  48. package/dist/hooks/useKeyboardShortcuts.d.ts +0 -7
  49. package/dist/hooks/useMediaLoader.d.ts +0 -11
  50. package/dist/hooks/useTheme.d.ts +0 -8
package/dist/index.d.ts CHANGED
@@ -1,23 +1,307 @@
1
- export * from './components/Accordion';
2
- export * from './components/ActionSheet';
3
- export * from './components/Alert';
4
- export * from './components/AppLayout';
5
- export * from './components/Box';
6
- export * from './components/Button';
7
- export * from './components/Checkbox';
8
- export * from './components/Container';
9
- export * from './components/FloatingMenuButton';
10
- export * from './components/Form field';
11
- export * from './components/Header';
12
- export * from './components/Input';
13
- export * from './components/Modal';
14
- export * from './components/Select';
15
- export * from './components/SideNav';
16
- export * from './components/Stepper';
17
- export * from './components/Toast';
18
- export * from './components/Toggle';
19
- export * from './components/Tooltip';
20
- export * from './components/TopNav';
21
- export * from './components/Viewer';
22
- export { useMediaLoader } from './hooks/useMediaLoader';
23
- export { useTheme } from './hooks/useTheme';
1
+ import { JSX } from 'react/jsx-runtime';
2
+ import { LabelHTMLAttributes } from 'react';
3
+ import { MouseEvent as MouseEvent_2 } from 'react';
4
+ import { ReactNode } from 'react';
5
+
6
+ export declare const Accordion: ({ title, children, defaultOpen }: AccordionProps) => JSX.Element;
7
+
8
+ export declare interface AccordionProps {
9
+ title: string;
10
+ children: React.ReactNode;
11
+ defaultOpen?: boolean;
12
+ }
13
+
14
+ export declare const ActionSheet: ({ isOpen, onClose, title, message, actions }: ActionSheetProps) => JSX.Element;
15
+
16
+ export declare interface ActionSheetAction {
17
+ label: string;
18
+ icon?: React.ReactNode;
19
+ onClick: () => void;
20
+ destructive?: boolean;
21
+ disabled?: boolean;
22
+ }
23
+
24
+ export declare interface ActionSheetProps {
25
+ isOpen: boolean;
26
+ onClose: () => void;
27
+ title?: string;
28
+ message?: string;
29
+ actions: ActionSheetAction[];
30
+ }
31
+
32
+ export declare const Alert: ({ type, children }: AlertProps) => JSX.Element;
33
+
34
+ export declare interface AlertProps {
35
+ type?: AlertType;
36
+ children: React.ReactNode;
37
+ }
38
+
39
+ export declare type AlertType = 'success' | 'warning' | 'error' | 'info';
40
+
41
+ export declare const AppLayout: ({ topNav, sideNav, sideNavOpen, sideNavExpandedWidth, sideNavCollapsedWidth, children }: AppLayoutProps) => JSX.Element;
42
+
43
+ export declare interface AppLayoutProps {
44
+ topNav?: ReactNode;
45
+ sideNav?: ReactNode;
46
+ sideNavOpen?: boolean;
47
+ sideNavExpandedWidth?: string;
48
+ sideNavCollapsedWidth?: string;
49
+ children: ReactNode;
50
+ }
51
+
52
+ export declare const Box: ({ children, position, direction }: BoxProps) => JSX.Element;
53
+
54
+ export declare type BoxPosition = 'left' | 'right' | 'center';
55
+
56
+ export declare interface BoxProps {
57
+ children: React.ReactNode;
58
+ position?: BoxPosition;
59
+ direction?: FlexDirection;
60
+ }
61
+
62
+ export declare const Button: ({ children, onClick, variant, disabled, disabledMessage, tooltipPosition, ...props }: ButtonProps) => JSX.Element;
63
+
64
+ export declare interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
65
+ children: React.ReactNode;
66
+ variant?: ButtonVariant;
67
+ disabled?: boolean;
68
+ disabledMessage?: string;
69
+ tooltipPosition?: TooltipPosition;
70
+ }
71
+
72
+ export declare type ButtonVariant = 'primary' | 'secondary' | 'icon';
73
+
74
+ export declare const Checkbox: ({ checked, onChange, label, disabled, indeterminate }: CheckboxProps) => JSX.Element;
75
+
76
+ export declare interface CheckboxProps {
77
+ checked: boolean;
78
+ onChange: (checked: boolean) => void;
79
+ label?: string;
80
+ disabled?: boolean;
81
+ indeterminate?: boolean;
82
+ }
83
+
84
+ export declare const Container: ({ children, header, headerActions, footer, variant, padding, fullWidth }: ContainerProps) => JSX.Element;
85
+
86
+ export declare type ContainerPadding = 'none' | 'sm' | 'md' | 'lg';
87
+
88
+ export declare interface ContainerProps {
89
+ children: React.ReactNode;
90
+ header?: React.ReactNode;
91
+ headerActions?: React.ReactNode;
92
+ footer?: React.ReactNode;
93
+ variant?: ContainerVariant;
94
+ padding?: ContainerPadding;
95
+ fullWidth?: boolean;
96
+ }
97
+
98
+ export declare type ContainerVariant = 'default' | 'outlined' | 'elevated' | 'flat';
99
+
100
+ export declare type FlexDirection = 'horizontal' | 'vertical';
101
+
102
+ export declare const FloatingButton: ({ onClick, variant, ariaLabel }: FloatingButtonProps) => JSX.Element;
103
+
104
+ export declare interface FloatingButtonProps {
105
+ variant: FloatingButtonVariant;
106
+ ariaLabel: string;
107
+ onClick: () => void;
108
+ }
109
+
110
+ export declare type FloatingButtonVariant = 'menu' | 'action';
111
+
112
+ export declare const FormField: ({ label, helperText, error, required, disabled, children }: FormFieldProps) => JSX.Element;
113
+
114
+ export declare interface FormFieldProps extends LabelHTMLAttributes<HTMLLabelElement> {
115
+ label?: string;
116
+ helperText?: string;
117
+ error?: string;
118
+ required?: boolean;
119
+ disabled?: boolean;
120
+ children: React.ReactNode;
121
+ }
122
+
123
+ export declare const Header: ({ children, variant }: HeaderProps) => JSX.Element;
124
+
125
+ export declare interface HeaderProps {
126
+ children: React.ReactNode;
127
+ variant?: HeaderVariant;
128
+ }
129
+
130
+ export declare type HeaderVariant = 'h1' | 'h2' | 'h3' | 'h4';
131
+
132
+ export declare const Input: ({ value, onChange, disabled, suggestions, placeholder, hideClear, label, error, required, helperText, ...props }: InputProps) => JSX.Element;
133
+
134
+ export declare interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
135
+ value: string | undefined;
136
+ onChange?: (newValue: string) => void;
137
+ disabled?: boolean;
138
+ suggestions?: string[];
139
+ hideClear?: boolean;
140
+ required?: boolean;
141
+ label?: string;
142
+ error?: string;
143
+ helperText?: string;
144
+ }
145
+
146
+ export declare const Modal: ({ isVisible, onClose, size, header, footer, children }: ModalProps) => JSX.Element;
147
+
148
+ export declare interface ModalProps {
149
+ isVisible: boolean;
150
+ onClose: () => void;
151
+ children: React.ReactNode;
152
+ size?: ModalSize;
153
+ header?: React.ReactNode;
154
+ footer?: React.ReactNode;
155
+ }
156
+
157
+ export declare type ModalSize = 's' | 'm' | 'l' | 'xl';
158
+
159
+ declare interface MultiSelectProps extends SharedProps {
160
+ selectType: 'multi';
161
+ selectedOption?: Option_2[];
162
+ onChange: (options: Option_2[]) => void;
163
+ }
164
+
165
+ export declare type NavItem = {
166
+ label: string;
167
+ icon?: React.ReactNode;
168
+ onClick: () => void;
169
+ };
170
+
171
+ export declare type NavPosition = 'left' | 'right';
172
+
173
+ declare type Option_2 = {
174
+ label: string;
175
+ value: string | number;
176
+ };
177
+ export { Option_2 as Option }
178
+
179
+ export declare const Select: (props: SelectProps) => JSX.Element;
180
+
181
+ export declare type SelectProps = SingleSelectProps | MultiSelectProps;
182
+
183
+ declare interface SharedProps {
184
+ options: Option_2[];
185
+ autoFilter?: boolean;
186
+ placeholder?: string;
187
+ disabled?: boolean;
188
+ name?: string;
189
+ required?: boolean;
190
+ label?: string;
191
+ helperText?: string;
192
+ error?: string;
193
+ }
194
+
195
+ export declare const SideNav: ({ isOpen, items, onToggle, expandedWidth, collapsedWidth, position }: SideNavProps) => JSX.Element;
196
+
197
+ export declare interface SideNavProps {
198
+ isOpen: boolean;
199
+ onToggle: () => void;
200
+ items: NavItem[];
201
+ expandedWidth?: string;
202
+ collapsedWidth?: string;
203
+ position?: NavPosition;
204
+ }
205
+
206
+ declare interface SingleSelectProps extends SharedProps {
207
+ selectType?: 'single';
208
+ selectedOption?: Option_2;
209
+ onChange: (option: Option_2) => void;
210
+ }
211
+
212
+ export declare const Stepper: ({ label, helperText, error, required, value, onChange, min, max, step, disabled }: StepperProps) => JSX.Element;
213
+
214
+ export declare interface StepperProps extends Pick<FormFieldProps, 'label' | 'helperText' | 'error' | 'required'> {
215
+ value: number;
216
+ onChange: (value: number) => void;
217
+ min?: number;
218
+ max?: number;
219
+ step?: number;
220
+ disabled?: boolean;
221
+ }
222
+
223
+ declare type Theme = 'light' | 'dark';
224
+
225
+ export declare const Toast: ({ visible, onDismiss, timeout, position, status, children, dismissible }: ToastProps) => JSX.Element;
226
+
227
+ export declare type ToastPosition = 'top' | 'bottom';
228
+
229
+ export declare interface ToastProps {
230
+ visible: boolean;
231
+ onDismiss: () => void;
232
+ timeout?: number;
233
+ position?: ToastPosition;
234
+ status?: ToastStatus;
235
+ children: React.ReactNode;
236
+ dismissible?: boolean;
237
+ }
238
+
239
+ export declare type ToastStatus = 'success' | 'warning' | 'error' | 'info';
240
+
241
+ export declare const Toggle: ({ label, value, onChange, disabled }: ToggleProps) => JSX.Element;
242
+
243
+ export declare interface ToggleProps {
244
+ label: string;
245
+ value: boolean;
246
+ onChange: (enabled: boolean) => void;
247
+ disabled?: boolean;
248
+ }
249
+
250
+ export declare const Tooltip: ({ children, message, position }: TooltipProps) => JSX.Element;
251
+
252
+ export declare type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
253
+
254
+ export declare interface TooltipProps {
255
+ children: React.ReactNode;
256
+ message?: string;
257
+ position?: TooltipPosition;
258
+ }
259
+
260
+ export declare const TopNav: ({ header, logo, logoClick, search }: TopNavProps) => JSX.Element;
261
+
262
+ export declare interface TopNavProps {
263
+ header: React.ReactNode;
264
+ logo?: React.ReactNode;
265
+ logoClick?: () => void;
266
+ search?: React.ReactNode;
267
+ }
268
+
269
+ export declare const useMediaLoader: ({ src, onError }: UseMediaLoaderProps) => {
270
+ isLoading: boolean;
271
+ hasError: boolean;
272
+ isVideo: boolean;
273
+ reload: () => void;
274
+ };
275
+
276
+ declare interface UseMediaLoaderProps {
277
+ src: string;
278
+ onError?: (error: Error) => void;
279
+ }
280
+
281
+ export declare const useTheme: () => {
282
+ theme: Theme;
283
+ isTransitioning: boolean;
284
+ toggleTheme: (event: MouseEvent_2) => void;
285
+ };
286
+
287
+ export declare interface VideoProps {
288
+ controls?: boolean;
289
+ loop?: boolean;
290
+ autoPlay?: boolean;
291
+ muted?: boolean;
292
+ }
293
+
294
+ export declare const Viewer: ({ src, alt, video, thumbnailWidth, onError, aspectRatio }: ViewerProps) => JSX.Element;
295
+
296
+ export declare type ViewerAspectRatio = '16/9' | '9/16' | '1/1' | '4/3' | '3/2' | '21/19';
297
+
298
+ export declare interface ViewerProps {
299
+ src: string;
300
+ alt: string;
301
+ video?: VideoProps;
302
+ thumbnailWidth?: string;
303
+ aspectRatio?: ViewerAspectRatio;
304
+ onError?: (error: Error) => void;
305
+ }
306
+
307
+ export { }
package/dist/nova-ui.css CHANGED
@@ -1 +1 @@
1
- .accordion-module__container___M1a4P{width:100%;border:2px solid var(--color-border);border-radius:.5rem;overflow:hidden;align-self:flex-start}.accordion-module__accordion___C0eUc{width:100%;background-color:var(--color-surface);color:#fff;cursor:pointer;display:flex;flex-direction:row;padding:1rem;text-align:left;align-items:center;border:none}.accordion-module__header___NFLuh{font-size:medium;font-weight:600;color:var(--color-text)}.accordion-module__icon___Mjff1{margin-left:auto;color:var(--color-text)}.accordion-module__content___18iAN{position:relative;background-color:var(--color-surface);transition:max-height .2s ease-out;max-height:0}.accordion-module__content___18iAN.accordion-module__open___acchR{padding:1rem;max-height:500px}.accordion-module__container___M1a4P:hover:not(:has(.accordion-module__content___18iAN.accordion-module__open___acchR)){border-color:var(--color-primary)}.action-sheet-module__backdrop___E-oM5{position:fixed;top:0;right:0;bottom:0;left:0;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:9998}.action-sheet-module__sheet___zFFdl{position:fixed;bottom:0;left:0;right:0;background:var(--color-surface);border-radius:1rem 1rem 0 0;z-index:9999;max-height:80vh;display:flex;flex-direction:column;padding-bottom:calc(1rem + env(safe-area-inset-bottom,0))}.action-sheet-module__handle___1dYRp{display:flex;justify-content:center;padding:.75rem}.action-sheet-module__handleBar___3lmQ1{width:36px;height:4px;background:var(--color-border);border-radius:2px}.action-sheet-module__header___oMW-U{padding:1rem 1.5rem;text-align:center;border-bottom:1px solid var(--color-border)}.action-sheet-module__title___k5RM2{font-size:1.125rem;font-weight:600;color:var(--color-text);margin:0 0 .25rem}.action-sheet-module__message___jsCQT{font-size:.875rem;color:var(--color-text-secondary);margin:0}.action-sheet-module__actions___vgr-N{overflow-y:auto;max-height:60vh}.action-sheet-module__action___kV71S{display:flex;align-items:center;gap:1rem;width:100%;padding:1rem 1.5rem;background:transparent;border:none;border-bottom:1px solid var(--color-border);color:var(--color-text);font-size:1rem;cursor:pointer;transition:background-color .15s;min-height:56px}.action-sheet-module__action___kV71S:active{background-color:#0000000d}.action-sheet-module__action___kV71S:disabled{opacity:.5;cursor:not-allowed}.action-sheet-module__action___kV71S.action-sheet-module__destructive___N5M9i{color:var(--color-error)}.action-sheet-module__actionIcon___MXc9U{font-size:1.5rem;width:28px;display:flex;align-items:center;justify-content:center}.action-sheet-module__actionLabel___dPWqE{flex:1;text-align:left}.action-sheet-module__cancel___Oncun{width:100%;padding:1rem;background:var(--color-surface);border:none;color:var(--color-primary);font-size:1rem;font-weight:600;cursor:pointer;margin-top:.5rem}.action-sheet-module__cancel___Oncun:active{opacity:.7}.alert-module__alert___phXsH{pointer-events:auto;width:100%;padding:1rem 1.25rem;background:var(--toast-bg);border-radius:12px;color:var(--color-text);display:flex;align-items:center;gap:.75rem;position:relative;overflow:hidden;border:2px solid var(--status-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.alert-module__iconWrapper___5mthT{flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--status-color);display:flex;align-items:center;justify-content:center;margin-left:.5rem}.alert-module__statusIcon___Tyvx3{color:#fff}.alert-module__content___IvPaU{flex:1;font-size:.9375rem;line-height:1.5}.alert-module__success___lM3GI{--status-color: var(--color-success);--toast-bg: var(--toast-bg-success)}.alert-module__warning___DfOAf{--status-color: var(--color-warning);--toast-bg: var(--toast-bg-warning)}.alert-module__error___9GnhN{--status-color: var(--color-error);--toast-bg: var(--toast-bg-error)}.alert-module__info___SotSQ{--status-color: var(--color-info);--toast-bg: var(--toast-bg-info)}@media(max-width:768px){.alert-module__container___SGTJP{width:calc(100% - 2rem)}.alert-module__alert___phXsH{padding:.875rem 1rem}}.applayout-module__layout___d2c6J{position:relative;display:flex;min-height:100vh;background-color:var(--color-background)}.applayout-module__mainArea___Q4Yhu{flex:1;min-height:100vh;display:flex;flex-direction:column;min-width:0}.applayout-module__content___lok2L{flex:1;padding:2rem;max-width:1400px}@media(max-width:768px){.applayout-module__mainArea___Q4Yhu{margin-left:0!important}.applayout-module__content___lok2L{padding:1rem}}.box-module__box___FP5Js{display:flex;width:100%;gap:1rem}.box-module__box___FP5Js[data-direction=vertical]{flex-direction:column}.box-module__box___FP5Js[data-direction=vertical][data-position=left]{align-items:flex-start}.box-module__box___FP5Js[data-direction=vertical][data-position=center]{align-items:center}.box-module__box___FP5Js[data-direction=vertical][data-position=right]{align-items:flex-end}.box-module__box___FP5Js[data-direction=horizontal]{flex-direction:row;align-items:center}.box-module__box___FP5Js[data-direction=horizontal][data-position=left]{justify-content:flex-start}.box-module__box___FP5Js[data-direction=horizontal][data-position=center]{justify-content:center}.box-module__box___FP5Js[data-direction=horizontal][data-position=right]{justify-content:flex-end}.tooltip-module__triggerWrapper___mvvzS{display:inline-block;width:fit-content;text-decoration:underline dashed var(--color-accent)}.tooltip-module__tooltip___mEmui{position:fixed;left:var(--tooltip-x, 0);top:var(--tooltip-y, 0);padding:8px 12px;border-radius:4px;font-size:14px;z-index:1000;background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-dark) 100%);color:var(--color-text);pointer-events:none;white-space:nowrap;display:flex;flex-direction:column;align-items:center;will-change:transform}.tooltip-module__arrow___Kjrs-{position:absolute;width:0;height:0;border-style:solid;border-width:6px}.tooltip-module__tooltip___mEmui[data-position=top] .tooltip-module__arrow___Kjrs-{top:100%;border-color:var(--color-primary) transparent transparent transparent}.tooltip-module__tooltip___mEmui[data-position=bottom] .tooltip-module__arrow___Kjrs-{bottom:100%;border-color:transparent transparent var(--color-primary) transparent}.tooltip-module__tooltip___mEmui[data-position=left] .tooltip-module__arrow___Kjrs-{left:100%;border-color:transparent transparent transparent var(--color-primary)}.tooltip-module__tooltip___mEmui[data-position=right] .tooltip-module__arrow___Kjrs-{right:100%;border-color:transparent var(--color-primary) transparent transparent}.button-module__button___JyfZW{border:none;border-radius:.75rem;padding:.75rem 1.5rem;font-size:1rem;font-weight:600;cursor:pointer;color:var(--color-text)}.button-module__button___JyfZW:active{opacity:.8}.button-module__button___JyfZW:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.button-module__button___JyfZW:focus-visible{outline:2px solid var(--color-accent)}.button-module__primary___ggjlO{background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-dark) 100%);color:var(--color-text-on-primary)}.button-module__secondary___Q4I1z{background:linear-gradient(135deg,var(--color-secondary) 0%,var(--color-secondary-dark) 100%);color:var(--color-text-on-secondary)}.button-module__icon___zcUnX{padding:.75rem;border-radius:.5rem;background:transparent;object-fit:cover}.button-module__primary___ggjlO:hover:not(:disabled),.button-module__secondary___Q4I1z:hover:not(:disabled),.button-module__icon___zcUnX:hover:not(:disabled){outline:2px solid var(--color-accent)}.checkbox-module__container___26-ah{display:inline-flex;align-items:center}.checkbox-module__hiddenInput___X-HH-{position:absolute;opacity:0;width:0;height:0}.checkbox-module__label___dV34E{display:flex;align-items:center;gap:.75rem;cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-module__box___UQZjc{width:20px;height:20px;border:2px solid var(--color-border);border-radius:.25rem;display:flex;align-items:center;justify-content:center;flex-shrink:0}.checkbox-module__box___UQZjc:hover{border-color:var(--color-primary)}.checkbox-module__checked___mqwdo{background-color:var(--color-primary);border-color:var(--color-primary)}.checkbox-module__labelText___ORrnL{color:var(--color-text);font-size:.9375rem}.checkbox-module__disabled___E2BaQ{opacity:.5;pointer-events:none}.checkbox-module__disabled___E2BaQ .checkbox-module__label___dV34E{cursor:not-allowed}.container-module__container___g2I0w{display:flex;flex-direction:column;background:var(--color-surface);border-radius:.75rem;overflow:visible;min-width:0;width:fit-content}.container-module__fullWidth___C7E9O{width:100%}.container-module__default___VLaR3{border:1px solid var(--color-border)}.container-module__outlined___V7eh0{border:2px solid var(--color-border)}.container-module__elevated___TdnlI{border:1px solid var(--color-border);box-shadow:var(--shadow-md)}.container-module__flat___VVl-e{background:transparent;border:none}.container-module__header___EUrkl{display:flex;align-items:center;border-bottom:1px solid var(--color-border);background:var(--color-background);gap:1rem}.container-module__headerContent___E9O0H{flex:1}.container-module__headerActions___PZYbZ{display:flex;align-items:center;gap:.5rem;margin-left:auto;flex-shrink:0}.container-module__content___U-qAz{flex:1;overflow:auto}.container-module__footer___TrwGJ{display:flex;justify-content:flex-end;align-items:center;gap:.75rem;border-top:1px solid var(--color-border);background:var(--color-background)}.container-module__padding-none___eH2bc .container-module__header___EUrkl,.container-module__padding-none___eH2bc .container-module__footer___TrwGJ{padding:.75rem 0}.container-module__padding-none___eH2bc .container-module__content___U-qAz{padding:0}.container-module__padding-sm___mUJyq .container-module__header___EUrkl,.container-module__padding-sm___mUJyq .container-module__footer___TrwGJ{padding:.75rem 1rem}.container-module__padding-sm___mUJyq .container-module__content___U-qAz{padding:1rem}.container-module__padding-md___tOs5h .container-module__header___EUrkl,.container-module__padding-md___tOs5h .container-module__footer___TrwGJ{padding:1rem 1.5rem}.container-module__padding-md___tOs5h .container-module__content___U-qAz{padding:1.5rem}.container-module__padding-lg___-J-K1 .container-module__header___EUrkl,.container-module__padding-lg___-J-K1 .container-module__footer___TrwGJ{padding:1.25rem 2rem}.container-module__padding-lg___-J-K1 .container-module__content___U-qAz{padding:2rem}@media(max-width:768px){.container-module__header___EUrkl{flex-direction:column;gap:1rem}.container-module__headerActions___PZYbZ{width:100%;margin-left:0;justify-content:flex-start}.container-module__padding-md___tOs5h .container-module__content___U-qAz,.container-module__padding-lg___-J-K1 .container-module__content___U-qAz{padding:1rem}}.floating-menu-button-module__floatingButton___aAEgo{position:fixed;bottom:calc(2rem + env(safe-area-inset-bottom,0));right:calc(2rem + env(safe-area-inset-right,0));z-index:998;background:var(--color-primary);color:#fff;border:none;border-radius:50%;width:56px;height:56px;display:flex;align-items:center;justify-content:center;cursor:pointer}@media(min-width:769px){.floating-menu-button-module__floatingButton___aAEgo{display:none}}.styles-module__wrapper___-K643{display:flex;flex-direction:column;gap:.25rem;width:100%}.styles-module__container___rhMhO{position:relative;width:100%;margin-top:.65rem}.styles-module__containerNoLabel___BoOt6{margin-top:0}.styles-module__border___Jsi91{position:relative;display:inline-flex;background:var(--color-surface);border:1.5px solid var(--color-border);border-radius:.5rem;transition:border-color .2s ease;padding-top:.25rem}.styles-module__border___Jsi91:focus-within{border-color:var(--color-accent)}.styles-module__container___rhMhO:focus-within .styles-module__label___gBE41{border-color:var(--color-accent);color:var(--color-accent)}.styles-module__borderError___WH34m{border-color:var(--color-error);background-color:var(--toast-bg-error)}.styles-module__borderDisabled___wc6lw{opacity:.5;filter:grayscale(.3);cursor:not-allowed}.styles-module__border___Jsi91:hover:not(.styles-module__borderDisabled___wc6lw):not(.styles-module__borderError___WH34m){border-color:var(--color-accent)}.styles-module__label___gBE41{position:absolute;top:-.65rem;left:.75rem;background:var(--color-surface);padding:.1rem .6rem;border-radius:999px;font-size:.7rem;font-weight:500;letter-spacing:.03em;border:1.5px solid var(--color-border);color:var(--color-text-secondary);pointer-events:none;transition:border-color .2s ease,color .2s ease;white-space:nowrap;z-index:1}.styles-module__labelFocused___Q36TT{border-color:var(--color-accent);color:var(--color-accent)}.styles-module__labelError___m0PRR{border-color:var(--color-error);color:var(--color-error)}.styles-module__required___dp8xu{color:var(--color-error);margin-left:.25rem}.styles-module__helperText___cA3Se{font-size:.75rem;color:var(--color-text-secondary)}.styles-module__errorText___QZJ5F{font-size:.75rem;color:var(--color-error);margin:0;display:flex;align-items:center;gap:.25rem}.styles-module__errorText___QZJ5F:before{content:"⚠";font-size:1rem}.styles-module__header___XLj-v{color:var(--color-text)}.input-module__inputContainer___ulqhQ{position:relative;width:100%;min-width:250px}.input-module__input___tBoBs{width:100%;padding:.8rem 2.5rem .8rem 1.2rem;font-size:.875rem;color:var(--color-text);background:transparent;border:none;outline:none}.input-module__input___tBoBs::placeholder{color:var(--color-text-secondary);opacity:.6}.input-module__input___tBoBs:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.input-module__clearButton___GmMYO{position:absolute;right:.8rem;top:50%;transform:translateY(-50%);background:transparent;border:none;cursor:pointer;padding:.5rem;display:flex;align-items:center;justify-content:center}.input-module__clearButton___GmMYO:hover{color:var(--color-primary);transform:translateY(-50%) scale(1.1)}.input-module__suggestionsList___ym2TV{position:absolute;top:calc(100% + .5rem);left:0;right:0;background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:.5rem;list-style:none;padding:.4rem;margin:0;z-index:1000;max-height:200px;overflow-y:auto}.input-module__suggestionItem___xtYWE{padding:.6rem 1rem;font-size:.75rem;color:var(--color-text);border-radius:.3rem;cursor:pointer;min-height:44px;display:flex;align-items:center}.input-module__suggestionItem___xtYWE:hover{background-color:var(--color-primary);color:#fff}.input-module__suggestionsList___ym2TV::-webkit-scrollbar{width:4px}.input-module__suggestionsList___ym2TV::-webkit-scrollbar-thumb{background:var(--color-text-secondary);border-radius:10px}@media(max-width:768px){.input-module__input___tBoBs{font-size:16px}}.modal-module__overlay___z2GxJ{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#0009;z-index:9999;display:flex;align-items:center;justify-content:center;padding:1rem}.modal-module__modal___RJmct{background-color:var(--color-surface);border-radius:.75rem;width:100%;max-height:90vh;overflow:hidden}.modal-module__modal___RJmct[data-size=s]{max-width:400px}.modal-module__modal___RJmct[data-size=m]{max-width:600px}.modal-module__modal___RJmct[data-size=l]{max-width:800px}.modal-module__modal___RJmct[data-size=xl]{max-width:1140px}.modal-module__header___KlpKY{display:flex;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-module__close___ELArH{margin-left:auto;background:none;border:none}.modal-module__content___OMS8T{padding:1.5rem;overflow-y:auto;max-height:calc(90vh - 140px)}.modal-module__footer___rF7ly{border-top:1px solid var(--color-border);display:flex;gap:.75rem}@media(max-width:768px){.modal-module__modal___RJmct{width:100%;max-height:90vh;border-radius:1rem 1rem 0 0;margin-top:auto}}.select-module__container___U4BrV{position:relative;width:100%;min-width:250px;outline:none}.select-module__container___U4BrV:focus-within{outline:none}.select-module__hiddenSelect___qRfKA{position:absolute;opacity:0;pointer-events:none;width:0;height:0}.select-module__control___qogxN{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;cursor:pointer;color:var(--color-text)}.select-module__control___qogxN:focus{outline:2px solid var(--color-primary);outline-offset:2px}.select-module__control___qogxN:focus:not(:focus-visible){outline:none}.select-module__disabled___kYpJI{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.select-module__value___sRnlS{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:.5rem}.select-module__placeholder___qhzG5{color:var(--color-text-secondary)}.select-module__arrow___LWj9s{font-size:.75rem;color:var(--color-text-secondary);flex-shrink:0}.select-module__menu___MHmhv{position:absolute;top:calc(100% + .5rem);left:0;right:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:.5rem;z-index:1000;max-height:300px;overflow:hidden}.select-module__searchWrapper___gI2ic{padding:.5rem;border-bottom:1px solid var(--color-border)}.select-module__list___XICSu{max-height:250px;overflow-y:auto;padding:.25rem}.select-module__list___XICSu::-webkit-scrollbar{width:8px}.select-module__list___XICSu::-webkit-scrollbar-track{background:transparent}.select-module__list___XICSu::-webkit-scrollbar-thumb{background:var(--color-text-secondary);border-radius:4px}.select-module__list___XICSu::-webkit-scrollbar-thumb:hover{background:var(--color-primary)}.select-module__item___XHREC{padding:10px;cursor:pointer;border-radius:.375rem;display:flex;align-items:center;gap:.5rem;color:var(--color-text);min-height:44px}.select-module__selected___iSbaR{background:var(--color-primary-dark);color:var(--color-text-on-primary);font-weight:600}.select-module__item___XHREC:hover,.select-module__highlighted___OhCJO:not(.select-module__selected___iSbaR){background:var(--color-secondary);color:var(--color-text-on-secondary)}.select-module__checkbox___dD2H5{font-size:1.25rem;width:1.25rem;height:1.25rem;display:flex;align-items:center;justify-content:center}.select-module__empty___i6OgM{padding:1rem;text-align:center;color:var(--color-text-secondary);font-size:.875rem}@media(max-width:768px){.select-module__menu___MHmhv{max-height:200px}.select-module__list___XICSu{max-height:150px}}.sidenav-module__overlay___QDdKo{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:999}.sidenav-module__sidenav___CnZmU{position:fixed;height:100vh;top:0;background-color:var(--color-surface);display:flex;flex-direction:column;overflow:hidden;z-index:1000}.sidenav-module__sidenav___CnZmU.sidenav-module__left___Qa1xG{left:0;border-right:2px solid var(--color-border)}.sidenav-module__sidenav___CnZmU.sidenav-module__right___4BYR2{right:0;border-left:2px solid var(--color-border)}.sidenav-module__sidenav___CnZmU.sidenav-module__collapsed___jltGX .sidenav-module__header___f3Sc9{justify-content:center}.sidenav-module__sidenav___CnZmU.sidenav-module__collapsed___jltGX .sidenav-module__item___5B09S{justify-content:center;padding:1rem .5rem}.sidenav-module__header___f3Sc9{display:flex;align-items:center;justify-content:flex-end;padding:1.5rem;border-bottom:1px solid var(--color-border);height:4rem}.sidenav-module__toggleButton___8Z7kQ{background:transparent;border:none;cursor:pointer;color:var(--color-text);align-items:center;justify-content:center;border-radius:.5rem;transition:background-color .2s ease}.sidenav-module__items___Az0kh{flex:1;padding:1rem;display:flex;flex-direction:column;gap:.75rem;overflow-y:auto;overflow-x:hidden}.sidenav-module__item___5B09S{display:flex;align-items:center;gap:.75rem;padding:1rem;background:transparent;border:2px solid var(--color-border);border-radius:.5rem;color:var(--color-text);font-size:1rem;font-weight:500;cursor:pointer;text-align:left;white-space:nowrap}.sidenav-module__item___5B09S:hover,.sidenav-module__active___Lo-AM{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.sidenav-module__itemIcon___i6GWq{display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0;width:24px}.sidenav-module__items___Az0kh::-webkit-scrollbar{width:6px}.sidenav-module__items___Az0kh::-webkit-scrollbar-track{background:transparent}.sidenav-module__items___Az0kh::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.sidenav-module__items___Az0kh::-webkit-scrollbar-thumb:hover{background:var(--color-primary)}.stepper-module__container___GYIxN{display:inline-flex;align-items:center;width:8rem}.stepper-module__stepper___44JDp{display:flex;align-items:center;justify-content:center;background:none;color:var(--color-primary);border:none;cursor:pointer;flex-shrink:0;width:2.5rem;height:2.5rem;border-radius:.5rem}.stepper-module__stepper___44JDp:hover:not(:disabled){background-color:var(--color-border);color:var(--color-primary-dark)}.stepper-module__stepper___44JDp:active:not(:disabled){transform:scale(.9)}.stepper-module__stepper___44JDp:disabled{opacity:.3;cursor:not-allowed}.stepper-module__input___9ZI6O{flex:1;min-width:0;text-align:center;border:none!important;background:transparent!important;padding:0!important;font-weight:600;font-size:1rem;color:var(--color-text)}.stepper-module__input___9ZI6O:focus{outline:none}.toast-module__container___7m6vr{position:fixed;z-index:10000;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:.75rem;pointer-events:none;max-width:500px;width:90%;bottom:calc(1rem + env(safe-area-inset-bottom,0))}.toast-module__top___iVpue{top:2rem}.toast-module__bottom___Bt3N0{bottom:2rem}.toast-module__toast___SOSDh{pointer-events:auto;width:100%;padding:1rem 1.25rem;background:var(--toast-bg);border-radius:12px;color:var(--color-text);display:flex;align-items:center;gap:.75rem;position:relative;overflow:hidden;border:2px solid var(--status-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.toast-module__iconWrapper___F-4yg{flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--status-color);display:flex;align-items:center;justify-content:center;margin-left:.5rem}.toast-module__statusIcon___KjJ56{font-size:1.125rem;font-weight:700;color:#fff}.toast-module__content___9ufP5{flex:1;font-size:.9375rem;line-height:1.5}.toast-module__closeButton___eMXm-{flex-shrink:0;background:transparent;border:none;cursor:pointer;color:var(--color-text-secondary);padding:.25rem;display:flex;align-items:center;justify-content:center;border-radius:4px}.toast-module__closeButton___eMXm-:hover{background:#0000001a;color:var(--color-text)}.toast-module__success___FYQI3{--status-color: var(--color-success);--toast-bg: var(--toast-bg-success)}.toast-module__warning___2XrO1{--status-color: var(--color-warning);--toast-bg: var(--toast-bg-warning)}.toast-module__error___v44fd{--status-color: var(--color-error);--toast-bg: var(--toast-bg-error)}.toast-module__info___tOY3D{--status-color: var(--color-info);--toast-bg: var(--toast-bg-info)}@media(prefers-color-scheme:dark){.toast-module__closeButton___eMXm-:hover{background:#ffffff1a}}@media(max-width:768px){.toast-module__container___7m6vr{width:calc(100% - 2rem)}.toast-module__toast___SOSDh{padding:.875rem 1rem}}.toggle-module__wrapper___xb91q{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem 0;width:100%}.toggle-module__label___8-AlI{font-size:.875rem;font-weight:500;color:var(--color-text)}.toggle-module__switch___9e0np{position:relative;flex-shrink:0;width:3rem;height:1.5rem;background-color:var(--color-disabled);display:flex;align-items:center;border-radius:100px;padding:3px;cursor:pointer;border:2px solid var(--color-border);transition:background-color .3s ease;outline:none}.toggle-module__switch___9e0np.toggle-module__enabled___3jPo5{background-color:var(--color-primary)}.toggle-module__switch___9e0np.toggle-module__enabled___3jPo5 .toggle-module__handle___fiWwj{margin-left:auto}.toggle-module__handle___fiWwj{width:1rem;height:1rem;background-color:var(--color-surface);border-radius:50%}.toggle-module__switch___9e0np:hover:not(:disabled){border-color:var(--color-accent)}.toggle-module__switch___9e0np:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.topnav-module__topnavContainer___TXXB4{position:sticky;width:100%;background-color:var(--color-surface);border-bottom:1px solid var(--color-border);z-index:100;display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;gap:1rem;max-height:60px;top:env(safe-area-inset-top,0);padding-left:env(safe-area-inset-left,1rem);padding-right:env(safe-area-inset-right,1rem)}.topnav-module__topRow___s-Ohm,.topnav-module__header___r3Y52{display:flex;align-items:center;gap:.75rem}.topnav-module__header___r3Y52 h1{font-size:1.25rem;margin:0;white-space:nowrap}.topnav-module__collapsibleContent___oulCx{display:flex;align-items:center;gap:1rem;margin-left:auto}.topnav-module__searchWrapper___Rdox0{display:none}.topnav-module__themeWrapper___gx0Yd{display:flex;align-items:center}@media(min-width:769px){.topnav-module__topnavContainer___TXXB4{padding:0 2rem;min-height:4rem;gap:2rem}.topnav-module__header___r3Y52 h1{font-size:1.5rem}.topnav-module__searchWrapper___Rdox0{display:flex;flex:1;max-width:450px}.topnav-module__collapsibleContent___oulCx{flex:1;justify-content:flex-end;gap:2rem}}.viewer-module__thumbnailWrapper___iV-AM{position:relative;width:var(--thumbnail-size, 300px);max-width:100%;height:auto;display:inline-block}.viewer-module__thumbnail___pk9Jf{width:100%;height:auto;border-radius:.5rem;object-fit:cover;display:block;cursor:zoom-in}.viewer-module__hoverOverlay___k04ev{position:absolute;top:0;left:0;right:0;bottom:0;background:#00000080;border-radius:.5rem;display:flex;align-items:center;justify-content:center;pointer-events:none}.viewer-module__expandIcon___xm6pk{font-size:3rem;filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.viewer-module__skeleton___h3Hzv{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;border-radius:.5rem;cursor:default;background:linear-gradient(90deg,var(--color-border) 0%,var(--color-surface) 50%,var(--color-border) 100%);background-size:200% 100%;animation:viewer-module__shimmer___Lapfq 1.5s ease-in-out infinite}.viewer-module__skeleton___h3Hzv:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0000001a;pointer-events:none}@keyframes viewer-module__shimmer___Lapfq{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-color-scheme:dark){.viewer-module__skeleton___h3Hzv{background-color:#ffffff0d}.viewer-module__skeleton___h3Hzv:after{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1),transparent 100%)}}.viewer-module__errorState___gXQxU{width:var(--thumbnail-size);height:250px;border-radius:.5rem;background-color:var(--color-surface);border:2px dashed var(--color-text-secondary);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}.viewer-module__errorIcon___-qPTV{font-size:2rem}.viewer-module__errorText___UT4dg{color:var(--color-text-secondary);font-size:.875rem;margin:0}.viewer-module__retryButton___L-B3U{margin-top:.5rem;padding:.5rem 1rem;background:var(--color-primary);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:.875rem}.viewer-module__retryButton___L-B3U:hover{background:var(--color-primary-dark);transform:translateY(-1px)}.viewer-module__lightboxOverlay___jP4rl{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:2rem}.viewer-module__closeButton___0rBK1{position:absolute;top:1rem;right:1rem;width:48px;height:48px;border:none;background-color:#ffffff1a;border-radius:50%;cursor:pointer;font-size:24px;color:#fff;z-index:10000;transition:background-color .2s ease;display:flex;align-items:center;justify-content:center}.viewer-module__closeButton___0rBK1:hover{background-color:#fff3}.viewer-module__lightboxContent___i-2FK{max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center;gap:1rem}.viewer-module__lightboxMedia___ZBgR-{max-width:100%;max-height:80vh;width:auto;height:auto;border-radius:8px}@media(max-width:768px){.viewer-module__lightboxOverlay___jP4rl{padding:1rem}.viewer-module__closeButton___0rBK1{top:.5rem;right:.5rem;width:40px;height:40px;font-size:20px}.viewer-module__lightboxMedia___ZBgR-{max-height:70vh}}
1
+ .accordion-module__container___M1a4P{width:100%;border:2px solid var(--color-border);border-radius:.5rem;overflow:hidden;align-self:flex-start}.accordion-module__accordion___C0eUc{width:100%;background-color:var(--color-surface);color:#fff;cursor:pointer;display:flex;flex-direction:row;padding:1rem;text-align:left;align-items:center;border:none}.accordion-module__header___NFLuh{font-size:medium;font-weight:600;color:var(--color-text)}.accordion-module__icon___Mjff1{margin-left:auto;color:var(--color-text)}.accordion-module__content___18iAN{position:relative;background-color:var(--color-surface);transition:max-height .2s ease-out;max-height:0}.accordion-module__content___18iAN.accordion-module__open___acchR{padding:1rem;max-height:500px}.accordion-module__container___M1a4P:hover:not(:has(.accordion-module__content___18iAN.accordion-module__open___acchR)){border-color:var(--color-primary)}.action-sheet-module__backdrop___E-oM5{position:fixed;top:0;right:0;bottom:0;left:0;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:9998}.action-sheet-module__sheet___zFFdl{position:fixed;bottom:0;left:0;right:0;background:var(--color-surface);border-radius:1rem 1rem 0 0;z-index:9999;max-height:80vh;display:flex;flex-direction:column;padding-bottom:calc(1rem + env(safe-area-inset-bottom,0))}.action-sheet-module__handle___1dYRp{display:flex;justify-content:center;padding:.75rem}.action-sheet-module__handleBar___3lmQ1{width:36px;height:4px;background:var(--color-border);border-radius:2px}.action-sheet-module__header___oMW-U{padding:1rem 1.5rem;text-align:center;border-bottom:1px solid var(--color-border)}.action-sheet-module__title___k5RM2{font-size:1.125rem;font-weight:600;color:var(--color-text);margin:0 0 .25rem}.action-sheet-module__message___jsCQT{font-size:.875rem;color:var(--color-text-secondary);margin:0}.action-sheet-module__actions___vgr-N{overflow-y:auto;max-height:60vh}.action-sheet-module__action___kV71S{display:flex;align-items:center;gap:1rem;width:100%;padding:1rem 1.5rem;background:transparent;border:none;border-bottom:1px solid var(--color-border);color:var(--color-text);font-size:1rem;cursor:pointer;transition:background-color .15s;min-height:56px}.action-sheet-module__action___kV71S:active{background-color:#0000000d}.action-sheet-module__action___kV71S:disabled{opacity:.5;cursor:not-allowed}.action-sheet-module__action___kV71S.action-sheet-module__destructive___N5M9i{color:var(--color-error)}.action-sheet-module__actionIcon___MXc9U{font-size:1.5rem;width:28px;display:flex;align-items:center;justify-content:center}.action-sheet-module__actionLabel___dPWqE{flex:1;text-align:left}.action-sheet-module__cancel___Oncun{width:100%;padding:1rem;background:var(--color-surface);border:none;color:var(--color-primary);font-size:1rem;font-weight:600;cursor:pointer;margin-top:.5rem}.action-sheet-module__cancel___Oncun:active{opacity:.7}.alert-module__alert___phXsH{pointer-events:auto;width:100%;padding:1rem 1.25rem;background:var(--toast-bg);border-radius:12px;color:var(--color-text);display:flex;align-items:center;gap:.75rem;position:relative;overflow:hidden;border:2px solid var(--status-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.alert-module__iconWrapper___5mthT{flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--status-color);display:flex;align-items:center;justify-content:center;margin-left:.5rem}.alert-module__statusIcon___Tyvx3{color:#fff}.alert-module__content___IvPaU{flex:1;font-size:.9375rem;line-height:1.5}.alert-module__success___lM3GI{--status-color: var(--color-success);--toast-bg: var(--toast-bg-success)}.alert-module__warning___DfOAf{--status-color: var(--color-warning);--toast-bg: var(--toast-bg-warning)}.alert-module__error___9GnhN{--status-color: var(--color-error);--toast-bg: var(--toast-bg-error)}.alert-module__info___SotSQ{--status-color: var(--color-info);--toast-bg: var(--toast-bg-info)}@media(max-width:768px){.alert-module__container___SGTJP{width:calc(100% - 2rem)}.alert-module__alert___phXsH{padding:.875rem 1rem}}.applayout-module__layout___d2c6J{position:relative;display:flex;min-height:100vh;background-color:var(--color-background)}.applayout-module__mainArea___Q4Yhu{flex:1;min-height:100vh;display:flex;flex-direction:column;min-width:0}.applayout-module__content___lok2L{flex:1;padding:2rem;max-width:1400px}@media(max-width:768px){.applayout-module__mainArea___Q4Yhu{margin-left:0!important}.applayout-module__content___lok2L{padding:1rem}}.box-module__box___FP5Js{display:flex;width:100%;gap:1rem}.box-module__box___FP5Js[data-direction=vertical]{flex-direction:column}.box-module__box___FP5Js[data-direction=vertical][data-position=left]{align-items:flex-start}.box-module__box___FP5Js[data-direction=vertical][data-position=center]{align-items:center}.box-module__box___FP5Js[data-direction=vertical][data-position=right]{align-items:flex-end}.box-module__box___FP5Js[data-direction=horizontal]{flex-direction:row;align-items:center}.box-module__box___FP5Js[data-direction=horizontal][data-position=left]{justify-content:flex-start}.box-module__box___FP5Js[data-direction=horizontal][data-position=center]{justify-content:center}.box-module__box___FP5Js[data-direction=horizontal][data-position=right]{justify-content:flex-end}.tooltip-module__triggerWrapper___mvvzS{display:inline-block;width:fit-content;text-decoration:underline dashed var(--color-accent)}.tooltip-module__tooltip___mEmui{position:fixed;left:var(--tooltip-x, 0);top:var(--tooltip-y, 0);padding:8px 12px;border-radius:4px;font-size:14px;z-index:1000;background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-dark) 100%);color:var(--color-text);pointer-events:none;white-space:nowrap;display:flex;flex-direction:column;align-items:center;will-change:transform}.tooltip-module__arrow___Kjrs-{position:absolute;width:0;height:0;border-style:solid;border-width:6px}.tooltip-module__tooltip___mEmui[data-position=top] .tooltip-module__arrow___Kjrs-{top:100%;border-color:var(--color-primary) transparent transparent transparent}.tooltip-module__tooltip___mEmui[data-position=bottom] .tooltip-module__arrow___Kjrs-{bottom:100%;border-color:transparent transparent var(--color-primary) transparent}.tooltip-module__tooltip___mEmui[data-position=left] .tooltip-module__arrow___Kjrs-{left:100%;border-color:transparent transparent transparent var(--color-primary)}.tooltip-module__tooltip___mEmui[data-position=right] .tooltip-module__arrow___Kjrs-{right:100%;border-color:transparent var(--color-primary) transparent transparent}.button-module__button___JyfZW{border:none;border-radius:.75rem;padding:.75rem 1.5rem;font-size:1rem;font-weight:600;cursor:pointer;color:var(--color-text)}.button-module__button___JyfZW:active{opacity:.8}.button-module__button___JyfZW:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.button-module__button___JyfZW:focus-visible{outline:2px solid var(--color-accent)}.button-module__primary___ggjlO{background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-dark) 100%);color:var(--color-text-on-primary)}.button-module__secondary___Q4I1z{background:linear-gradient(135deg,var(--color-secondary) 0%,var(--color-secondary-dark) 100%);color:var(--color-text-on-secondary)}.button-module__icon___zcUnX{padding:.75rem;border-radius:.5rem;background:transparent;object-fit:cover}.button-module__primary___ggjlO:hover:not(:disabled),.button-module__secondary___Q4I1z:hover:not(:disabled),.button-module__icon___zcUnX:hover:not(:disabled){outline:2px solid var(--color-accent)}.checkbox-module__container___26-ah{display:inline-flex;align-items:center}.checkbox-module__hiddenInput___X-HH-{position:absolute;opacity:0;width:0;height:0}.checkbox-module__label___dV34E{display:flex;align-items:center;gap:.75rem;cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox-module__box___UQZjc{width:20px;height:20px;border:2px solid var(--color-border);border-radius:.25rem;display:flex;align-items:center;justify-content:center;flex-shrink:0}.checkbox-module__box___UQZjc:hover{border-color:var(--color-primary)}.checkbox-module__checked___mqwdo{background-color:var(--color-primary);border-color:var(--color-primary)}.checkbox-module__labelText___ORrnL{color:var(--color-text);font-size:.9375rem}.checkbox-module__disabled___E2BaQ{opacity:.5;pointer-events:none}.checkbox-module__disabled___E2BaQ .checkbox-module__label___dV34E{cursor:not-allowed}.container-module__container___g2I0w{display:flex;flex-direction:column;background:var(--color-surface);border-radius:.75rem;overflow:visible;min-width:0;width:fit-content}.container-module__fullWidth___C7E9O{width:100%}.container-module__default___VLaR3{border:1px solid var(--color-border)}.container-module__outlined___V7eh0{border:2px solid var(--color-border)}.container-module__elevated___TdnlI{border:1px solid var(--color-border);box-shadow:var(--shadow-md)}.container-module__flat___VVl-e{background:transparent;border:none}.container-module__header___EUrkl{display:flex;align-items:center;border-bottom:1px solid var(--color-border);background:var(--color-background);gap:1rem}.container-module__headerContent___E9O0H{flex:1}.container-module__headerActions___PZYbZ{display:flex;align-items:center;gap:.5rem;margin-left:auto;flex-shrink:0}.container-module__content___U-qAz{flex:1;overflow:auto}.container-module__footer___TrwGJ{display:flex;justify-content:flex-end;align-items:center;gap:.75rem;border-top:1px solid var(--color-border);background:var(--color-background)}.container-module__padding-none___eH2bc .container-module__header___EUrkl,.container-module__padding-none___eH2bc .container-module__footer___TrwGJ{padding:.75rem 0}.container-module__padding-none___eH2bc .container-module__content___U-qAz{padding:0}.container-module__padding-sm___mUJyq .container-module__header___EUrkl,.container-module__padding-sm___mUJyq .container-module__footer___TrwGJ{padding:.75rem 1rem}.container-module__padding-sm___mUJyq .container-module__content___U-qAz{padding:1rem}.container-module__padding-md___tOs5h .container-module__header___EUrkl,.container-module__padding-md___tOs5h .container-module__footer___TrwGJ{padding:1rem 1.5rem}.container-module__padding-md___tOs5h .container-module__content___U-qAz{padding:1.5rem}.container-module__padding-lg___-J-K1 .container-module__header___EUrkl,.container-module__padding-lg___-J-K1 .container-module__footer___TrwGJ{padding:1.25rem 2rem}.container-module__padding-lg___-J-K1 .container-module__content___U-qAz{padding:2rem}@media(max-width:768px){.container-module__header___EUrkl{flex-direction:column;gap:1rem}.container-module__headerActions___PZYbZ{width:100%;margin-left:0;justify-content:flex-start}.container-module__padding-md___tOs5h .container-module__content___U-qAz,.container-module__padding-lg___-J-K1 .container-module__content___U-qAz{padding:1rem}}.floating-menu-button-module__floatingButton___aAEgo{position:fixed;bottom:calc(2rem + env(safe-area-inset-bottom,0));right:calc(2rem + env(safe-area-inset-right,0));z-index:998;background:var(--color-primary);color:#fff;border:none;border-radius:50%;width:56px;height:56px;display:flex;align-items:center;justify-content:center;cursor:pointer}@media(min-width:769px){.floating-menu-button-module__floatingButton___aAEgo{display:none}}.styles-module__wrapper___-K643{display:flex;flex-direction:column;gap:.25rem;width:100%}.styles-module__container___rhMhO{position:relative;width:100%;margin-top:.65rem}.styles-module__containerNoLabel___BoOt6{margin-top:0}.styles-module__border___Jsi91{position:relative;display:inline-flex;background:var(--color-surface);border:1.5px solid var(--color-border);border-radius:.5rem;transition:border-color .2s ease;padding-top:.25rem}.styles-module__border___Jsi91:focus-within{border-color:var(--color-accent)}.styles-module__container___rhMhO:focus-within .styles-module__label___gBE41{border-color:var(--color-accent);color:var(--color-accent)}.styles-module__borderError___WH34m{border-color:var(--color-error);background-color:var(--toast-bg-error)}.styles-module__borderDisabled___wc6lw{opacity:.5;filter:grayscale(.3);cursor:not-allowed}.styles-module__border___Jsi91:hover:not(.styles-module__borderDisabled___wc6lw):not(.styles-module__borderError___WH34m){border-color:var(--color-accent)}.styles-module__label___gBE41{position:absolute;top:-.65rem;left:.75rem;background:var(--color-surface);padding:.1rem .6rem;border-radius:999px;font-size:.7rem;font-weight:500;letter-spacing:.03em;border:1.5px solid var(--color-border);color:var(--color-text-secondary);pointer-events:none;transition:border-color .2s ease,color .2s ease;white-space:nowrap;z-index:1}.styles-module__labelFocused___Q36TT{border-color:var(--color-accent);color:var(--color-accent)}.styles-module__labelError___m0PRR{border-color:var(--color-error);color:var(--color-error)}.styles-module__required___dp8xu{color:var(--color-error);margin-left:.25rem}.styles-module__helperText___cA3Se{font-size:.75rem;color:var(--color-text-secondary)}.styles-module__errorText___QZJ5F{font-size:.75rem;color:var(--color-error);margin:0;display:flex;align-items:center;gap:.25rem}.styles-module__errorText___QZJ5F:before{content:"⚠";font-size:1rem}.styles-module__header___XLj-v{color:var(--color-text)}.input-module__inputContainer___ulqhQ{position:relative;width:100%;min-width:250px}.input-module__input___tBoBs{width:100%;padding:.8rem 2.5rem .8rem 1.2rem;font-size:.875rem;color:var(--color-text);background:transparent;border:none;outline:none}.input-module__input___tBoBs::placeholder{color:var(--color-text-secondary);opacity:.6}.input-module__input___tBoBs:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.input-module__clearButton___GmMYO{position:absolute;right:.8rem;top:50%;transform:translateY(-50%);background:transparent;border:none;cursor:pointer;padding:.5rem;display:flex;align-items:center;justify-content:center}.input-module__clearButton___GmMYO:hover{color:var(--color-primary);transform:translateY(-50%) scale(1.1)}.input-module__suggestionsList___ym2TV{position:absolute;top:calc(100% + .5rem);left:0;right:0;background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:.5rem;list-style:none;padding:.4rem;margin:0;z-index:1000;max-height:200px;overflow-y:auto}.input-module__suggestionItem___xtYWE{padding:.6rem 1rem;font-size:.75rem;color:var(--color-text);border-radius:.3rem;cursor:pointer;min-height:44px;display:flex;align-items:center}.input-module__suggestionItem___xtYWE:hover{background-color:var(--color-primary);color:#fff}.input-module__suggestionsList___ym2TV::-webkit-scrollbar{width:4px}.input-module__suggestionsList___ym2TV::-webkit-scrollbar-thumb{background:var(--color-text-secondary);border-radius:10px}@media(max-width:768px){.input-module__input___tBoBs{font-size:16px}}.modal-module__overlay___z2GxJ{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#0009;z-index:9999;display:flex;align-items:center;justify-content:center;padding:1rem}.modal-module__modal___RJmct{background-color:var(--color-surface);border-radius:.75rem;width:100%;max-height:90vh;overflow:hidden}.modal-module__modal___RJmct[data-size=s]{max-width:400px}.modal-module__modal___RJmct[data-size=m]{max-width:600px}.modal-module__modal___RJmct[data-size=l]{max-width:800px}.modal-module__modal___RJmct[data-size=xl]{max-width:1140px}.modal-module__header___KlpKY{display:flex;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-module__close___ELArH{margin-left:auto;background:none;border:none}.modal-module__content___OMS8T{padding:1.5rem;overflow-y:auto;max-height:calc(90vh - 140px)}.modal-module__footer___rF7ly{border-top:1px solid var(--color-border);display:flex;gap:.75rem}@media(max-width:768px){.modal-module__modal___RJmct{width:100%;max-height:90vh;border-radius:1rem 1rem 0 0;margin-top:auto}}.select-module__container___U4BrV{position:relative;width:100%;min-width:250px;outline:none}.select-module__container___U4BrV:focus-within{outline:none}.select-module__hiddenSelect___qRfKA{position:absolute;opacity:0;pointer-events:none;width:0;height:0}.select-module__control___qogxN{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;cursor:pointer;color:var(--color-text)}.select-module__control___qogxN:focus{outline:2px solid var(--color-primary);outline-offset:2px}.select-module__control___qogxN:focus:not(:focus-visible){outline:none}.select-module__disabled___kYpJI{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.select-module__value___sRnlS{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-right:.5rem}.select-module__placeholder___qhzG5{color:var(--color-text-secondary)}.select-module__arrow___LWj9s{font-size:.75rem;color:var(--color-text-secondary);flex-shrink:0}.select-module__menu___MHmhv{position:absolute;top:calc(100% + .5rem);left:0;right:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:.5rem;z-index:1000;max-height:300px;overflow:hidden}.select-module__searchWrapper___gI2ic{padding:.5rem;border-bottom:1px solid var(--color-border)}.select-module__list___XICSu{max-height:250px;overflow-y:auto;padding:.25rem}.select-module__list___XICSu::-webkit-scrollbar{width:8px}.select-module__list___XICSu::-webkit-scrollbar-track{background:transparent}.select-module__list___XICSu::-webkit-scrollbar-thumb{background:var(--color-text-secondary);border-radius:4px}.select-module__list___XICSu::-webkit-scrollbar-thumb:hover{background:var(--color-primary)}.select-module__item___XHREC{padding:10px;cursor:pointer;border-radius:.375rem;display:flex;align-items:center;gap:.5rem;color:var(--color-text);min-height:44px}.select-module__selected___iSbaR{background:var(--color-primary-dark);color:var(--color-text-on-primary);font-weight:600}.select-module__item___XHREC:hover,.select-module__highlighted___OhCJO:not(.select-module__selected___iSbaR){background:var(--color-secondary);color:var(--color-text-on-secondary)}.select-module__checkbox___dD2H5{font-size:1.25rem;width:1.25rem;height:1.25rem;display:flex;align-items:center;justify-content:center}.select-module__empty___i6OgM{padding:1rem;text-align:center;color:var(--color-text-secondary);font-size:.875rem}@media(max-width:768px){.select-module__menu___MHmhv{max-height:200px}.select-module__list___XICSu{max-height:150px}}.sidenav-module__overlay___QDdKo{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:999}.sidenav-module__sidenav___CnZmU{position:fixed;height:100vh;top:0;background-color:var(--color-surface);display:flex;flex-direction:column;overflow:hidden;z-index:1000}.sidenav-module__sidenav___CnZmU.sidenav-module__left___Qa1xG{left:0;border-right:2px solid var(--color-border)}.sidenav-module__sidenav___CnZmU.sidenav-module__right___4BYR2{right:0;border-left:2px solid var(--color-border)}.sidenav-module__sidenav___CnZmU.sidenav-module__collapsed___jltGX .sidenav-module__header___f3Sc9{justify-content:center}.sidenav-module__sidenav___CnZmU.sidenav-module__collapsed___jltGX .sidenav-module__item___5B09S{justify-content:center;padding:1rem .5rem}.sidenav-module__header___f3Sc9{display:flex;align-items:center;justify-content:flex-end;padding:1.5rem;border-bottom:1px solid var(--color-border);height:4rem}.sidenav-module__toggleButton___8Z7kQ{background:transparent;border:none;cursor:pointer;color:var(--color-text);align-items:center;justify-content:center;border-radius:.5rem;transition:background-color .2s ease}.sidenav-module__items___Az0kh{flex:1;padding:1rem;display:flex;flex-direction:column;gap:.75rem;overflow-y:auto;overflow-x:hidden}.sidenav-module__item___5B09S{display:flex;align-items:center;gap:.75rem;padding:1rem;background:transparent;border:2px solid var(--color-border);border-radius:.5rem;color:var(--color-text);font-size:1rem;font-weight:500;cursor:pointer;text-align:left;white-space:nowrap}.sidenav-module__item___5B09S:hover,.sidenav-module__active___Lo-AM{background-color:var(--color-primary);border-color:var(--color-primary);color:#fff}.sidenav-module__itemIcon___i6GWq{display:flex;align-items:center;justify-content:center;font-size:1.25rem;flex-shrink:0;width:24px}.sidenav-module__items___Az0kh::-webkit-scrollbar{width:6px}.sidenav-module__items___Az0kh::-webkit-scrollbar-track{background:transparent}.sidenav-module__items___Az0kh::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.sidenav-module__items___Az0kh::-webkit-scrollbar-thumb:hover{background:var(--color-primary)}.stepper-module__container___GYIxN{display:inline-flex;align-items:center;width:8rem}.stepper-module__stepper___44JDp{display:flex;align-items:center;justify-content:center;background:none;color:var(--color-primary);border:none;cursor:pointer;flex-shrink:0;width:2.5rem;height:2.5rem;border-radius:.5rem}.stepper-module__stepper___44JDp:hover:not(:disabled){background-color:var(--color-border);color:var(--color-primary-dark)}.stepper-module__stepper___44JDp:active:not(:disabled){transform:scale(.9)}.stepper-module__stepper___44JDp:disabled{opacity:.3;cursor:not-allowed}.stepper-module__input___9ZI6O{flex:1;min-width:0;text-align:center;border:none!important;background:transparent!important;padding:0!important;font-weight:600;font-size:1rem;color:var(--color-text)}.stepper-module__input___9ZI6O:focus{outline:none}.toast-module__container___7m6vr{position:fixed;z-index:10000;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:.75rem;pointer-events:none;max-width:500px;width:90%;bottom:calc(1rem + env(safe-area-inset-bottom,0))}.toast-module__top___iVpue{top:2rem}.toast-module__bottom___Bt3N0{bottom:2rem}.toast-module__toast___SOSDh{pointer-events:auto;width:100%;padding:1rem 1.25rem;background:var(--toast-bg);border-radius:12px;color:var(--color-text);display:flex;align-items:center;gap:.75rem;position:relative;overflow:hidden;border:2px solid var(--status-color);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.toast-module__iconWrapper___F-4yg{flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--status-color);display:flex;align-items:center;justify-content:center;margin-left:.5rem}.toast-module__statusIcon___KjJ56{font-size:1.125rem;font-weight:700;color:#fff}.toast-module__content___9ufP5{flex:1;font-size:.9375rem;line-height:1.5}.toast-module__closeButton___eMXm-{flex-shrink:0;background:transparent;border:none;cursor:pointer;color:var(--color-text-secondary);padding:.25rem;display:flex;align-items:center;justify-content:center;border-radius:4px}.toast-module__closeButton___eMXm-:hover{background:#0000001a;color:var(--color-text)}.toast-module__success___FYQI3{--status-color: var(--color-success);--toast-bg: var(--toast-bg-success)}.toast-module__warning___2XrO1{--status-color: var(--color-warning);--toast-bg: var(--toast-bg-warning)}.toast-module__error___v44fd{--status-color: var(--color-error);--toast-bg: var(--toast-bg-error)}.toast-module__info___tOY3D{--status-color: var(--color-info);--toast-bg: var(--toast-bg-info)}@media(prefers-color-scheme:dark){.toast-module__closeButton___eMXm-:hover{background:#ffffff1a}}@media(max-width:768px){.toast-module__container___7m6vr{width:calc(100% - 2rem)}.toast-module__toast___SOSDh{padding:.875rem 1rem}}.toggle-module__wrapper___xb91q{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.25rem 0;width:100%}.toggle-module__label___8-AlI{font-size:.875rem;font-weight:500;color:var(--color-text)}.toggle-module__switch___9e0np{position:relative;flex-shrink:0;width:3rem;height:1.5rem;background-color:var(--color-disabled);display:flex;align-items:center;border-radius:100px;padding:3px;cursor:pointer;border:2px solid var(--color-border);transition:background-color .3s ease;outline:none}.toggle-module__switch___9e0np.toggle-module__enabled___3jPo5{background-color:var(--color-primary)}.toggle-module__switch___9e0np.toggle-module__enabled___3jPo5 .toggle-module__handle___fiWwj{margin-left:auto}.toggle-module__handle___fiWwj{width:1rem;height:1rem;background-color:var(--color-surface);border-radius:50%}.toggle-module__switch___9e0np:hover:not(:disabled){border-color:var(--color-accent)}.toggle-module__switch___9e0np:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.topnav-module__topnavContainer___TXXB4{position:sticky;width:100%;background-color:var(--color-surface);border-bottom:1px solid var(--color-border);z-index:100;display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;gap:1rem;max-height:60px;top:env(safe-area-inset-top,0);padding-left:env(safe-area-inset-left,1rem);padding-right:env(safe-area-inset-right,1rem)}.topnav-module__topRow___s-Ohm,.topnav-module__header___r3Y52{display:flex;align-items:center;gap:.75rem}.topnav-module__header___r3Y52 h1{font-size:1.25rem;margin:0;white-space:nowrap}.topnav-module__collapsibleContent___oulCx{display:flex;align-items:center;gap:1rem;margin-left:auto}.topnav-module__searchWrapper___Rdox0{display:none}.topnav-module__themeWrapper___gx0Yd{display:flex;align-items:center}@media(min-width:769px){.topnav-module__topnavContainer___TXXB4{padding:0 2rem;min-height:4rem;gap:2rem}.topnav-module__header___r3Y52 h1{font-size:1.5rem}.topnav-module__searchWrapper___Rdox0{display:flex;flex:1;max-width:450px}.topnav-module__collapsibleContent___oulCx{flex:1;justify-content:flex-end;gap:2rem}}.viewer-module__thumbnailWrapper___iV-AM{position:relative;width:var(--thumbnail-size, 300px);max-width:100%;height:auto;display:inline-block}.viewer-module__thumbnail___pk9Jf{width:100%;height:auto;border-radius:.5rem;object-fit:cover;display:block;cursor:zoom-in}.viewer-module__hoverOverlay___k04ev{position:absolute;top:0;left:0;right:0;bottom:0;background:#00000080;border-radius:.5rem;display:flex;align-items:center;justify-content:center;pointer-events:none}.viewer-module__expandIcon___xm6pk{font-size:3rem;filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.viewer-module__skeleton___h3Hzv{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;border-radius:.5rem;cursor:default;background:linear-gradient(90deg,var(--color-border) 0%,var(--color-surface) 50%,var(--color-border) 100%);background-size:200% 100%;animation:viewer-module__shimmer___Lapfq 1.5s ease-in-out infinite}.viewer-module__skeleton___h3Hzv:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0000001a;pointer-events:none}@keyframes viewer-module__shimmer___Lapfq{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-color-scheme:dark){.viewer-module__skeleton___h3Hzv{background-color:#ffffff0d}.viewer-module__skeleton___h3Hzv:after{background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1),transparent 100%)}}.viewer-module__errorState___gXQxU{width:var(--thumbnail-size);height:250px;border-radius:.5rem;background-color:var(--color-surface);border:2px dashed var(--color-text-secondary);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}.viewer-module__errorIcon___-qPTV{font-size:2rem}.viewer-module__errorText___UT4dg{color:var(--color-text-secondary);font-size:.875rem;margin:0}.viewer-module__retryButton___L-B3U{margin-top:.5rem;padding:.5rem 1rem;background:var(--color-primary);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:.875rem}.viewer-module__retryButton___L-B3U:hover{background:var(--color-primary-dark);transform:translateY(-1px)}.viewer-module__lightboxOverlay___jP4rl{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:2rem}.viewer-module__closeButton___0rBK1{position:absolute;top:1rem;right:1rem;width:48px;height:48px;border:none;background-color:#ffffff1a;border-radius:50%;cursor:pointer;font-size:24px;color:#fff;z-index:10000;transition:background-color .2s ease;display:flex;align-items:center;justify-content:center}.viewer-module__closeButton___0rBK1:hover{background-color:#fff3}.viewer-module__lightboxContent___i-2FK{max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center;gap:1rem}.viewer-module__lightboxMedia___ZBgR-{max-width:100%;max-height:80vh;width:auto;height:auto;border-radius:8px}@media(max-width:768px){.viewer-module__lightboxOverlay___jP4rl{padding:1rem}.viewer-module__closeButton___0rBK1{top:.5rem;right:.5rem;width:40px;height:40px;font-size:20px}.viewer-module__lightboxMedia___ZBgR-{max-height:70vh}}:root{--color-primary: #1A6B7A;--color-primary-dark: #0F4F5C;--color-secondary: #7A4A1E;--color-secondary-dark: #5C3412;--color-accent: #C2185B;--color-background: #F0F4F7;--color-surface: #FFFFFF;--color-surface-elevated: #E8EEF3;--color-text: #0F1E2E;--color-text-secondary: #3D5166;--color-text-on-primary: #FFFFFF;--color-text-on-secondary: #FFFFFF;--color-text-on-accent: #FFFFFF;--color-disabled: #9CA3AF;--color-border: rgba(0, 0, 0, .12);--shadow-sm: 0 2px 8px rgba(26, 107, 122, .12);--shadow-md: 0 4px 12px rgba(26, 107, 122, .2);--shadow-lg: 0 8px 24px rgba(26, 107, 122, .28);--color-success: #1B5E45;--color-warning: #B45309;--color-error: #B91C1C;--color-info: #1A5276;--toast-bg-success: rgba(27, 94, 69, .1);--toast-bg-warning: rgba(180, 83, 9, .1);--toast-bg-error: rgba(185, 28, 28, .1);--toast-bg-info: rgba(26, 82, 118, .1)}.dark{--color-primary: #FF8B66;--color-primary-dark: #FF6E40;--color-secondary: #FF3DDB;--color-secondary-dark: #D600B3;--color-accent: #00E5FF;--color-background: #050508;--color-surface: #0D0D14;--color-surface-elevated: #141420;--color-text: #F0F6FF;--color-text-secondary: #9BAAB8;--color-disabled: #4A5568;--color-border: rgba(255, 255, 255, .25);--color-text-on-primary: #FFFFFF;--color-text-on-secondary: #FFFFFF;--color-text-on-accent: #FFFFFF;--shadow-sm: 0 2px 8px rgba(255, 110, 64, .25);--shadow-md: 0 4px 16px rgba(255, 110, 64, .35);--shadow-lg: 0 8px 32px rgba(255, 110, 64, .45);--color-success: #34D399;--color-warning: #FBBF24;--color-error: #F87171;--color-info: #60A5FA;--toast-bg-success: rgba(52, 211, 153, .12);--toast-bg-warning: rgba(251, 191, 36, .12);--toast-bg-error: rgba(248, 113, 113, .12);--toast-bg-info: rgba(96, 165, 250, .12)}@media(prefers-color-scheme:dark){:root:not(.light):not(.dark){--color-primary: #FF8B66;--color-primary-dark: #FF6E40;--color-secondary: #FFB84D;--color-secondary-dark: #FF8C42;--color-accent: #00E5FF;--color-background: #0A0118;--color-surface: #1F0F3D;--color-surface-elevated: #2A1850;--color-text: #E8F4FD;--color-text-secondary: #B0BEC5;--color-disabled: #6B7280;--color-border: rgba(255, 255, 255, .15);--shadow-sm: 0 2px 8px rgba(255, 110, 64, .2);--shadow-md: 0 4px 12px rgba(255, 110, 64, .3);--shadow-lg: 0 8px 24px rgba(255, 110, 64, .4);--color-success: #34D399;--color-warning: #FBBF24;--color-error: #F87171;--color-info: #60A5FA;--toast-bg-success: rgba(52, 211, 153, .15);--toast-bg-warning: rgba(251, 191, 36, .15);--toast-bg-error: rgba(248, 113, 113, .15);--toast-bg-info: rgba(96, 165, 250, .15)}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background-color:var(--color-background);color:var(--color-text);transition:background-color .3s ease,color .3s ease;min-height:100vh}::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}::view-transition-new(root){animation:reveal .75s ease-out}@keyframes reveal{0%{clip-path:circle(0% at var(--x) var(--y))}to{clip-path:circle(150% at var(--x) var(--y))}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}::view-transition-new(root){animation:none}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowbomb1/nova-ui",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "files": [
@@ -1,6 +0,0 @@
1
- export interface AccordionProps {
2
- title: string;
3
- children: React.ReactNode;
4
- defaultOpen?: boolean;
5
- }
6
- export declare const Accordion: ({ title, children, defaultOpen }: AccordionProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Accordion';
@@ -1,15 +0,0 @@
1
- export interface ActionSheetAction {
2
- label: string;
3
- icon?: React.ReactNode;
4
- onClick: () => void;
5
- destructive?: boolean;
6
- disabled?: boolean;
7
- }
8
- export interface ActionSheetProps {
9
- isOpen: boolean;
10
- onClose: () => void;
11
- title?: string;
12
- message?: string;
13
- actions: ActionSheetAction[];
14
- }
15
- export declare const ActionSheet: ({ isOpen, onClose, title, message, actions }: ActionSheetProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './ActionSheet';
@@ -1,6 +0,0 @@
1
- export type AlertType = 'success' | 'warning' | 'error' | 'info';
2
- export interface AlertProps {
3
- type?: AlertType;
4
- children: React.ReactNode;
5
- }
6
- export declare const Alert: ({ type, children }: AlertProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Alert';
@@ -1,10 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export interface AppLayoutProps {
3
- topNav?: ReactNode;
4
- sideNav?: ReactNode;
5
- sideNavOpen?: boolean;
6
- sideNavExpandedWidth?: string;
7
- sideNavCollapsedWidth?: string;
8
- children: ReactNode;
9
- }
10
- export declare const AppLayout: ({ topNav, sideNav, sideNavOpen, sideNavExpandedWidth, sideNavCollapsedWidth, children }: AppLayoutProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './AppLayout';
@@ -1,8 +0,0 @@
1
- export type BoxPosition = 'left' | 'right' | 'center';
2
- export type FlexDirection = 'horizontal' | 'vertical';
3
- export interface BoxProps {
4
- children: React.ReactNode;
5
- position?: BoxPosition;
6
- direction?: FlexDirection;
7
- }
8
- export declare const Box: ({ children, position, direction }: BoxProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Box';
@@ -1,10 +0,0 @@
1
- import { TooltipPosition } from '../Tooltip/Tooltip';
2
- export type ButtonVariant = 'primary' | 'secondary' | 'icon';
3
- export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
- children: React.ReactNode;
5
- variant?: ButtonVariant;
6
- disabled?: boolean;
7
- disabledMessage?: string;
8
- tooltipPosition?: TooltipPosition;
9
- }
10
- export declare const Button: ({ children, onClick, variant, disabled, disabledMessage, tooltipPosition, ...props }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Button';
@@ -1,8 +0,0 @@
1
- export interface CheckboxProps {
2
- checked: boolean;
3
- onChange: (checked: boolean) => void;
4
- label?: string;
5
- disabled?: boolean;
6
- indeterminate?: boolean;
7
- }
8
- export declare const Checkbox: ({ checked, onChange, label, disabled, indeterminate }: CheckboxProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Checkbox';
@@ -1,12 +0,0 @@
1
- export type ContainerVariant = 'default' | 'outlined' | 'elevated' | 'flat';
2
- export type ContainerPadding = 'none' | 'sm' | 'md' | 'lg';
3
- export interface ContainerProps {
4
- children: React.ReactNode;
5
- header?: React.ReactNode;
6
- headerActions?: React.ReactNode;
7
- footer?: React.ReactNode;
8
- variant?: ContainerVariant;
9
- padding?: ContainerPadding;
10
- fullWidth?: boolean;
11
- }
12
- export declare const Container: ({ children, header, headerActions, footer, variant, padding, fullWidth }: ContainerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Container';
@@ -1,7 +0,0 @@
1
- export type FloatingButtonVariant = 'menu' | 'action';
2
- export interface FloatingButtonProps {
3
- variant: FloatingButtonVariant;
4
- ariaLabel: string;
5
- onClick: () => void;
6
- }
7
- export declare const FloatingButton: ({ onClick, variant, ariaLabel }: FloatingButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './FloatingMenuButton';
@@ -1,10 +0,0 @@
1
- import { LabelHTMLAttributes } from 'react';
2
- export interface FormFieldProps extends LabelHTMLAttributes<HTMLLabelElement> {
3
- label?: string;
4
- helperText?: string;
5
- error?: string;
6
- required?: boolean;
7
- disabled?: boolean;
8
- children: React.ReactNode;
9
- }
10
- export declare const FormField: ({ label, helperText, error, required, disabled, children }: FormFieldProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './FormField';
@@ -1,6 +0,0 @@
1
- export type HeaderVariant = 'h1' | 'h2' | 'h3' | 'h4';
2
- export interface HeaderProps {
3
- children: React.ReactNode;
4
- variant?: HeaderVariant;
5
- }
6
- export declare const Header: ({ children, variant }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Header';
@@ -1,12 +0,0 @@
1
- export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
2
- value: string | undefined;
3
- onChange?: (newValue: string) => void;
4
- disabled?: boolean;
5
- suggestions?: string[];
6
- hideClear?: boolean;
7
- required?: boolean;
8
- label?: string;
9
- error?: string;
10
- helperText?: string;
11
- }
12
- export declare const Input: ({ value, onChange, disabled, suggestions, placeholder, hideClear, label, error, required, helperText, ...props }: InputProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Input';
@@ -1,10 +0,0 @@
1
- export type ModalSize = 's' | 'm' | 'l' | 'xl';
2
- export interface ModalProps {
3
- isVisible: boolean;
4
- onClose: () => void;
5
- children: React.ReactNode;
6
- size?: ModalSize;
7
- header?: React.ReactNode;
8
- footer?: React.ReactNode;
9
- }
10
- export declare const Modal: ({ isVisible, onClose, size, header, footer, children }: ModalProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Modal';
@@ -1,28 +0,0 @@
1
- export type Option = {
2
- label: string;
3
- value: string | number;
4
- };
5
- interface SharedProps {
6
- options: Option[];
7
- autoFilter?: boolean;
8
- placeholder?: string;
9
- disabled?: boolean;
10
- name?: string;
11
- required?: boolean;
12
- label?: string;
13
- helperText?: string;
14
- error?: string;
15
- }
16
- interface SingleSelectProps extends SharedProps {
17
- selectType?: 'single';
18
- selectedOption?: Option;
19
- onChange: (option: Option) => void;
20
- }
21
- interface MultiSelectProps extends SharedProps {
22
- selectType: 'multi';
23
- selectedOption?: Option[];
24
- onChange: (options: Option[]) => void;
25
- }
26
- export type SelectProps = SingleSelectProps | MultiSelectProps;
27
- export declare const Select: (props: SelectProps) => import("react/jsx-runtime").JSX.Element;
28
- export {};
@@ -1 +0,0 @@
1
- export * from './Select';
@@ -1,15 +0,0 @@
1
- export type NavItem = {
2
- label: string;
3
- icon?: React.ReactNode;
4
- onClick: () => void;
5
- };
6
- export type NavPosition = 'left' | 'right';
7
- export interface SideNavProps {
8
- isOpen: boolean;
9
- onToggle: () => void;
10
- items: NavItem[];
11
- expandedWidth?: string;
12
- collapsedWidth?: string;
13
- position?: NavPosition;
14
- }
15
- export declare const SideNav: ({ isOpen, items, onToggle, expandedWidth, collapsedWidth, position }: SideNavProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './SideNav';
@@ -1,10 +0,0 @@
1
- import { FormFieldProps } from '../Form field';
2
- export interface StepperProps extends Pick<FormFieldProps, 'label' | 'helperText' | 'error' | 'required'> {
3
- value: number;
4
- onChange: (value: number) => void;
5
- min?: number;
6
- max?: number;
7
- step?: number;
8
- disabled?: boolean;
9
- }
10
- export declare const Stepper: ({ label, helperText, error, required, value, onChange, min, max, step, disabled }: StepperProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Stepper';
@@ -1,12 +0,0 @@
1
- export type ToastPosition = 'top' | 'bottom';
2
- export type ToastStatus = 'success' | 'warning' | 'error' | 'info';
3
- export interface ToastProps {
4
- visible: boolean;
5
- onDismiss: () => void;
6
- timeout?: number;
7
- position?: ToastPosition;
8
- status?: ToastStatus;
9
- children: React.ReactNode;
10
- dismissible?: boolean;
11
- }
12
- export declare const Toast: ({ visible, onDismiss, timeout, position, status, children, dismissible }: ToastProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Toast';
@@ -1,7 +0,0 @@
1
- export interface ToggleProps {
2
- label: string;
3
- value: boolean;
4
- onChange: (enabled: boolean) => void;
5
- disabled?: boolean;
6
- }
7
- export declare const Toggle: ({ label, value, onChange, disabled }: ToggleProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Toggle';
@@ -1,7 +0,0 @@
1
- export type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
2
- export interface TooltipProps {
3
- children: React.ReactNode;
4
- message?: string;
5
- position?: TooltipPosition;
6
- }
7
- export declare const Tooltip: ({ children, message, position }: TooltipProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './Tooltip';
@@ -1 +0,0 @@
1
- export declare const ThemeToggler: () => import("react/jsx-runtime").JSX.Element;
@@ -1,7 +0,0 @@
1
- export interface TopNavProps {
2
- header: React.ReactNode;
3
- logo?: React.ReactNode;
4
- logoClick?: () => void;
5
- search?: React.ReactNode;
6
- }
7
- export declare const TopNav: ({ header, logo, logoClick, search }: TopNavProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- export * from './TopNav';
@@ -1,16 +0,0 @@
1
- export interface VideoProps {
2
- controls?: boolean;
3
- loop?: boolean;
4
- autoPlay?: boolean;
5
- muted?: boolean;
6
- }
7
- export type ViewerAspectRatio = '16/9' | '9/16' | '1/1' | '4/3' | '3/2' | '21/19';
8
- export interface ViewerProps {
9
- src: string;
10
- alt: string;
11
- video?: VideoProps;
12
- thumbnailWidth?: string;
13
- aspectRatio?: ViewerAspectRatio;
14
- onError?: (error: Error) => void;
15
- }
16
- export declare const Viewer: ({ src, alt, video, thumbnailWidth, onError, aspectRatio }: ViewerProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,9 +0,0 @@
1
- import { RefObject } from 'react';
2
- import { ViewerAspectRatio } from './Viewer';
3
- interface ViewerLoderProps {
4
- divRef: RefObject<HTMLDivElement | null>;
5
- width: string;
6
- aspectRatio: ViewerAspectRatio;
7
- }
8
- export declare const ViewerLoader: ({ divRef, width, aspectRatio }: ViewerLoderProps) => import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -1 +0,0 @@
1
- export * from './Viewer';
@@ -1,7 +0,0 @@
1
- type Event = 'down' | 'up' | 'enter' | 'escape';
2
- interface KeyHandler {
3
- handler: (event: Event) => void;
4
- enabled?: boolean;
5
- }
6
- export declare const useKeyboardShortcuts: ({ enabled, handler }: KeyHandler) => void;
7
- export {};
@@ -1,11 +0,0 @@
1
- interface UseMediaLoaderProps {
2
- src: string;
3
- onError?: (error: Error) => void;
4
- }
5
- export declare const useMediaLoader: ({ src, onError }: UseMediaLoaderProps) => {
6
- isLoading: boolean;
7
- hasError: boolean;
8
- isVideo: boolean;
9
- reload: () => void;
10
- };
11
- export {};
@@ -1,8 +0,0 @@
1
- import { MouseEvent } from 'react';
2
- type Theme = 'light' | 'dark';
3
- export declare const useTheme: () => {
4
- theme: Theme;
5
- isTransitioning: boolean;
6
- toggleTheme: (event: MouseEvent) => void;
7
- };
8
- export {};