cronixui 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +12 -8
  2. package/package.json +71 -71
  3. package/packages/flutter/.qwen/settings.json +7 -0
  4. package/packages/flutter/pubspec.yaml +20 -20
  5. package/packages/go/cronixui/cronixui.go +926 -926
  6. package/packages/python/README.md +142 -0
  7. package/packages/python/cronixui/__init__.py +15 -6
  8. package/packages/python/cronixui/__pycache__/__init__.cpython-314.pyc +0 -0
  9. package/packages/python/cronixui/__pycache__/accordion.cpython-314.pyc +0 -0
  10. package/packages/python/cronixui/__pycache__/alert.cpython-314.pyc +0 -0
  11. package/packages/python/cronixui/__pycache__/avatar.cpython-314.pyc +0 -0
  12. package/packages/python/cronixui/__pycache__/badge.cpython-314.pyc +0 -0
  13. package/packages/python/cronixui/__pycache__/button.cpython-314.pyc +0 -0
  14. package/packages/python/cronixui/__pycache__/card.cpython-314.pyc +0 -0
  15. package/packages/python/cronixui/__pycache__/command_palette.cpython-314.pyc +0 -0
  16. package/packages/python/cronixui/__pycache__/core.cpython-314.pyc +0 -0
  17. package/packages/python/cronixui/__pycache__/dropdown.cpython-314.pyc +0 -0
  18. package/packages/python/cronixui/__pycache__/form.cpython-314.pyc +0 -0
  19. package/packages/python/cronixui/__pycache__/layout.cpython-314.pyc +0 -0
  20. package/packages/python/cronixui/__pycache__/list.cpython-314.pyc +0 -0
  21. package/packages/python/cronixui/__pycache__/loading.cpython-314.pyc +0 -0
  22. package/packages/python/cronixui/__pycache__/modal.cpython-314.pyc +0 -0
  23. package/packages/python/cronixui/__pycache__/nav.cpython-314.pyc +0 -0
  24. package/packages/python/cronixui/__pycache__/pagination.cpython-314.pyc +0 -0
  25. package/packages/python/cronixui/__pycache__/progress.cpython-314.pyc +0 -0
  26. package/packages/python/cronixui/__pycache__/search.cpython-314.pyc +0 -0
  27. package/packages/python/cronixui/__pycache__/table.cpython-314.pyc +0 -0
  28. package/packages/python/cronixui/__pycache__/tabs.cpython-314.pyc +0 -0
  29. package/packages/python/cronixui/__pycache__/toast.cpython-314.pyc +0 -0
  30. package/packages/python/cronixui/__pycache__/toggle.cpython-314.pyc +0 -0
  31. package/packages/python/cronixui/__pycache__/tokens.cpython-314.pyc +0 -0
  32. package/packages/python/cronixui/__pycache__/tooltip.cpython-314.pyc +0 -0
  33. package/packages/python/cronixui/alert.py +119 -36
  34. package/packages/python/cronixui/avatar.py +129 -22
  35. package/packages/python/cronixui/badge.py +161 -24
  36. package/packages/python/cronixui/button.py +96 -27
  37. package/packages/python/cronixui/card.py +206 -33
  38. package/packages/python/cronixui/core.py +212 -23
  39. package/packages/python/cronixui/form.py +552 -141
  40. package/packages/python/cronixui/layout.py +358 -96
  41. package/packages/python/cronixui/list.py +140 -37
  42. package/packages/python/cronixui/loading.py +107 -17
  43. package/packages/python/cronixui/progress.py +189 -47
  44. package/packages/python/cronixui/table.py +118 -31
  45. package/packages/python/cronixui/tooltip.py +117 -15
  46. package/packages/react/src/components/Accordion.tsx +82 -82
  47. package/packages/react/src/components/Button.tsx +47 -47
  48. package/packages/react/src/components/Card.tsx +69 -69
  49. package/packages/react/src/components/CommandPalette.tsx +131 -131
  50. package/packages/react/src/components/Dropdown.tsx +88 -88
  51. package/packages/react/src/components/FileInput.tsx +86 -86
  52. package/packages/react/src/components/FormGroup.tsx +36 -36
  53. package/packages/react/src/components/List.tsx +55 -55
  54. package/packages/react/src/components/Pagination.tsx +107 -107
  55. package/packages/react/src/components/Progress.tsx +49 -49
  56. package/packages/react/src/components/Search.tsx +95 -95
  57. package/packages/react/src/components/Sidebar.tsx +64 -64
  58. package/packages/react/src/components/Stack.tsx +69 -69
  59. package/packages/react/src/components/Table.tsx +90 -90
  60. package/packages/react/src/components/Toast.tsx +134 -134
  61. package/packages/react/src/components/Typography.tsx +66 -66
  62. package/packages/react/src/index.ts +40 -40
  63. package/packages/react/src/styles.css +2039 -2039
  64. package/packages/rust/cronixui/src/components/avatar.rs +85 -85
  65. package/packages/rust/cronixui/src/components/breadcrumb.rs +58 -58
  66. package/packages/rust/cronixui/src/components/card.rs +259 -259
  67. package/packages/rust/cronixui/src/components/command_palette.rs +254 -254
  68. package/packages/rust/cronixui/src/components/dropdown.rs +179 -179
  69. package/packages/rust/cronixui/src/components/file_input.rs +74 -74
  70. package/packages/rust/cronixui/src/components/mod.rs +51 -51
  71. package/packages/rust/cronixui/src/components/search.rs +185 -185
  72. package/packages/rust/cronixui/src/components/skeleton.rs +63 -63
  73. package/packages/rust/cronixui/src/components/table.rs +56 -56
  74. package/packages/rust/cronixui/src/lib.rs +128 -128
  75. package/packages/web/dist/cronixui.css +97 -93
  76. package/packages/web/dist/cronixui.min.css +1 -1
@@ -1,128 +1,128 @@
1
- //! CronixUI - A dark-themed UI toolkit for egui
2
- //!
3
- //! ## Example
4
- //!
5
- //! ```rust
6
- //! use cronixui::{CronixUI, Colors, components::*};
7
- //!
8
- //! // In your egui app
9
- //! fn update(&mut self, ctx: &egui::Context) {
10
- //! CronixUI::apply_theme(ctx);
11
- //!
12
- //! egui::CentralPanel::default().show(ctx, |ui| {
13
- //! // Use components
14
- //! if ui.button_primary("Click me").clicked() {
15
- //! // handle click
16
- //! }
17
- //! });
18
- //! }
19
- //! ```
20
-
21
- pub mod colors;
22
- pub mod tokens;
23
- pub mod components;
24
-
25
- pub use colors::*;
26
- pub use tokens::*;
27
- pub use components::*;
28
-
29
- use egui::{Color32, Vec2, Rounding};
30
-
31
- /// Current version
32
- pub const VERSION: &str = "1.0.6";
33
-
34
- /// Apply CronixUI theme to egui context
35
- pub fn apply_theme(ctx: &egui::Context) {
36
- let colors = Colors::default();
37
-
38
- let mut style = (*ctx.style()).clone();
39
-
40
- // Visuals
41
- style.visuals.window_fill = colors.bg;
42
- style.visuals.panel_fill = colors.bg;
43
- style.visuals.extreme_bg_color = colors.surface;
44
- style.visuals.faint_bg_color = colors.surface_2;
45
- style.visuals.code_bg_color = colors.surface_3;
46
-
47
- // Text colors
48
- style.visuals.strong_text_color = colors.text;
49
- style.visuals.weak_text_color = colors.text_muted;
50
- style.visuals.text_color = colors.text;
51
-
52
- // Widget colors
53
- style.visuals.widgets.noninteractive.bg_fill = colors.surface;
54
- style.visuals.widgets.noninteractive.bg_stroke.color = colors.border;
55
- style.visuals.widgets.noninteractive.fg_stroke.color = colors.text;
56
-
57
- style.visuals.widgets.inactive.bg_fill = colors.surface_2;
58
- style.visuals.widgets.inactive.bg_stroke.color = colors.border;
59
- style.visuals.widgets.inactive.fg_stroke.color = colors.text;
60
-
61
- style.visuals.widgets.hovered.bg_fill = colors.surface_3;
62
- style.visuals.widgets.hovered.bg_stroke.color = colors.border_hover;
63
- style.visuals.widgets.hovered.fg_stroke.color = colors.text;
64
-
65
- style.visuals.widgets.active.bg_fill = colors.accent;
66
- style.visuals.widgets.active.bg_stroke.color = colors.accent;
67
- style.visuals.widgets.active.fg_stroke.color = colors.text;
68
-
69
- style.visuals.widgets.open.bg_fill = colors.surface_3;
70
- style.visuals.widgets.open.bg_stroke.color = colors.accent;
71
-
72
- // Selection
73
- style.visuals.selection.bg_fill = colors.accent;
74
- style.visuals.selection.stroke.color = colors.accent_text;
75
-
76
- // Hyperlink
77
- style.visuals.hyperlink_color = colors.accent_text;
78
-
79
- // Button rounding
80
- style.visuals.button_rounding = Rounding::same(tokens::RADIUS);
81
-
82
- // Window rounding
83
- style.visuals.window_rounding = Rounding::same(tokens::RADIUS_LG);
84
-
85
- // Spacing
86
- style.spacing.button_padding = Vec2::new(tokens::SPACE_4, tokens::SPACE_2);
87
- style.spacing.item_spacing = Vec2::new(tokens::SPACE_2, tokens::SPACE_2);
88
- style.spacing.indent = tokens::SPACE_4;
89
-
90
- ctx.set_style(style);
91
- }
92
-
93
- /// Helper trait for CronixUI button variants
94
- pub trait CronixButton {
95
- fn button_primary(&mut self, text: &str) -> egui::Response;
96
- fn button_danger(&mut self, text: &str) -> egui::Response;
97
- fn button_success(&mut self, text: &str) -> egui::Response;
98
- fn button_ghost(&mut self, text: &str) -> egui::Response;
99
- fn button_outline(&mut self, text: &str) -> egui::Response;
100
- }
101
-
102
- impl CronixButton for egui::Ui {
103
- fn button_primary(&mut self, text: &str) -> egui::Response {
104
- let colors = Colors::default();
105
- self.add(egui::Button::new(text).fill(colors.accent))
106
- }
107
-
108
- fn button_danger(&mut self, text: &str) -> egui::Response {
109
- let colors = Colors::default();
110
- self.add(egui::Button::new(text).fill(colors.error))
111
- }
112
-
113
- fn button_success(&mut self, text: &str) -> egui::Response {
114
- let colors = Colors::default();
115
- self.add(egui::Button::new(text).fill(colors.success))
116
- }
117
-
118
- fn button_ghost(&mut self, text: &str) -> egui::Response {
119
- self.add(egui::Button::new(text).fill(Color32::TRANSPARENT))
120
- }
121
-
122
- fn button_outline(&mut self, text: &str) -> egui::Response {
123
- let colors = Colors::default();
124
- self.add(egui::Button::new(text)
125
- .fill(Color32::TRANSPARENT)
126
- .stroke(egui::Stroke::new(1.0, colors.border)))
127
- }
128
- }
1
+ //! CronixUI - A dark-themed UI toolkit for egui
2
+ //!
3
+ //! ## Example
4
+ //!
5
+ //! ```rust
6
+ //! use cronixui::{CronixUI, Colors, components::*};
7
+ //!
8
+ //! // In your egui app
9
+ //! fn update(&mut self, ctx: &egui::Context) {
10
+ //! CronixUI::apply_theme(ctx);
11
+ //!
12
+ //! egui::CentralPanel::default().show(ctx, |ui| {
13
+ //! // Use components
14
+ //! if ui.button_primary("Click me").clicked() {
15
+ //! // handle click
16
+ //! }
17
+ //! });
18
+ //! }
19
+ //! ```
20
+
21
+ pub mod colors;
22
+ pub mod tokens;
23
+ pub mod components;
24
+
25
+ pub use colors::*;
26
+ pub use tokens::*;
27
+ pub use components::*;
28
+
29
+ use egui::{Color32, Vec2, Rounding};
30
+
31
+ /// Current version
32
+ pub const VERSION: &str = "1.0.6";
33
+
34
+ /// Apply CronixUI theme to egui context
35
+ pub fn apply_theme(ctx: &egui::Context) {
36
+ let colors = Colors::default();
37
+
38
+ let mut style = (*ctx.style()).clone();
39
+
40
+ // Visuals
41
+ style.visuals.window_fill = colors.bg;
42
+ style.visuals.panel_fill = colors.bg;
43
+ style.visuals.extreme_bg_color = colors.surface;
44
+ style.visuals.faint_bg_color = colors.surface_2;
45
+ style.visuals.code_bg_color = colors.surface_3;
46
+
47
+ // Text colors
48
+ style.visuals.strong_text_color = colors.text;
49
+ style.visuals.weak_text_color = colors.text_muted;
50
+ style.visuals.text_color = colors.text;
51
+
52
+ // Widget colors
53
+ style.visuals.widgets.noninteractive.bg_fill = colors.surface;
54
+ style.visuals.widgets.noninteractive.bg_stroke.color = colors.border;
55
+ style.visuals.widgets.noninteractive.fg_stroke.color = colors.text;
56
+
57
+ style.visuals.widgets.inactive.bg_fill = colors.surface_2;
58
+ style.visuals.widgets.inactive.bg_stroke.color = colors.border;
59
+ style.visuals.widgets.inactive.fg_stroke.color = colors.text;
60
+
61
+ style.visuals.widgets.hovered.bg_fill = colors.surface_3;
62
+ style.visuals.widgets.hovered.bg_stroke.color = colors.border_hover;
63
+ style.visuals.widgets.hovered.fg_stroke.color = colors.text;
64
+
65
+ style.visuals.widgets.active.bg_fill = colors.accent;
66
+ style.visuals.widgets.active.bg_stroke.color = colors.accent;
67
+ style.visuals.widgets.active.fg_stroke.color = colors.text;
68
+
69
+ style.visuals.widgets.open.bg_fill = colors.surface_3;
70
+ style.visuals.widgets.open.bg_stroke.color = colors.accent;
71
+
72
+ // Selection
73
+ style.visuals.selection.bg_fill = colors.accent;
74
+ style.visuals.selection.stroke.color = colors.accent_text;
75
+
76
+ // Hyperlink
77
+ style.visuals.hyperlink_color = colors.accent_text;
78
+
79
+ // Button rounding
80
+ style.visuals.button_rounding = Rounding::same(tokens::RADIUS);
81
+
82
+ // Window rounding
83
+ style.visuals.window_rounding = Rounding::same(tokens::RADIUS_LG);
84
+
85
+ // Spacing
86
+ style.spacing.button_padding = Vec2::new(tokens::SPACE_4, tokens::SPACE_2);
87
+ style.spacing.item_spacing = Vec2::new(tokens::SPACE_2, tokens::SPACE_2);
88
+ style.spacing.indent = tokens::SPACE_4;
89
+
90
+ ctx.set_style(style);
91
+ }
92
+
93
+ /// Helper trait for CronixUI button variants
94
+ pub trait CronixButton {
95
+ fn button_primary(&mut self, text: &str) -> egui::Response;
96
+ fn button_danger(&mut self, text: &str) -> egui::Response;
97
+ fn button_success(&mut self, text: &str) -> egui::Response;
98
+ fn button_ghost(&mut self, text: &str) -> egui::Response;
99
+ fn button_outline(&mut self, text: &str) -> egui::Response;
100
+ }
101
+
102
+ impl CronixButton for egui::Ui {
103
+ fn button_primary(&mut self, text: &str) -> egui::Response {
104
+ let colors = Colors::default();
105
+ self.add(egui::Button::new(text).fill(colors.accent))
106
+ }
107
+
108
+ fn button_danger(&mut self, text: &str) -> egui::Response {
109
+ let colors = Colors::default();
110
+ self.add(egui::Button::new(text).fill(colors.error))
111
+ }
112
+
113
+ fn button_success(&mut self, text: &str) -> egui::Response {
114
+ let colors = Colors::default();
115
+ self.add(egui::Button::new(text).fill(colors.success))
116
+ }
117
+
118
+ fn button_ghost(&mut self, text: &str) -> egui::Response {
119
+ self.add(egui::Button::new(text).fill(Color32::TRANSPARENT))
120
+ }
121
+
122
+ fn button_outline(&mut self, text: &str) -> egui::Response {
123
+ let colors = Colors::default();
124
+ self.add(egui::Button::new(text)
125
+ .fill(Color32::TRANSPARENT)
126
+ .stroke(egui::Stroke::new(1.0, colors.border)))
127
+ }
128
+ }
@@ -3,97 +3,97 @@
3
3
  @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap');
4
4
 
5
5
  :root {
6
- /* Colors */
7
- --cn-bg: #0a0a0a;
8
- --cn-surface: #111111;
9
- --cn-surface-2: #1a1a1a;
10
- --cn-surface-3: #222222;
11
- --cn-surface-4: #2a2a2a;
12
- --cn-border: rgba(255, 255, 255, 0.08);
13
- --cn-border-hover: rgba(255, 255, 255, 0.15);
14
- --cn-border-focus: rgba(255, 255, 255, 0.25);
15
- --cn-text: #f0ede8;
16
- --cn-text-muted: rgba(240, 237, 232, 0.5);
17
- --cn-text-dim: rgba(240, 237, 232, 0.25);
18
-
19
- /* Accent (Crimson) */
20
- --cn-accent: #6b2323;
21
- --cn-accent-hover: #7d2a2a;
22
- --cn-accent-light: #8a3535;
23
- --cn-accent-glow: rgba(107, 35, 35, 0.3);
24
- --cn-accent-text: #c97a7a;
25
-
26
- /* Status Colors */
27
- --cn-success: #1e5028;
28
- --cn-success-border: rgba(60, 140, 70, 0.4);
29
- --cn-success-text: #6bc47a;
30
- --cn-warning: #503c14;
31
- --cn-warning-border: rgba(150, 110, 30, 0.4);
32
- --cn-warning-text: #c4a43a;
33
- --cn-error: #501414;
34
- --cn-error-border: rgba(180, 60, 60, 0.4);
35
- --cn-error-text: #c46b6b;
36
- --cn-info: #143550;
37
- --cn-info-border: rgba(60, 140, 200, 0.4);
38
- --cn-info-text: #6ba8c4;
39
-
40
- /* Typography */
41
- --cn-font: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
42
- --cn-font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
43
-
44
- /* Font Sizes */
45
- --cn-text-xs: 11px;
46
- --cn-text-sm: 12px;
47
- --cn-text-base: 13px;
48
- --cn-text-md: 14px;
49
- --cn-text-lg: 16px;
50
- --cn-text-xl: 20px;
51
- --cn-text-2xl: 28px;
52
- --cn-text-3xl: 36px;
53
-
54
- /* Spacing */
55
- --cn-space-1: 4px;
56
- --cn-space-2: 8px;
57
- --cn-space-3: 12px;
58
- --cn-space-4: 16px;
59
- --cn-space-5: 20px;
60
- --cn-space-6: 24px;
61
- --cn-space-8: 32px;
62
- --cn-space-10: 40px;
63
- --cn-space-12: 48px;
64
-
65
- /* Border Radius */
66
- --cn-radius-sm: 6px;
67
- --cn-radius: 10px;
68
- --cn-radius-lg: 14px;
69
- --cn-radius-xl: 20px;
70
- --cn-radius-full: 9999px;
71
-
72
- /* Shadows */
73
- --cn-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
74
- --cn-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
75
- --cn-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
76
- --cn-shadow-glow: 0 0 20px var(--cn-accent-glow);
77
-
78
- /* Transitions */
79
- --cn-transition-fast: 0.1s ease;
80
- --cn-transition: 0.15s ease;
81
- --cn-transition-slow: 0.25s ease;
82
-
83
- /* Z-Index */
84
- --cn-z-dropdown: 100;
85
- --cn-z-sticky: 200;
86
- --cn-z-fixed: 300;
87
- --cn-z-modal-backdrop: 400;
88
- --cn-z-modal: 500;
89
- --cn-z-popover: 600;
90
- --cn-z-tooltip: 700;
91
- --cn-z-toast: 800;
92
-
93
- /* Layout */
94
- --cn-container-max: 1200px;
95
- --cn-sidebar-width: 260px;
96
- --cn-header-height: 56px;
6
+ /* Colors */
7
+ --cn-bg: #0a0a0a;
8
+ --cn-surface: #111111;
9
+ --cn-surface-2: #1a1a1a;
10
+ --cn-surface-3: #222222;
11
+ --cn-surface-4: #2a2a2a;
12
+ --cn-border: rgba(255, 255, 255, 0.08);
13
+ --cn-border-hover: rgba(255, 255, 255, 0.15);
14
+ --cn-border-focus: rgba(255, 255, 255, 0.25);
15
+ --cn-text: #f0ede8;
16
+ --cn-text-muted: rgba(240, 237, 232, 0.5);
17
+ --cn-text-dim: rgba(240, 237, 232, 0.25);
18
+
19
+ /* Accent (Crimson) */
20
+ --cn-accent: #6b2323;
21
+ --cn-accent-hover: #7d2a2a;
22
+ --cn-accent-light: #8a3535;
23
+ --cn-accent-glow: rgba(107, 35, 35, 0.3);
24
+ --cn-accent-text: #c97a7a;
25
+
26
+ /* Status Colors */
27
+ --cn-success: #1e5028;
28
+ --cn-success-border: rgba(60, 140, 70, 0.4);
29
+ --cn-success-text: #6bc47a;
30
+ --cn-warning: #503c14;
31
+ --cn-warning-border: rgba(150, 110, 30, 0.4);
32
+ --cn-warning-text: #c4a43a;
33
+ --cn-error: #501414;
34
+ --cn-error-border: rgba(180, 60, 60, 0.4);
35
+ --cn-error-text: #c46b6b;
36
+ --cn-info: #143550;
37
+ --cn-info-border: rgba(60, 140, 200, 0.4);
38
+ --cn-info-text: #6ba8c4;
39
+
40
+ /* Typography */
41
+ --cn-font: 'Outfit', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
42
+ --cn-font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
43
+
44
+ /* Font Sizes */
45
+ --cn-text-xs: 11px;
46
+ --cn-text-sm: 12px;
47
+ --cn-text-base: 13px;
48
+ --cn-text-md: 14px;
49
+ --cn-text-lg: 16px;
50
+ --cn-text-xl: 20px;
51
+ --cn-text-2xl: 28px;
52
+ --cn-text-3xl: 36px;
53
+
54
+ /* Spacing */
55
+ --cn-space-1: 4px;
56
+ --cn-space-2: 8px;
57
+ --cn-space-3: 12px;
58
+ --cn-space-4: 16px;
59
+ --cn-space-5: 20px;
60
+ --cn-space-6: 24px;
61
+ --cn-space-8: 32px;
62
+ --cn-space-10: 40px;
63
+ --cn-space-12: 48px;
64
+
65
+ /* Border Radius */
66
+ --cn-radius-sm: 6px;
67
+ --cn-radius: 10px;
68
+ --cn-radius-lg: 14px;
69
+ --cn-radius-xl: 20px;
70
+ --cn-radius-full: 9999px;
71
+
72
+ /* Shadows */
73
+ --cn-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
74
+ --cn-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
75
+ --cn-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
76
+ --cn-shadow-glow: 0 0 20px var(--cn-accent-glow);
77
+
78
+ /* Transitions */
79
+ --cn-transition-fast: 0.1s ease;
80
+ --cn-transition: 0.15s ease;
81
+ --cn-transition-slow: 0.25s ease;
82
+
83
+ /* Z-Index */
84
+ --cn-z-dropdown: 100;
85
+ --cn-z-sticky: 200;
86
+ --cn-z-fixed: 300;
87
+ --cn-z-modal-backdrop: 400;
88
+ --cn-z-modal: 500;
89
+ --cn-z-popover: 600;
90
+ --cn-z-tooltip: 700;
91
+ --cn-z-toast: 800;
92
+
93
+ /* Layout */
94
+ --cn-container-max: 1200px;
95
+ --cn-sidebar-width: 260px;
96
+ --cn-header-height: 56px;
97
97
  }
98
98
 
99
99
 
@@ -1772,8 +1772,12 @@ body {
1772
1772
  transform: translateY(-50%);
1773
1773
  color: var(--cn-text-muted);
1774
1774
  pointer-events: none;
1775
- width: 16px;
1776
- height: 16px;
1775
+ width: 16px !important;
1776
+ height: 16px !important;
1777
+ min-width: 16px;
1778
+ min-height: 16px;
1779
+ max-width: 16px;
1780
+ max-height: 16px;
1777
1781
  }
1778
1782
 
1779
1783
  .cn-search-results {
@@ -1 +1 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap');:root{--cn-bg:#0a0a0a;--cn-surface:#111111;--cn-surface-2:#1a1a1a;--cn-surface-3:#222222;--cn-surface-4:#2a2a2a;--cn-border:rgba(255,255,255,0.08);--cn-border-hover:rgba(255,255,255,0.15);--cn-border-focus:rgba(255,255,255,0.25);--cn-text:#f0ede8;--cn-text-muted:rgba(240,237,232,0.5);--cn-text-dim:rgba(240,237,232,0.25);--cn-accent:#6b2323;--cn-accent-hover:#7d2a2a;--cn-accent-light:#8a3535;--cn-accent-glow:rgba(107,35,35,0.3);--cn-accent-text:#c97a7a;--cn-success:#1e5028;--cn-success-border:rgba(60,140,70,0.4);--cn-success-text:#6bc47a;--cn-warning:#503c14;--cn-warning-border:rgba(150,110,30,0.4);--cn-warning-text:#c4a43a;--cn-error:#501414;--cn-error-border:rgba(180,60,60,0.4);--cn-error-text:#c46b6b;--cn-info:#143550;--cn-info-border:rgba(60,140,200,0.4);--cn-info-text:#6ba8c4;--cn-font:'Outfit',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--cn-font-mono:'JetBrains Mono','Fira Code','Consolas',monospace;--cn-text-xs:11px;--cn-text-sm:12px;--cn-text-base:13px;--cn-text-md:14px;--cn-text-lg:16px;--cn-text-xl:20px;--cn-text-2xl:28px;--cn-text-3xl:36px;--cn-space-1:4px;--cn-space-2:8px;--cn-space-3:12px;--cn-space-4:16px;--cn-space-5:20px;--cn-space-6:24px;--cn-space-8:32px;--cn-space-10:40px;--cn-space-12:48px;--cn-radius-sm:6px;--cn-radius:10px;--cn-radius-lg:14px;--cn-radius-xl:20px;--cn-radius-full:9999px;--cn-shadow-sm:0 1px 2px rgba(0,0,0,0.3);--cn-shadow:0 4px 12px rgba(0,0,0,0.4);--cn-shadow-lg:0 8px 24px rgba(0,0,0,0.5);--cn-shadow-glow:0 0 20px var(--cn-accent-glow);--cn-transition-fast:0.1s ease;--cn-transition:0.15s ease;--cn-transition-slow:0.25s ease;--cn-z-dropdown:100;--cn-z-sticky:200;--cn-z-fixed:300;--cn-z-modal-backdrop:400;--cn-z-modal:500;--cn-z-popover:600;--cn-z-tooltip:700;--cn-z-toast:800;--cn-container-max:1200px;--cn-sidebar-width:260px;--cn-header-height:56px}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--cn-font);font-size:var(--cn-text-base);font-weight:400;line-height:1.6;color:var(--cn-text);background:var(--cn-bg)}.cn-h1,.cn-h2,.cn-h3,.cn-h4,.cn-h5,.cn-h6{font-weight:600;line-height:1.2;color:var(--cn-text)}.cn-h1{font-size:var(--cn-text-3xl);font-weight:700}.cn-h2{font-size:var(--cn-text-2xl)}.cn-h3{font-size:var(--cn-text-xl);font-weight:500}.cn-h4{font-size:var(--cn-text-lg);font-weight:500}.cn-h5{font-size:var(--cn-text-md)}.cn-h6{font-size:var(--cn-text-base)}.cn-text-muted{color:var(--cn-text-muted)}.cn-text-dim{color:var(--cn-text-dim)}.cn-text-accent{color:var(--cn-accent-text)}.cn-text-mono{font-family:var(--cn-font-mono)}.cn-text-xs{font-size:var(--cn-text-xs)}.cn-text-sm{font-size:var(--cn-text-sm)}.cn-text-base{font-size:var(--cn-text-base)}.cn-text-md{font-size:var(--cn-text-md)}.cn-text-lg{font-size:var(--cn-text-lg)}.cn-text-xl{font-size:var(--cn-text-xl)}.cn-label{font-size:var(--cn-text-sm);font-weight:500;letter-spacing:0.05em;text-transform:uppercase;color:var(--cn-text-dim)}.cn-container{width:100%;max-width:var(--cn-container-max);margin:0 auto;padding:0 var(--cn-space-6)}.cn-container-sm{max-width:640px}.cn-container-md{max-width:900px}.cn-container-lg{max-width:1200px}.cn-container-xl{max-width:1400px}.cn-container-fluid{max-width:100%}.cn-flex{display:flex}.cn-flex-col{flex-direction:column}.cn-flex-wrap{flex-wrap:wrap}.cn-items-center{align-items:center}.cn-items-start{align-items:flex-start}.cn-items-end{align-items:flex-end}.cn-justify-center{justify-content:center}.cn-justify-between{justify-content:space-between}.cn-justify-end{justify-content:flex-end}.cn-flex-1{flex:1}.cn-gap-1{gap:var(--cn-space-1)}.cn-gap-2{gap:var(--cn-space-2)}.cn-gap-3{gap:var(--cn-space-3)}.cn-gap-4{gap:var(--cn-space-4)}.cn-gap-6{gap:var(--cn-space-6)}.cn-grid{display:grid}.cn-grid-2{grid-template-columns:repeat(2,1fr)}.cn-grid-3{grid-template-columns:repeat(3,1fr)}.cn-grid-4{grid-template-columns:repeat(4,1fr)}.cn-stack{display:flex;flex-direction:column}.cn-stack>* + *{margin-top:var(--cn-space-4)}.cn-stack-sm>* + *{margin-top:var(--cn-space-2)}.cn-stack-lg>* + *{margin-top:var(--cn-space-6)}.cn-hstack{display:flex;flex-direction:row;align-items:center}.cn-hstack>* + *{margin-left:var(--cn-space-4)}.cn-hstack-sm>* + *{margin-left:var(--cn-space-2)}.cn-hstack-lg>* + *{margin-left:var(--cn-space-6)}.cn-section{margin-bottom:var(--cn-space-10)}.cn-section-sm{margin-bottom:var(--cn-space-6)}.cn-section-lg{margin-bottom:var(--cn-space-12)}.cn-divider{height:1px;background:var(--cn-border);margin:var(--cn-space-6) 0}.cn-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cn-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--cn-space-2);font-family:var(--cn-font);font-size:var(--cn-text-base);font-weight:500;padding:var(--cn-space-2) var(--cn-space-4);border-radius:var(--cn-radius);border:1px solid var(--cn-border);cursor:pointer;transition:all var(--cn-transition);background:var(--cn-surface-2);color:var(--cn-text);text-decoration:none;white-space:nowrap}.cn-btn:hover{border-color:var(--cn-border-hover);background:var(--cn-surface-3)}.cn-btn:focus{outline:none;box-shadow:0 0 0 2px var(--cn-accent-glow)}.cn-btn:active{transform:translateY(1px)}.cn-btn:disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}.cn-btn-primary{background:var(--cn-accent);border-color:var(--cn-accent);color:var(--cn-text)}.cn-btn-primary:hover{background:var(--cn-accent-hover);border-color:var(--cn-accent-hover)}.cn-btn-ghost{background:transparent;border-color:transparent}.cn-btn-ghost:hover{background:var(--cn-surface-2)}.cn-btn-outline{background:transparent}.cn-btn-outline:hover{background:var(--cn-surface-2)}.cn-btn-danger{background:var(--cn-error);border-color:var(--cn-error);color:var(--cn-text)}.cn-btn-danger:hover{background:#6a1a1a;border-color:#6a1a1a}.cn-btn-success{background:var(--cn-success);border-color:var(--cn-success);color:var(--cn-text)}.cn-btn-success:hover{background:#256b32;border-color:#256b32}.cn-btn-sm{padding:var(--cn-space-1) var(--cn-space-3);font-size:var(--cn-text-sm)}.cn-btn-lg{padding:var(--cn-space-3) var(--cn-space-6);font-size:var(--cn-text-lg)}.cn-btn-icon{padding:var(--cn-space-2)}.cn-btn-icon.cn-btn-sm{padding:var(--cn-space-1)}.cn-btn-icon.cn-btn-lg{padding:var(--cn-space-3)}.cn-btn-group{display:inline-flex}.cn-btn-group .cn-btn{border-radius:0}.cn-btn-group .cn-btn:first-child{border-radius:var(--cn-radius) 0 0 var(--cn-radius)}.cn-btn-group .cn-btn:last-child{border-radius:0 var(--cn-radius) var(--cn-radius) 0}.cn-btn-group .cn-btn:not(:last-child){border-right:none}.cn-card{background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius-lg);padding:var(--cn-space-5);transition:border-color var(--cn-transition)}.cn-card:hover{border-color:var(--cn-border-hover)}.cn-card-clickable{cursor:pointer}.cn-card-clickable:hover{background:var(--cn-surface-2)}.cn-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--cn-space-4)}.cn-card-title{font-size:var(--cn-text-md);font-weight:500;color:var(--cn-text)}.cn-card-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted);margin-top:var(--cn-space-1)}.cn-card-body{color:var(--cn-text-muted)}.cn-card-footer{margin-top:var(--cn-space-4);padding-top:var(--cn-space-4);border-top:1px solid var(--cn-border)}.cn-card-icon{width:36px;height:36px;border-radius:var(--cn-radius-sm);background:var(--cn-accent-glow);border:1px solid var(--cn-accent);display:flex;align-items:center;justify-content:center;margin-bottom:var(--cn-space-3)}.cn-card-icon svg{width:18px;height:18px;stroke:var(--cn-accent);fill:none;stroke-width:1.5}.cn-input{font-family:var(--cn-font);font-size:var(--cn-text-base);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-2) var(--cn-space-3);color:var(--cn-text);outline:none;transition:border-color var(--cn-transition),box-shadow var(--cn-transition);width:100%}.cn-input:hover{border-color:var(--cn-border-hover)}.cn-input:focus{border-color:var(--cn-accent);box-shadow:0 0 0 3px var(--cn-accent-glow)}.cn-input::placeholder{color:var(--cn-text-dim)}.cn-input:disabled{opacity:0.5;cursor:not-allowed;background:var(--cn-surface-2)}.cn-input-error{border-color:var(--cn-error)}.cn-input-error:focus{box-shadow:0 0 0 3px rgba(180,60,60,0.2)}.cn-input-sm{padding:var(--cn-space-1) var(--cn-space-2);font-size:var(--cn-text-sm)}.cn-input-lg{padding:var(--cn-space-3) var(--cn-space-4);font-size:var(--cn-text-lg)}.cn-input-icon-wrapper{position:relative}.cn-input-icon-wrapper .cn-input{padding-left:var(--cn-space-10)}.cn-input-icon-wrapper .cn-input-icon{position:absolute;left:var(--cn-space-3);top:50%;transform:translateY(-50%);color:var(--cn-text-muted);pointer-events:none}.cn-input-icon-wrapper .cn-input-icon svg{width:16px;height:16px}.cn-input-action-wrapper{position:relative}.cn-input-action-wrapper .cn-input{padding-right:var(--cn-space-10)}.cn-input-action-wrapper .cn-input-action{position:absolute;right:var(--cn-space-2);top:50%;transform:translateY(-50%)}.cn-textarea{min-height:100px;resize:vertical}.cn-form-group{display:flex;flex-direction:column;gap:var(--cn-space-2)}.cn-form-label{font-size:var(--cn-text-sm);color:var(--cn-text-muted);font-weight:500}.cn-form-error{font-size:var(--cn-text-xs);color:var(--cn-error-text)}.cn-form-help{font-size:var(--cn-text-xs);color:var(--cn-text-dim)}.cn-checkbox,.cn-radio{display:inline-flex;align-items:center;gap:var(--cn-space-2);cursor:pointer;user-select:none}.cn-checkbox input,.cn-radio input{position:absolute;opacity:0;width:0;height:0}.cn-checkbox-box,.cn-radio-box{width:18px;height:18px;border:1px solid var(--cn-border);background:var(--cn-surface);display:flex;align-items:center;justify-content:center;transition:all var(--cn-transition);flex-shrink:0}.cn-checkbox-box{border-radius:var(--cn-radius-sm)}.cn-radio-box{border-radius:50%}.cn-checkbox:hover .cn-checkbox-box,.cn-radio:hover .cn-radio-box{border-color:var(--cn-border-hover)}.cn-checkbox input:checked + .cn-checkbox-box{background:var(--cn-accent);border-color:var(--cn-accent)}.cn-checkbox-box::after{content:'';width:5px;height:9px;border:solid var(--cn-text);border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform var(--cn-transition-fast)}.cn-checkbox input:checked + .cn-checkbox-box::after{transform:rotate(45deg) scale(1)}.cn-radio-box::after{content:'';width:8px;height:8px;border-radius:50%;background:var(--cn-accent);transform:scale(0);transition:transform var(--cn-transition-fast)}.cn-radio input:checked + .cn-radio-box::after{transform:scale(1)}.cn-checkbox-label,.cn-radio-label{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-checkbox.disabled,.cn-radio.disabled{opacity:0.5;cursor:not-allowed}.cn-select-wrapper{position:relative;display:inline-block}.cn-select{font-family:var(--cn-font);font-size:var(--cn-text-base);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-2) var(--cn-space-8) var(--cn-space-2) var(--cn-space-3);color:var(--cn-text);cursor:pointer;appearance:none;width:100%;transition:border-color var(--cn-transition)}.cn-select:hover{border-color:var(--cn-border-hover)}.cn-select:focus{outline:none;border-color:var(--cn-accent);box-shadow:0 0 0 3px var(--cn-accent-glow)}.cn-select-wrapper::after{content:'';position:absolute;right:var(--cn-space-3);top:50%;transform:translateY(-50%);width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid var(--cn-text-muted);pointer-events:none}.cn-select option{background:var(--cn-surface);color:var(--cn-text)}.cn-slider{-webkit-appearance:none;width:100%;height:4px;border-radius:4px;background:var(--cn-surface-3);outline:none;cursor:pointer}.cn-slider::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(--cn-accent);border:2px solid var(--cn-text);cursor:pointer;transition:transform var(--cn-transition)}.cn-slider::-webkit-slider-thumb:hover{transform:scale(1.1)}.cn-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--cn-accent);border:2px solid var(--cn-text);cursor:pointer}.cn-toggle{width:40px;height:22px;background:var(--cn-surface-3);border:1px solid var(--cn-border);border-radius:var(--cn-radius-full);position:relative;cursor:pointer;transition:background var(--cn-transition),border-color var(--cn-transition)}.cn-toggle::after{content:'';position:absolute;width:16px;height:16px;border-radius:50%;background:var(--cn-text-muted);top:2px;left:2px;transition:transform var(--cn-transition),background var(--cn-transition)}.cn-toggle.on{background:var(--cn-accent);border-color:var(--cn-accent)}.cn-toggle.on::after{transform:translateX(18px);background:var(--cn-text)}.cn-toggle-label{font-size:var(--cn-text-base);color:var(--cn-text-muted)}.cn-badge{display:inline-flex;align-items:center;gap:var(--cn-space-1);font-size:var(--cn-text-xs);font-weight:500;padding:var(--cn-space-1) var(--cn-space-2);border-radius:var(--cn-radius-full);border:1px solid}.cn-badge-default{background:var(--cn-surface-2);border-color:var(--cn-border);color:var(--cn-text-muted)}.cn-badge-accent{background:var(--cn-accent-glow);border-color:var(--cn-accent);color:var(--cn-accent-text)}.cn-badge-success{background:rgba(30,80,40,0.3);border-color:var(--cn-success-border);color:var(--cn-success-text)}.cn-badge-warning{background:rgba(80,60,20,0.3);border-color:var(--cn-warning-border);color:var(--cn-warning-text)}.cn-badge-error{background:rgba(80,20,20,0.3);border-color:var(--cn-error-border);color:var(--cn-error-text)}.cn-badge-info{background:rgba(20,60,100,0.3);border-color:var(--cn-info-border);color:var(--cn-info-text)}.cn-badge-solid{border-color:transparent}.cn-badge-solid.cn-badge-accent{background:var(--cn-accent);color:var(--cn-text)}.cn-badge-solid.cn-badge-success{background:var(--cn-success);color:var(--cn-text)}.cn-badge-solid.cn-badge-warning{background:var(--cn-warning);color:var(--cn-text)}.cn-badge-solid.cn-badge-error{background:var(--cn-error);color:var(--cn-text)}.cn-tag{display:inline-flex;align-items:center;gap:var(--cn-space-2);font-size:var(--cn-text-sm);padding:var(--cn-space-1) var(--cn-space-3);background:var(--cn-surface-2);border:1px solid var(--cn-border);border-radius:var(--cn-radius);color:var(--cn-text)}.cn-tag-remove{display:flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:var(--cn-surface-3);cursor:pointer;transition:background var(--cn-transition)}.cn-tag-remove:hover{background:var(--cn-error)}.cn-tag-remove svg{width:8px;height:8px;stroke:var(--cn-text-muted)}.cn-stat{background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-4)}.cn-stat-value{font-size:var(--cn-text-2xl);font-weight:600;color:var(--cn-text)}.cn-stat-label{font-size:var(--cn-text-xs);color:var(--cn-text-muted);margin-top:var(--cn-space-1)}.cn-stat-delta{font-size:var(--cn-text-xs);margin-top:var(--cn-space-2);display:flex;align-items:center;gap:var(--cn-space-1)}.cn-stat-delta-up{color:var(--cn-success-text)}.cn-stat-delta-down{color:var(--cn-error-text)}.cn-progress{height:4px;background:var(--cn-surface-3);border-radius:var(--cn-radius-full);overflow:hidden}.cn-progress-bar{height:100%;background:var(--cn-accent);border-radius:var(--cn-radius-full);transition:width var(--cn-transition-slow)}.cn-progress-success .cn-progress-bar{background:var(--cn-success-text)}.cn-progress-warning .cn-progress-bar{background:var(--cn-warning-text)}.cn-progress-error .cn-progress-bar{background:var(--cn-error-text)}.cn-progress-lg{height:8px}.cn-progress-label{display:flex;justify-content:space-between;font-size:var(--cn-text-sm);color:var(--cn-text-muted);margin-bottom:var(--cn-space-1)}.cn-nav{display:flex;gap:var(--cn-space-1);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-1);width:fit-content}.cn-nav-item{font-family:var(--cn-font);font-size:var(--cn-text-sm);font-weight:500;padding:var(--cn-space-2) var(--cn-space-4);border-radius:var(--cn-radius-sm);border:none;cursor:pointer;background:transparent;color:var(--cn-text-muted);transition:all var(--cn-transition)}.cn-nav-item:hover:not(.cn-nav-active){color:var(--cn-text)}.cn-nav-active{background:var(--cn-surface-3);color:var(--cn-text)}.cn-tabs{border-bottom:1px solid var(--cn-border)}.cn-tabs-list{display:flex;gap:var(--cn-space-1)}.cn-tab{font-family:var(--cn-font);font-size:var(--cn-text-base);font-weight:500;padding:var(--cn-space-3) var(--cn-space-4);border:none;border-bottom:2px solid transparent;cursor:pointer;background:transparent;color:var(--cn-text-muted);transition:all var(--cn-transition);margin-bottom:-1px}.cn-tab:hover{color:var(--cn-text)}.cn-tab.cn-tab-active{color:var(--cn-accent-text);border-bottom-color:var(--cn-accent)}.cn-tab-content{padding:var(--cn-space-4) 0}.cn-tab-panel{display:none}.cn-tab-panel.cn-tab-panel-active{display:block}.cn-breadcrumb{display:flex;align-items:center;gap:var(--cn-space-2);font-size:var(--cn-text-sm)}.cn-breadcrumb-item{color:var(--cn-text-muted);text-decoration:none;transition:color var(--cn-transition)}.cn-breadcrumb-item:hover{color:var(--cn-text)}.cn-breadcrumb-separator{color:var(--cn-text-dim)}.cn-breadcrumb-current{color:var(--cn-text)}.cn-header{height:var(--cn-header-height);background:var(--cn-surface);border-bottom:1px solid var(--cn-border);display:flex;align-items:center;padding:0 var(--cn-space-6);position:sticky;top:0;z-index:var(--cn-z-sticky)}.cn-header-brand{display:flex;align-items:center;gap:var(--cn-space-3);font-size:var(--cn-text-lg);font-weight:600;color:var(--cn-text);text-decoration:none}.cn-header-nav{display:flex;align-items:center;gap:var(--cn-space-1);margin-left:var(--cn-space-8)}.cn-header-actions{margin-left:auto;display:flex;align-items:center;gap:var(--cn-space-3)}.cn-sidebar{width:var(--cn-sidebar-width);height:100vh;background:var(--cn-surface);border-right:1px solid var(--cn-border);position:fixed;left:0;top:0;z-index:var(--cn-z-fixed);display:flex;flex-direction:column}.cn-sidebar-header{padding:var(--cn-space-5);border-bottom:1px solid var(--cn-border)}.cn-sidebar-nav{flex:1;padding:var(--cn-space-3);overflow-y:auto}.cn-sidebar-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-3);border-radius:var(--cn-radius);color:var(--cn-text-muted);text-decoration:none;transition:all var(--cn-transition);cursor:pointer}.cn-sidebar-item:hover{background:var(--cn-surface-2);color:var(--cn-text)}.cn-sidebar-item.cn-sidebar-active{background:var(--cn-accent-glow);color:var(--cn-accent-text)}.cn-sidebar-footer{padding:var(--cn-space-4);border-top:1px solid var(--cn-border)}.cn-alert{padding:var(--cn-space-4);border-radius:var(--cn-radius);border:1px solid;display:flex;align-items:flex-start;gap:var(--cn-space-3)}.cn-alert-icon{flex-shrink:0;width:20px;height:20px}.cn-alert-content{flex:1}.cn-alert-title{font-weight:500;color:var(--cn-text);margin-bottom:var(--cn-space-1)}.cn-alert-message{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-alert-close{flex-shrink:0;padding:var(--cn-space-1);background:transparent;border:none;color:var(--cn-text-muted);cursor:pointer;border-radius:var(--cn-radius-sm);transition:background var(--cn-transition)}.cn-alert-close:hover{background:var(--cn-surface-3)}.cn-alert-info{background:rgba(20,60,100,0.15);border-color:var(--cn-info-border)}.cn-alert-success{background:rgba(30,80,40,0.15);border-color:var(--cn-success-border)}.cn-alert-warning{background:rgba(80,60,20,0.15);border-color:var(--cn-warning-border)}.cn-alert-error{background:rgba(80,20,20,0.15);border-color:var(--cn-error-border)}.cn-toast-container{position:fixed;bottom:var(--cn-space-6);right:var(--cn-space-6);z-index:var(--cn-z-toast);display:flex;flex-direction:column;gap:var(--cn-space-3)}.cn-toast{min-width:300px;max-width:450px;padding:var(--cn-space-4);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);box-shadow:var(--cn-shadow-lg);display:flex;align-items:flex-start;gap:var(--cn-space-3);animation:cn-toast-in 0.3s ease}@keyframes cn-toast-in{from{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}.cn-toast.cn-toast-leaving{animation:cn-toast-out 0.2s ease forwards}@keyframes cn-toast-out{to{opacity:0;transform:translateX(100%)}}.cn-modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:var(--cn-z-modal-backdrop);display:flex;align-items:center;justify-content:center;padding:var(--cn-space-6);opacity:0;visibility:hidden;transition:opacity var(--cn-transition),visibility var(--cn-transition)}.cn-modal-backdrop.cn-modal-open{opacity:1;visibility:visible}.cn-modal{background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius-lg);max-width:500px;width:100%;max-height:calc(100vh - var(--cn-space-12));overflow:auto;transform:scale(0.95);transition:transform var(--cn-transition)}.cn-modal-backdrop.cn-modal-open .cn-modal{transform:scale(1)}.cn-modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--cn-space-5);border-bottom:1px solid var(--cn-border)}.cn-modal-title{font-size:var(--cn-text-lg);font-weight:600}.cn-modal-close{padding:var(--cn-space-2);background:transparent;border:none;color:var(--cn-text-muted);cursor:pointer;border-radius:var(--cn-radius);transition:background var(--cn-transition)}.cn-modal-close:hover{background:var(--cn-surface-2)}.cn-modal-body{padding:var(--cn-space-5)}.cn-modal-footer{display:flex;justify-content:flex-end;gap:var(--cn-space-3);padding:var(--cn-space-4) var(--cn-space-5);border-top:1px solid var(--cn-border)}.cn-modal-sm{max-width:400px}.cn-modal-lg{max-width:700px}.cn-modal-xl{max-width:900px}.cn-tooltip{position:relative}.cn-tooltip-content{position:absolute;bottom:calc(100% + var(--cn-space-2));left:50%;transform:translateX(-50%);padding:var(--cn-space-2) var(--cn-space-3);background:var(--cn-surface-3);border:1px solid var(--cn-border);border-radius:var(--cn-radius-sm);font-size:var(--cn-text-xs);color:var(--cn-text);white-space:nowrap;opacity:0;visibility:hidden;transition:opacity var(--cn-transition),visibility var(--cn-transition);z-index:var(--cn-z-tooltip)}.cn-tooltip:hover .cn-tooltip-content{opacity:1;visibility:visible}.cn-tooltip-content::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid transparent;border-top-color:var(--cn-surface-3)}.cn-spinner{width:24px;height:24px;border:2px solid var(--cn-surface-3);border-top-color:var(--cn-accent);border-radius:50%;animation:cn-spin 0.8s linear infinite}@keyframes cn-spin{to{transform:rotate(360deg)}}.cn-spinner-sm{width:16px;height:16px;border-width:2px}.cn-spinner-lg{width:40px;height:40px;border-width:3px}.cn-skeleton{background:linear-gradient( 90deg,var(--cn-surface-2) 25%,var(--cn-surface-3) 50%,var(--cn-surface-2) 75% );background-size:200% 100%;animation:cn-skeleton 1.5s infinite;border-radius:var(--cn-radius-sm)}@keyframes cn-skeleton{0%{background-position:200% 0}100%{background-position:-200% 0}}.cn-skeleton-text{height:var(--cn-text-md);margin-bottom:var(--cn-space-2)}.cn-skeleton-title{height:var(--cn-text-xl);width:60%;margin-bottom:var(--cn-space-3)}.cn-skeleton-avatar{width:40px;height:40px;border-radius:50%}.cn-table-wrapper{overflow-x:auto;border:1px solid var(--cn-border);border-radius:var(--cn-radius)}.cn-table{width:100%;border-collapse:collapse}.cn-table th,.cn-table td{padding:var(--cn-space-3) var(--cn-space-4);text-align:left}.cn-table th{background:var(--cn-surface);font-size:var(--cn-text-xs);font-weight:500;text-transform:uppercase;letter-spacing:0.05em;color:var(--cn-text-muted);border-bottom:1px solid var(--cn-border)}.cn-table td{border-bottom:1px solid var(--cn-border);font-size:var(--cn-text-base);color:var(--cn-text)}.cn-table tbody tr:last-child td{border-bottom:none}.cn-table tbody tr:hover{background:var(--cn-surface)}.cn-table-sortable th{cursor:pointer;user-select:none}.cn-table-sortable th:hover{background:var(--cn-surface-2)}.cn-list{border:1px solid var(--cn-border);border-radius:var(--cn-radius);overflow:hidden}.cn-list-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-3) var(--cn-space-4);border-bottom:1px solid var(--cn-border);transition:background var(--cn-transition)}.cn-list-item:last-child{border-bottom:none}.cn-list-item:hover{background:var(--cn-surface)}.cn-list-item-clickable{cursor:pointer}.cn-list-item-icon{flex-shrink:0}.cn-list-item-content{flex:1}.cn-list-item-title{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-list-item-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-list-item-actions{flex-shrink:0}.cn-accordion{border:1px solid var(--cn-border);border-radius:var(--cn-radius)}.cn-accordion-item{border-bottom:1px solid var(--cn-border)}.cn-accordion-item:last-child{border-bottom:none}.cn-accordion-header{display:flex;align-items:center;justify-content:space-between;padding:var(--cn-space-4);cursor:pointer;transition:background var(--cn-transition)}.cn-accordion-header:hover{background:var(--cn-surface)}.cn-accordion-title{font-weight:500}.cn-accordion-icon{transition:transform var(--cn-transition)}.cn-accordion-item.cn-accordion-open .cn-accordion-icon{transform:rotate(180deg)}.cn-accordion-content{padding:0 var(--cn-space-4) var(--cn-space-4);display:none}.cn-accordion-item.cn-accordion-open .cn-accordion-content{display:block}.cn-avatar{width:40px;height:40px;border-radius:50%;background:var(--cn-accent);display:flex;align-items:center;justify-content:center;font-size:var(--cn-text-sm);font-weight:600;color:var(--cn-text);overflow:hidden}.cn-avatar img{width:100%;height:100%;object-fit:cover}.cn-avatar-sm{width:32px;height:32px;font-size:var(--cn-text-xs)}.cn-avatar-lg{width:48px;height:48px;font-size:var(--cn-text-base)}.cn-avatar-xl{width:64px;height:64px;font-size:var(--cn-text-lg)}.cn-avatar-group{display:flex}.cn-avatar-group .cn-avatar{border:2px solid var(--cn-bg);margin-left:-10px}.cn-avatar-group .cn-avatar:first-child{margin-left:0}.cn-dropdown{position:relative;display:inline-block}.cn-dropdown-menu{position:absolute;top:100%;left:0;min-width:180px;background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);box-shadow:var(--cn-shadow);z-index:var(--cn-z-dropdown);opacity:0;visibility:hidden;transform:translateY(-8px);transition:all var(--cn-transition)}.cn-dropdown.cn-dropdown-open .cn-dropdown-menu{opacity:1;visibility:visible;transform:translateY(var(--cn-space-1))}.cn-dropdown-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-2) var(--cn-space-4);font-size:var(--cn-text-base);color:var(--cn-text);cursor:pointer;transition:background var(--cn-transition)}.cn-dropdown-item:hover{background:var(--cn-surface-2)}.cn-dropdown-item:first-child{border-radius:var(--cn-radius) var(--cn-radius) 0 0}.cn-dropdown-item:last-child{border-radius:0 0 var(--cn-radius) var(--cn-radius)}.cn-dropdown-divider{height:1px;background:var(--cn-border);margin:var(--cn-space-2) 0}.cn-pagination{display:flex;align-items:center;gap:var(--cn-space-1)}.cn-pagination-item{min-width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:var(--cn-text-sm);border-radius:var(--cn-radius);border:1px solid var(--cn-border);background:var(--cn-surface);color:var(--cn-text-muted);cursor:pointer;transition:all var(--cn-transition)}.cn-pagination-item:hover{border-color:var(--cn-border-hover);color:var(--cn-text)}.cn-pagination-item.cn-pagination-active{background:var(--cn-accent);border-color:var(--cn-accent);color:var(--cn-text)}.cn-pagination-item:disabled{opacity:0.5;cursor:not-allowed}.cn-file-input{position:relative}.cn-file-input input[type="file"]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer}.cn-file-input-label{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--cn-space-3);padding:var(--cn-space-8);background:var(--cn-surface);border:2px dashed var(--cn-border);border-radius:var(--cn-radius);transition:border-color var(--cn-transition)}.cn-file-input:hover .cn-file-input-label{border-color:var(--cn-border-hover)}.cn-file-input-icon{width:40px;height:40px;color:var(--cn-text-muted)}.cn-file-input-text{font-size:var(--cn-text-base);color:var(--cn-text-muted)}.cn-file-input-text span{color:var(--cn-accent-text);text-decoration:underline}.cn-search{position:relative}.cn-search-input{padding-left:var(--cn-space-10);padding-right:var(--cn-space-10)}.cn-search-icon{position:absolute;left:var(--cn-space-3);top:50%;transform:translateY(-50%);color:var(--cn-text-muted);pointer-events:none;width:16px;height:16px}.cn-search-results{position:absolute;top:100%;left:0;right:0;margin-top:var(--cn-space-1);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);box-shadow:var(--cn-shadow);max-height:300px;overflow-y:auto;z-index:var(--cn-z-dropdown);display:none}.cn-search.cn-search-open .cn-search-results{display:block}.cn-search-result{padding:var(--cn-space-3) var(--cn-space-4);cursor:pointer;transition:background var(--cn-transition)}.cn-search-result:hover{background:var(--cn-surface-2)}.cn-search-result-title{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-search-result-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-command-palette{position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:var(--cn-z-modal);display:flex;align-items:flex-start;justify-content:center;padding-top:15vh;opacity:0;visibility:hidden;transition:opacity var(--cn-transition),visibility var(--cn-transition)}.cn-command-palette.cn-command-palette-open{opacity:1;visibility:visible}.cn-command-palette-inner{width:100%;max-width:560px;background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius-lg);box-shadow:var(--cn-shadow-lg);transform:scale(0.95);transition:transform var(--cn-transition)}.cn-command-palette-open .cn-command-palette-inner{transform:scale(1)}.cn-command-palette-input{width:100%;padding:var(--cn-space-5);background:transparent;border:none;border-bottom:1px solid var(--cn-border);font-size:var(--cn-text-lg);color:var(--cn-text);outline:none}.cn-command-palette-results{max-height:400px;overflow-y:auto;padding:var(--cn-space-2)}.cn-command-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-3);border-radius:var(--cn-radius);cursor:pointer;transition:background var(--cn-transition)}.cn-command-item:hover,.cn-command-item.cn-command-item-active{background:var(--cn-surface-2)}.cn-command-item-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--cn-surface-3);border-radius:var(--cn-radius-sm)}.cn-command-item-title{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-command-item-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-command-item-kbd{margin-left:auto;font-size:var(--cn-text-xs);padding:var(--cn-space-1) var(--cn-space-2);background:var(--cn-surface-3);border-radius:var(--cn-radius-sm);color:var(--cn-text-muted)}.cn-footer{background:var(--cn-surface);border-top:1px solid var(--cn-border);padding:var(--cn-space-6);margin-top:auto}.cn-footer-content{display:flex;align-items:center;justify-content:space-between}.cn-footer-links{display:flex;gap:var(--cn-space-6)}.cn-footer-link{font-size:var(--cn-text-sm);color:var(--cn-text-muted);text-decoration:none;transition:color var(--cn-transition)}.cn-footer-link:hover{color:var(--cn-text)}.cn-footer-copyright{font-size:var(--cn-text-sm);color:var(--cn-text-dim)}.cn-m-0{margin:0}.cn-mt-0{margin-top:0}.cn-mb-0{margin-bottom:0}.cn-ml-0{margin-left:0}.cn-mr-0{margin-right:0}.cn-m-auto{margin:auto}.cn-m-1{margin:var(--cn-space-1)}.cn-m-2{margin:var(--cn-space-2)}.cn-m-3{margin:var(--cn-space-3)}.cn-m-4{margin:var(--cn-space-4)}.cn-m-6{margin:var(--cn-space-6)}.cn-mt-1{margin-top:var(--cn-space-1)}.cn-mt-2{margin-top:var(--cn-space-2)}.cn-mt-3{margin-top:var(--cn-space-3)}.cn-mt-4{margin-top:var(--cn-space-4)}.cn-mt-6{margin-top:var(--cn-space-6)}.cn-mb-1{margin-bottom:var(--cn-space-1)}.cn-mb-2{margin-bottom:var(--cn-space-2)}.cn-mb-3{margin-bottom:var(--cn-space-3)}.cn-mb-4{margin-bottom:var(--cn-space-4)}.cn-mb-6{margin-bottom:var(--cn-space-6)}.cn-p-0{padding:0}.cn-p-1{padding:var(--cn-space-1)}.cn-p-2{padding:var(--cn-space-2)}.cn-p-3{padding:var(--cn-space-3)}.cn-p-4{padding:var(--cn-space-4)}.cn-p-6{padding:var(--cn-space-6)}.cn-w-full{width:100%}.cn-h-full{height:100%}.cn-min-h-screen{min-height:100vh}.cn-text-left{text-align:left}.cn-text-center{text-align:center}.cn-text-right{text-align:right}.cn-hidden{display:none}.cn-block{display:block}.cn-inline{display:inline}.cn-inline-block{display:inline-block}.cn-overflow-hidden{overflow:hidden}.cn-overflow-auto{overflow:auto}.cn-cursor-pointer{cursor:pointer}.cn-cursor-not-allowed{cursor:not-allowed}.cn-pointer-events-none{pointer-events:none}.cn-opacity-0{opacity:0}.cn-opacity-50{opacity:0.5}.cn-opacity-100{opacity:1}.cn-rounded{border-radius:var(--cn-radius)}.cn-rounded-full{border-radius:var(--cn-radius-full)}.cn-border{border:1px solid var(--cn-border)}.cn-shadow{box-shadow:var(--cn-shadow)}.cn-shadow-lg{box-shadow:var(--cn-shadow-lg)}.cn-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:768px){:root{--cn-sidebar-width:100%}.cn-container{padding:0 var(--cn-space-4)}.cn-grid-2,.cn-grid-3,.cn-grid-4{grid-template-columns:1fr}.cn-modal{max-width:calc(100% - var(--cn-space-6));margin:var(--cn-space-3)}}
1
+ @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap');:root{--cn-bg:#0a0a0a;--cn-surface:#111111;--cn-surface-2:#1a1a1a;--cn-surface-3:#222222;--cn-surface-4:#2a2a2a;--cn-border:rgba(255,255,255,0.08);--cn-border-hover:rgba(255,255,255,0.15);--cn-border-focus:rgba(255,255,255,0.25);--cn-text:#f0ede8;--cn-text-muted:rgba(240,237,232,0.5);--cn-text-dim:rgba(240,237,232,0.25);--cn-accent:#6b2323;--cn-accent-hover:#7d2a2a;--cn-accent-light:#8a3535;--cn-accent-glow:rgba(107,35,35,0.3);--cn-accent-text:#c97a7a;--cn-success:#1e5028;--cn-success-border:rgba(60,140,70,0.4);--cn-success-text:#6bc47a;--cn-warning:#503c14;--cn-warning-border:rgba(150,110,30,0.4);--cn-warning-text:#c4a43a;--cn-error:#501414;--cn-error-border:rgba(180,60,60,0.4);--cn-error-text:#c46b6b;--cn-info:#143550;--cn-info-border:rgba(60,140,200,0.4);--cn-info-text:#6ba8c4;--cn-font:'Outfit',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--cn-font-mono:'JetBrains Mono','Fira Code','Consolas',monospace;--cn-text-xs:11px;--cn-text-sm:12px;--cn-text-base:13px;--cn-text-md:14px;--cn-text-lg:16px;--cn-text-xl:20px;--cn-text-2xl:28px;--cn-text-3xl:36px;--cn-space-1:4px;--cn-space-2:8px;--cn-space-3:12px;--cn-space-4:16px;--cn-space-5:20px;--cn-space-6:24px;--cn-space-8:32px;--cn-space-10:40px;--cn-space-12:48px;--cn-radius-sm:6px;--cn-radius:10px;--cn-radius-lg:14px;--cn-radius-xl:20px;--cn-radius-full:9999px;--cn-shadow-sm:0 1px 2px rgba(0,0,0,0.3);--cn-shadow:0 4px 12px rgba(0,0,0,0.4);--cn-shadow-lg:0 8px 24px rgba(0,0,0,0.5);--cn-shadow-glow:0 0 20px var(--cn-accent-glow);--cn-transition-fast:0.1s ease;--cn-transition:0.15s ease;--cn-transition-slow:0.25s ease;--cn-z-dropdown:100;--cn-z-sticky:200;--cn-z-fixed:300;--cn-z-modal-backdrop:400;--cn-z-modal:500;--cn-z-popover:600;--cn-z-tooltip:700;--cn-z-toast:800;--cn-container-max:1200px;--cn-sidebar-width:260px;--cn-header-height:56px}*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--cn-font);font-size:var(--cn-text-base);font-weight:400;line-height:1.6;color:var(--cn-text);background:var(--cn-bg)}.cn-h1,.cn-h2,.cn-h3,.cn-h4,.cn-h5,.cn-h6{font-weight:600;line-height:1.2;color:var(--cn-text)}.cn-h1{font-size:var(--cn-text-3xl);font-weight:700}.cn-h2{font-size:var(--cn-text-2xl)}.cn-h3{font-size:var(--cn-text-xl);font-weight:500}.cn-h4{font-size:var(--cn-text-lg);font-weight:500}.cn-h5{font-size:var(--cn-text-md)}.cn-h6{font-size:var(--cn-text-base)}.cn-text-muted{color:var(--cn-text-muted)}.cn-text-dim{color:var(--cn-text-dim)}.cn-text-accent{color:var(--cn-accent-text)}.cn-text-mono{font-family:var(--cn-font-mono)}.cn-text-xs{font-size:var(--cn-text-xs)}.cn-text-sm{font-size:var(--cn-text-sm)}.cn-text-base{font-size:var(--cn-text-base)}.cn-text-md{font-size:var(--cn-text-md)}.cn-text-lg{font-size:var(--cn-text-lg)}.cn-text-xl{font-size:var(--cn-text-xl)}.cn-label{font-size:var(--cn-text-sm);font-weight:500;letter-spacing:0.05em;text-transform:uppercase;color:var(--cn-text-dim)}.cn-container{width:100%;max-width:var(--cn-container-max);margin:0 auto;padding:0 var(--cn-space-6)}.cn-container-sm{max-width:640px}.cn-container-md{max-width:900px}.cn-container-lg{max-width:1200px}.cn-container-xl{max-width:1400px}.cn-container-fluid{max-width:100%}.cn-flex{display:flex}.cn-flex-col{flex-direction:column}.cn-flex-wrap{flex-wrap:wrap}.cn-items-center{align-items:center}.cn-items-start{align-items:flex-start}.cn-items-end{align-items:flex-end}.cn-justify-center{justify-content:center}.cn-justify-between{justify-content:space-between}.cn-justify-end{justify-content:flex-end}.cn-flex-1{flex:1}.cn-gap-1{gap:var(--cn-space-1)}.cn-gap-2{gap:var(--cn-space-2)}.cn-gap-3{gap:var(--cn-space-3)}.cn-gap-4{gap:var(--cn-space-4)}.cn-gap-6{gap:var(--cn-space-6)}.cn-grid{display:grid}.cn-grid-2{grid-template-columns:repeat(2,1fr)}.cn-grid-3{grid-template-columns:repeat(3,1fr)}.cn-grid-4{grid-template-columns:repeat(4,1fr)}.cn-stack{display:flex;flex-direction:column}.cn-stack>* + *{margin-top:var(--cn-space-4)}.cn-stack-sm>* + *{margin-top:var(--cn-space-2)}.cn-stack-lg>* + *{margin-top:var(--cn-space-6)}.cn-hstack{display:flex;flex-direction:row;align-items:center}.cn-hstack>* + *{margin-left:var(--cn-space-4)}.cn-hstack-sm>* + *{margin-left:var(--cn-space-2)}.cn-hstack-lg>* + *{margin-left:var(--cn-space-6)}.cn-section{margin-bottom:var(--cn-space-10)}.cn-section-sm{margin-bottom:var(--cn-space-6)}.cn-section-lg{margin-bottom:var(--cn-space-12)}.cn-divider{height:1px;background:var(--cn-border);margin:var(--cn-space-6) 0}.cn-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cn-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--cn-space-2);font-family:var(--cn-font);font-size:var(--cn-text-base);font-weight:500;padding:var(--cn-space-2) var(--cn-space-4);border-radius:var(--cn-radius);border:1px solid var(--cn-border);cursor:pointer;transition:all var(--cn-transition);background:var(--cn-surface-2);color:var(--cn-text);text-decoration:none;white-space:nowrap}.cn-btn:hover{border-color:var(--cn-border-hover);background:var(--cn-surface-3)}.cn-btn:focus{outline:none;box-shadow:0 0 0 2px var(--cn-accent-glow)}.cn-btn:active{transform:translateY(1px)}.cn-btn:disabled{opacity:0.5;cursor:not-allowed;pointer-events:none}.cn-btn-primary{background:var(--cn-accent);border-color:var(--cn-accent);color:var(--cn-text)}.cn-btn-primary:hover{background:var(--cn-accent-hover);border-color:var(--cn-accent-hover)}.cn-btn-ghost{background:transparent;border-color:transparent}.cn-btn-ghost:hover{background:var(--cn-surface-2)}.cn-btn-outline{background:transparent}.cn-btn-outline:hover{background:var(--cn-surface-2)}.cn-btn-danger{background:var(--cn-error);border-color:var(--cn-error);color:var(--cn-text)}.cn-btn-danger:hover{background:#6a1a1a;border-color:#6a1a1a}.cn-btn-success{background:var(--cn-success);border-color:var(--cn-success);color:var(--cn-text)}.cn-btn-success:hover{background:#256b32;border-color:#256b32}.cn-btn-sm{padding:var(--cn-space-1) var(--cn-space-3);font-size:var(--cn-text-sm)}.cn-btn-lg{padding:var(--cn-space-3) var(--cn-space-6);font-size:var(--cn-text-lg)}.cn-btn-icon{padding:var(--cn-space-2)}.cn-btn-icon.cn-btn-sm{padding:var(--cn-space-1)}.cn-btn-icon.cn-btn-lg{padding:var(--cn-space-3)}.cn-btn-group{display:inline-flex}.cn-btn-group .cn-btn{border-radius:0}.cn-btn-group .cn-btn:first-child{border-radius:var(--cn-radius) 0 0 var(--cn-radius)}.cn-btn-group .cn-btn:last-child{border-radius:0 var(--cn-radius) var(--cn-radius) 0}.cn-btn-group .cn-btn:not(:last-child){border-right:none}.cn-card{background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius-lg);padding:var(--cn-space-5);transition:border-color var(--cn-transition)}.cn-card:hover{border-color:var(--cn-border-hover)}.cn-card-clickable{cursor:pointer}.cn-card-clickable:hover{background:var(--cn-surface-2)}.cn-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--cn-space-4)}.cn-card-title{font-size:var(--cn-text-md);font-weight:500;color:var(--cn-text)}.cn-card-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted);margin-top:var(--cn-space-1)}.cn-card-body{color:var(--cn-text-muted)}.cn-card-footer{margin-top:var(--cn-space-4);padding-top:var(--cn-space-4);border-top:1px solid var(--cn-border)}.cn-card-icon{width:36px;height:36px;border-radius:var(--cn-radius-sm);background:var(--cn-accent-glow);border:1px solid var(--cn-accent);display:flex;align-items:center;justify-content:center;margin-bottom:var(--cn-space-3)}.cn-card-icon svg{width:18px;height:18px;stroke:var(--cn-accent);fill:none;stroke-width:1.5}.cn-input{font-family:var(--cn-font);font-size:var(--cn-text-base);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-2) var(--cn-space-3);color:var(--cn-text);outline:none;transition:border-color var(--cn-transition),box-shadow var(--cn-transition);width:100%}.cn-input:hover{border-color:var(--cn-border-hover)}.cn-input:focus{border-color:var(--cn-accent);box-shadow:0 0 0 3px var(--cn-accent-glow)}.cn-input::placeholder{color:var(--cn-text-dim)}.cn-input:disabled{opacity:0.5;cursor:not-allowed;background:var(--cn-surface-2)}.cn-input-error{border-color:var(--cn-error)}.cn-input-error:focus{box-shadow:0 0 0 3px rgba(180,60,60,0.2)}.cn-input-sm{padding:var(--cn-space-1) var(--cn-space-2);font-size:var(--cn-text-sm)}.cn-input-lg{padding:var(--cn-space-3) var(--cn-space-4);font-size:var(--cn-text-lg)}.cn-input-icon-wrapper{position:relative}.cn-input-icon-wrapper .cn-input{padding-left:var(--cn-space-10)}.cn-input-icon-wrapper .cn-input-icon{position:absolute;left:var(--cn-space-3);top:50%;transform:translateY(-50%);color:var(--cn-text-muted);pointer-events:none}.cn-input-icon-wrapper .cn-input-icon svg{width:16px;height:16px}.cn-input-action-wrapper{position:relative}.cn-input-action-wrapper .cn-input{padding-right:var(--cn-space-10)}.cn-input-action-wrapper .cn-input-action{position:absolute;right:var(--cn-space-2);top:50%;transform:translateY(-50%)}.cn-textarea{min-height:100px;resize:vertical}.cn-form-group{display:flex;flex-direction:column;gap:var(--cn-space-2)}.cn-form-label{font-size:var(--cn-text-sm);color:var(--cn-text-muted);font-weight:500}.cn-form-error{font-size:var(--cn-text-xs);color:var(--cn-error-text)}.cn-form-help{font-size:var(--cn-text-xs);color:var(--cn-text-dim)}.cn-checkbox,.cn-radio{display:inline-flex;align-items:center;gap:var(--cn-space-2);cursor:pointer;user-select:none}.cn-checkbox input,.cn-radio input{position:absolute;opacity:0;width:0;height:0}.cn-checkbox-box,.cn-radio-box{width:18px;height:18px;border:1px solid var(--cn-border);background:var(--cn-surface);display:flex;align-items:center;justify-content:center;transition:all var(--cn-transition);flex-shrink:0}.cn-checkbox-box{border-radius:var(--cn-radius-sm)}.cn-radio-box{border-radius:50%}.cn-checkbox:hover .cn-checkbox-box,.cn-radio:hover .cn-radio-box{border-color:var(--cn-border-hover)}.cn-checkbox input:checked + .cn-checkbox-box{background:var(--cn-accent);border-color:var(--cn-accent)}.cn-checkbox-box::after{content:'';width:5px;height:9px;border:solid var(--cn-text);border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform var(--cn-transition-fast)}.cn-checkbox input:checked + .cn-checkbox-box::after{transform:rotate(45deg) scale(1)}.cn-radio-box::after{content:'';width:8px;height:8px;border-radius:50%;background:var(--cn-accent);transform:scale(0);transition:transform var(--cn-transition-fast)}.cn-radio input:checked + .cn-radio-box::after{transform:scale(1)}.cn-checkbox-label,.cn-radio-label{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-checkbox.disabled,.cn-radio.disabled{opacity:0.5;cursor:not-allowed}.cn-select-wrapper{position:relative;display:inline-block}.cn-select{font-family:var(--cn-font);font-size:var(--cn-text-base);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-2) var(--cn-space-8) var(--cn-space-2) var(--cn-space-3);color:var(--cn-text);cursor:pointer;appearance:none;width:100%;transition:border-color var(--cn-transition)}.cn-select:hover{border-color:var(--cn-border-hover)}.cn-select:focus{outline:none;border-color:var(--cn-accent);box-shadow:0 0 0 3px var(--cn-accent-glow)}.cn-select-wrapper::after{content:'';position:absolute;right:var(--cn-space-3);top:50%;transform:translateY(-50%);width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid var(--cn-text-muted);pointer-events:none}.cn-select option{background:var(--cn-surface);color:var(--cn-text)}.cn-slider{-webkit-appearance:none;width:100%;height:4px;border-radius:4px;background:var(--cn-surface-3);outline:none;cursor:pointer}.cn-slider::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:var(--cn-accent);border:2px solid var(--cn-text);cursor:pointer;transition:transform var(--cn-transition)}.cn-slider::-webkit-slider-thumb:hover{transform:scale(1.1)}.cn-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--cn-accent);border:2px solid var(--cn-text);cursor:pointer}.cn-toggle{width:40px;height:22px;background:var(--cn-surface-3);border:1px solid var(--cn-border);border-radius:var(--cn-radius-full);position:relative;cursor:pointer;transition:background var(--cn-transition),border-color var(--cn-transition)}.cn-toggle::after{content:'';position:absolute;width:16px;height:16px;border-radius:50%;background:var(--cn-text-muted);top:2px;left:2px;transition:transform var(--cn-transition),background var(--cn-transition)}.cn-toggle.on{background:var(--cn-accent);border-color:var(--cn-accent)}.cn-toggle.on::after{transform:translateX(18px);background:var(--cn-text)}.cn-toggle-label{font-size:var(--cn-text-base);color:var(--cn-text-muted)}.cn-badge{display:inline-flex;align-items:center;gap:var(--cn-space-1);font-size:var(--cn-text-xs);font-weight:500;padding:var(--cn-space-1) var(--cn-space-2);border-radius:var(--cn-radius-full);border:1px solid}.cn-badge-default{background:var(--cn-surface-2);border-color:var(--cn-border);color:var(--cn-text-muted)}.cn-badge-accent{background:var(--cn-accent-glow);border-color:var(--cn-accent);color:var(--cn-accent-text)}.cn-badge-success{background:rgba(30,80,40,0.3);border-color:var(--cn-success-border);color:var(--cn-success-text)}.cn-badge-warning{background:rgba(80,60,20,0.3);border-color:var(--cn-warning-border);color:var(--cn-warning-text)}.cn-badge-error{background:rgba(80,20,20,0.3);border-color:var(--cn-error-border);color:var(--cn-error-text)}.cn-badge-info{background:rgba(20,60,100,0.3);border-color:var(--cn-info-border);color:var(--cn-info-text)}.cn-badge-solid{border-color:transparent}.cn-badge-solid.cn-badge-accent{background:var(--cn-accent);color:var(--cn-text)}.cn-badge-solid.cn-badge-success{background:var(--cn-success);color:var(--cn-text)}.cn-badge-solid.cn-badge-warning{background:var(--cn-warning);color:var(--cn-text)}.cn-badge-solid.cn-badge-error{background:var(--cn-error);color:var(--cn-text)}.cn-tag{display:inline-flex;align-items:center;gap:var(--cn-space-2);font-size:var(--cn-text-sm);padding:var(--cn-space-1) var(--cn-space-3);background:var(--cn-surface-2);border:1px solid var(--cn-border);border-radius:var(--cn-radius);color:var(--cn-text)}.cn-tag-remove{display:flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background:var(--cn-surface-3);cursor:pointer;transition:background var(--cn-transition)}.cn-tag-remove:hover{background:var(--cn-error)}.cn-tag-remove svg{width:8px;height:8px;stroke:var(--cn-text-muted)}.cn-stat{background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-4)}.cn-stat-value{font-size:var(--cn-text-2xl);font-weight:600;color:var(--cn-text)}.cn-stat-label{font-size:var(--cn-text-xs);color:var(--cn-text-muted);margin-top:var(--cn-space-1)}.cn-stat-delta{font-size:var(--cn-text-xs);margin-top:var(--cn-space-2);display:flex;align-items:center;gap:var(--cn-space-1)}.cn-stat-delta-up{color:var(--cn-success-text)}.cn-stat-delta-down{color:var(--cn-error-text)}.cn-progress{height:4px;background:var(--cn-surface-3);border-radius:var(--cn-radius-full);overflow:hidden}.cn-progress-bar{height:100%;background:var(--cn-accent);border-radius:var(--cn-radius-full);transition:width var(--cn-transition-slow)}.cn-progress-success .cn-progress-bar{background:var(--cn-success-text)}.cn-progress-warning .cn-progress-bar{background:var(--cn-warning-text)}.cn-progress-error .cn-progress-bar{background:var(--cn-error-text)}.cn-progress-lg{height:8px}.cn-progress-label{display:flex;justify-content:space-between;font-size:var(--cn-text-sm);color:var(--cn-text-muted);margin-bottom:var(--cn-space-1)}.cn-nav{display:flex;gap:var(--cn-space-1);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);padding:var(--cn-space-1);width:fit-content}.cn-nav-item{font-family:var(--cn-font);font-size:var(--cn-text-sm);font-weight:500;padding:var(--cn-space-2) var(--cn-space-4);border-radius:var(--cn-radius-sm);border:none;cursor:pointer;background:transparent;color:var(--cn-text-muted);transition:all var(--cn-transition)}.cn-nav-item:hover:not(.cn-nav-active){color:var(--cn-text)}.cn-nav-active{background:var(--cn-surface-3);color:var(--cn-text)}.cn-tabs{border-bottom:1px solid var(--cn-border)}.cn-tabs-list{display:flex;gap:var(--cn-space-1)}.cn-tab{font-family:var(--cn-font);font-size:var(--cn-text-base);font-weight:500;padding:var(--cn-space-3) var(--cn-space-4);border:none;border-bottom:2px solid transparent;cursor:pointer;background:transparent;color:var(--cn-text-muted);transition:all var(--cn-transition);margin-bottom:-1px}.cn-tab:hover{color:var(--cn-text)}.cn-tab.cn-tab-active{color:var(--cn-accent-text);border-bottom-color:var(--cn-accent)}.cn-tab-content{padding:var(--cn-space-4) 0}.cn-tab-panel{display:none}.cn-tab-panel.cn-tab-panel-active{display:block}.cn-breadcrumb{display:flex;align-items:center;gap:var(--cn-space-2);font-size:var(--cn-text-sm)}.cn-breadcrumb-item{color:var(--cn-text-muted);text-decoration:none;transition:color var(--cn-transition)}.cn-breadcrumb-item:hover{color:var(--cn-text)}.cn-breadcrumb-separator{color:var(--cn-text-dim)}.cn-breadcrumb-current{color:var(--cn-text)}.cn-header{height:var(--cn-header-height);background:var(--cn-surface);border-bottom:1px solid var(--cn-border);display:flex;align-items:center;padding:0 var(--cn-space-6);position:sticky;top:0;z-index:var(--cn-z-sticky)}.cn-header-brand{display:flex;align-items:center;gap:var(--cn-space-3);font-size:var(--cn-text-lg);font-weight:600;color:var(--cn-text);text-decoration:none}.cn-header-nav{display:flex;align-items:center;gap:var(--cn-space-1);margin-left:var(--cn-space-8)}.cn-header-actions{margin-left:auto;display:flex;align-items:center;gap:var(--cn-space-3)}.cn-sidebar{width:var(--cn-sidebar-width);height:100vh;background:var(--cn-surface);border-right:1px solid var(--cn-border);position:fixed;left:0;top:0;z-index:var(--cn-z-fixed);display:flex;flex-direction:column}.cn-sidebar-header{padding:var(--cn-space-5);border-bottom:1px solid var(--cn-border)}.cn-sidebar-nav{flex:1;padding:var(--cn-space-3);overflow-y:auto}.cn-sidebar-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-3);border-radius:var(--cn-radius);color:var(--cn-text-muted);text-decoration:none;transition:all var(--cn-transition);cursor:pointer}.cn-sidebar-item:hover{background:var(--cn-surface-2);color:var(--cn-text)}.cn-sidebar-item.cn-sidebar-active{background:var(--cn-accent-glow);color:var(--cn-accent-text)}.cn-sidebar-footer{padding:var(--cn-space-4);border-top:1px solid var(--cn-border)}.cn-alert{padding:var(--cn-space-4);border-radius:var(--cn-radius);border:1px solid;display:flex;align-items:flex-start;gap:var(--cn-space-3)}.cn-alert-icon{flex-shrink:0;width:20px;height:20px}.cn-alert-content{flex:1}.cn-alert-title{font-weight:500;color:var(--cn-text);margin-bottom:var(--cn-space-1)}.cn-alert-message{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-alert-close{flex-shrink:0;padding:var(--cn-space-1);background:transparent;border:none;color:var(--cn-text-muted);cursor:pointer;border-radius:var(--cn-radius-sm);transition:background var(--cn-transition)}.cn-alert-close:hover{background:var(--cn-surface-3)}.cn-alert-info{background:rgba(20,60,100,0.15);border-color:var(--cn-info-border)}.cn-alert-success{background:rgba(30,80,40,0.15);border-color:var(--cn-success-border)}.cn-alert-warning{background:rgba(80,60,20,0.15);border-color:var(--cn-warning-border)}.cn-alert-error{background:rgba(80,20,20,0.15);border-color:var(--cn-error-border)}.cn-toast-container{position:fixed;bottom:var(--cn-space-6);right:var(--cn-space-6);z-index:var(--cn-z-toast);display:flex;flex-direction:column;gap:var(--cn-space-3)}.cn-toast{min-width:300px;max-width:450px;padding:var(--cn-space-4);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);box-shadow:var(--cn-shadow-lg);display:flex;align-items:flex-start;gap:var(--cn-space-3);animation:cn-toast-in 0.3s ease}@keyframes cn-toast-in{from{opacity:0;transform:translateX(100%)}to{opacity:1;transform:translateX(0)}}.cn-toast.cn-toast-leaving{animation:cn-toast-out 0.2s ease forwards}@keyframes cn-toast-out{to{opacity:0;transform:translateX(100%)}}.cn-modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:var(--cn-z-modal-backdrop);display:flex;align-items:center;justify-content:center;padding:var(--cn-space-6);opacity:0;visibility:hidden;transition:opacity var(--cn-transition),visibility var(--cn-transition)}.cn-modal-backdrop.cn-modal-open{opacity:1;visibility:visible}.cn-modal{background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius-lg);max-width:500px;width:100%;max-height:calc(100vh - var(--cn-space-12));overflow:auto;transform:scale(0.95);transition:transform var(--cn-transition)}.cn-modal-backdrop.cn-modal-open .cn-modal{transform:scale(1)}.cn-modal-header{display:flex;align-items:center;justify-content:space-between;padding:var(--cn-space-5);border-bottom:1px solid var(--cn-border)}.cn-modal-title{font-size:var(--cn-text-lg);font-weight:600}.cn-modal-close{padding:var(--cn-space-2);background:transparent;border:none;color:var(--cn-text-muted);cursor:pointer;border-radius:var(--cn-radius);transition:background var(--cn-transition)}.cn-modal-close:hover{background:var(--cn-surface-2)}.cn-modal-body{padding:var(--cn-space-5)}.cn-modal-footer{display:flex;justify-content:flex-end;gap:var(--cn-space-3);padding:var(--cn-space-4) var(--cn-space-5);border-top:1px solid var(--cn-border)}.cn-modal-sm{max-width:400px}.cn-modal-lg{max-width:700px}.cn-modal-xl{max-width:900px}.cn-tooltip{position:relative}.cn-tooltip-content{position:absolute;bottom:calc(100% + var(--cn-space-2));left:50%;transform:translateX(-50%);padding:var(--cn-space-2) var(--cn-space-3);background:var(--cn-surface-3);border:1px solid var(--cn-border);border-radius:var(--cn-radius-sm);font-size:var(--cn-text-xs);color:var(--cn-text);white-space:nowrap;opacity:0;visibility:hidden;transition:opacity var(--cn-transition),visibility var(--cn-transition);z-index:var(--cn-z-tooltip)}.cn-tooltip:hover .cn-tooltip-content{opacity:1;visibility:visible}.cn-tooltip-content::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid transparent;border-top-color:var(--cn-surface-3)}.cn-spinner{width:24px;height:24px;border:2px solid var(--cn-surface-3);border-top-color:var(--cn-accent);border-radius:50%;animation:cn-spin 0.8s linear infinite}@keyframes cn-spin{to{transform:rotate(360deg)}}.cn-spinner-sm{width:16px;height:16px;border-width:2px}.cn-spinner-lg{width:40px;height:40px;border-width:3px}.cn-skeleton{background:linear-gradient( 90deg,var(--cn-surface-2) 25%,var(--cn-surface-3) 50%,var(--cn-surface-2) 75% );background-size:200% 100%;animation:cn-skeleton 1.5s infinite;border-radius:var(--cn-radius-sm)}@keyframes cn-skeleton{0%{background-position:200% 0}100%{background-position:-200% 0}}.cn-skeleton-text{height:var(--cn-text-md);margin-bottom:var(--cn-space-2)}.cn-skeleton-title{height:var(--cn-text-xl);width:60%;margin-bottom:var(--cn-space-3)}.cn-skeleton-avatar{width:40px;height:40px;border-radius:50%}.cn-table-wrapper{overflow-x:auto;border:1px solid var(--cn-border);border-radius:var(--cn-radius)}.cn-table{width:100%;border-collapse:collapse}.cn-table th,.cn-table td{padding:var(--cn-space-3) var(--cn-space-4);text-align:left}.cn-table th{background:var(--cn-surface);font-size:var(--cn-text-xs);font-weight:500;text-transform:uppercase;letter-spacing:0.05em;color:var(--cn-text-muted);border-bottom:1px solid var(--cn-border)}.cn-table td{border-bottom:1px solid var(--cn-border);font-size:var(--cn-text-base);color:var(--cn-text)}.cn-table tbody tr:last-child td{border-bottom:none}.cn-table tbody tr:hover{background:var(--cn-surface)}.cn-table-sortable th{cursor:pointer;user-select:none}.cn-table-sortable th:hover{background:var(--cn-surface-2)}.cn-list{border:1px solid var(--cn-border);border-radius:var(--cn-radius);overflow:hidden}.cn-list-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-3) var(--cn-space-4);border-bottom:1px solid var(--cn-border);transition:background var(--cn-transition)}.cn-list-item:last-child{border-bottom:none}.cn-list-item:hover{background:var(--cn-surface)}.cn-list-item-clickable{cursor:pointer}.cn-list-item-icon{flex-shrink:0}.cn-list-item-content{flex:1}.cn-list-item-title{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-list-item-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-list-item-actions{flex-shrink:0}.cn-accordion{border:1px solid var(--cn-border);border-radius:var(--cn-radius)}.cn-accordion-item{border-bottom:1px solid var(--cn-border)}.cn-accordion-item:last-child{border-bottom:none}.cn-accordion-header{display:flex;align-items:center;justify-content:space-between;padding:var(--cn-space-4);cursor:pointer;transition:background var(--cn-transition)}.cn-accordion-header:hover{background:var(--cn-surface)}.cn-accordion-title{font-weight:500}.cn-accordion-icon{transition:transform var(--cn-transition)}.cn-accordion-item.cn-accordion-open .cn-accordion-icon{transform:rotate(180deg)}.cn-accordion-content{padding:0 var(--cn-space-4) var(--cn-space-4);display:none}.cn-accordion-item.cn-accordion-open .cn-accordion-content{display:block}.cn-avatar{width:40px;height:40px;border-radius:50%;background:var(--cn-accent);display:flex;align-items:center;justify-content:center;font-size:var(--cn-text-sm);font-weight:600;color:var(--cn-text);overflow:hidden}.cn-avatar img{width:100%;height:100%;object-fit:cover}.cn-avatar-sm{width:32px;height:32px;font-size:var(--cn-text-xs)}.cn-avatar-lg{width:48px;height:48px;font-size:var(--cn-text-base)}.cn-avatar-xl{width:64px;height:64px;font-size:var(--cn-text-lg)}.cn-avatar-group{display:flex}.cn-avatar-group .cn-avatar{border:2px solid var(--cn-bg);margin-left:-10px}.cn-avatar-group .cn-avatar:first-child{margin-left:0}.cn-dropdown{position:relative;display:inline-block}.cn-dropdown-menu{position:absolute;top:100%;left:0;min-width:180px;background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);box-shadow:var(--cn-shadow);z-index:var(--cn-z-dropdown);opacity:0;visibility:hidden;transform:translateY(-8px);transition:all var(--cn-transition)}.cn-dropdown.cn-dropdown-open .cn-dropdown-menu{opacity:1;visibility:visible;transform:translateY(var(--cn-space-1))}.cn-dropdown-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-2) var(--cn-space-4);font-size:var(--cn-text-base);color:var(--cn-text);cursor:pointer;transition:background var(--cn-transition)}.cn-dropdown-item:hover{background:var(--cn-surface-2)}.cn-dropdown-item:first-child{border-radius:var(--cn-radius) var(--cn-radius) 0 0}.cn-dropdown-item:last-child{border-radius:0 0 var(--cn-radius) var(--cn-radius)}.cn-dropdown-divider{height:1px;background:var(--cn-border);margin:var(--cn-space-2) 0}.cn-pagination{display:flex;align-items:center;gap:var(--cn-space-1)}.cn-pagination-item{min-width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:var(--cn-text-sm);border-radius:var(--cn-radius);border:1px solid var(--cn-border);background:var(--cn-surface);color:var(--cn-text-muted);cursor:pointer;transition:all var(--cn-transition)}.cn-pagination-item:hover{border-color:var(--cn-border-hover);color:var(--cn-text)}.cn-pagination-item.cn-pagination-active{background:var(--cn-accent);border-color:var(--cn-accent);color:var(--cn-text)}.cn-pagination-item:disabled{opacity:0.5;cursor:not-allowed}.cn-file-input{position:relative}.cn-file-input input[type="file"]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer}.cn-file-input-label{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--cn-space-3);padding:var(--cn-space-8);background:var(--cn-surface);border:2px dashed var(--cn-border);border-radius:var(--cn-radius);transition:border-color var(--cn-transition)}.cn-file-input:hover .cn-file-input-label{border-color:var(--cn-border-hover)}.cn-file-input-icon{width:40px;height:40px;color:var(--cn-text-muted)}.cn-file-input-text{font-size:var(--cn-text-base);color:var(--cn-text-muted)}.cn-file-input-text span{color:var(--cn-accent-text);text-decoration:underline}.cn-search{position:relative}.cn-search-input{padding-left:var(--cn-space-10);padding-right:var(--cn-space-10)}.cn-search-icon{position:absolute;left:var(--cn-space-3);top:50%;transform:translateY(-50%);color:var(--cn-text-muted);pointer-events:none;width:16px !important;height:16px !important;min-width:16px;min-height:16px;max-width:16px;max-height:16px}.cn-search-results{position:absolute;top:100%;left:0;right:0;margin-top:var(--cn-space-1);background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius);box-shadow:var(--cn-shadow);max-height:300px;overflow-y:auto;z-index:var(--cn-z-dropdown);display:none}.cn-search.cn-search-open .cn-search-results{display:block}.cn-search-result{padding:var(--cn-space-3) var(--cn-space-4);cursor:pointer;transition:background var(--cn-transition)}.cn-search-result:hover{background:var(--cn-surface-2)}.cn-search-result-title{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-search-result-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-command-palette{position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:var(--cn-z-modal);display:flex;align-items:flex-start;justify-content:center;padding-top:15vh;opacity:0;visibility:hidden;transition:opacity var(--cn-transition),visibility var(--cn-transition)}.cn-command-palette.cn-command-palette-open{opacity:1;visibility:visible}.cn-command-palette-inner{width:100%;max-width:560px;background:var(--cn-surface);border:1px solid var(--cn-border);border-radius:var(--cn-radius-lg);box-shadow:var(--cn-shadow-lg);transform:scale(0.95);transition:transform var(--cn-transition)}.cn-command-palette-open .cn-command-palette-inner{transform:scale(1)}.cn-command-palette-input{width:100%;padding:var(--cn-space-5);background:transparent;border:none;border-bottom:1px solid var(--cn-border);font-size:var(--cn-text-lg);color:var(--cn-text);outline:none}.cn-command-palette-results{max-height:400px;overflow-y:auto;padding:var(--cn-space-2)}.cn-command-item{display:flex;align-items:center;gap:var(--cn-space-3);padding:var(--cn-space-3);border-radius:var(--cn-radius);cursor:pointer;transition:background var(--cn-transition)}.cn-command-item:hover,.cn-command-item.cn-command-item-active{background:var(--cn-surface-2)}.cn-command-item-icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:var(--cn-surface-3);border-radius:var(--cn-radius-sm)}.cn-command-item-title{font-size:var(--cn-text-base);color:var(--cn-text)}.cn-command-item-subtitle{font-size:var(--cn-text-sm);color:var(--cn-text-muted)}.cn-command-item-kbd{margin-left:auto;font-size:var(--cn-text-xs);padding:var(--cn-space-1) var(--cn-space-2);background:var(--cn-surface-3);border-radius:var(--cn-radius-sm);color:var(--cn-text-muted)}.cn-footer{background:var(--cn-surface);border-top:1px solid var(--cn-border);padding:var(--cn-space-6);margin-top:auto}.cn-footer-content{display:flex;align-items:center;justify-content:space-between}.cn-footer-links{display:flex;gap:var(--cn-space-6)}.cn-footer-link{font-size:var(--cn-text-sm);color:var(--cn-text-muted);text-decoration:none;transition:color var(--cn-transition)}.cn-footer-link:hover{color:var(--cn-text)}.cn-footer-copyright{font-size:var(--cn-text-sm);color:var(--cn-text-dim)}.cn-m-0{margin:0}.cn-mt-0{margin-top:0}.cn-mb-0{margin-bottom:0}.cn-ml-0{margin-left:0}.cn-mr-0{margin-right:0}.cn-m-auto{margin:auto}.cn-m-1{margin:var(--cn-space-1)}.cn-m-2{margin:var(--cn-space-2)}.cn-m-3{margin:var(--cn-space-3)}.cn-m-4{margin:var(--cn-space-4)}.cn-m-6{margin:var(--cn-space-6)}.cn-mt-1{margin-top:var(--cn-space-1)}.cn-mt-2{margin-top:var(--cn-space-2)}.cn-mt-3{margin-top:var(--cn-space-3)}.cn-mt-4{margin-top:var(--cn-space-4)}.cn-mt-6{margin-top:var(--cn-space-6)}.cn-mb-1{margin-bottom:var(--cn-space-1)}.cn-mb-2{margin-bottom:var(--cn-space-2)}.cn-mb-3{margin-bottom:var(--cn-space-3)}.cn-mb-4{margin-bottom:var(--cn-space-4)}.cn-mb-6{margin-bottom:var(--cn-space-6)}.cn-p-0{padding:0}.cn-p-1{padding:var(--cn-space-1)}.cn-p-2{padding:var(--cn-space-2)}.cn-p-3{padding:var(--cn-space-3)}.cn-p-4{padding:var(--cn-space-4)}.cn-p-6{padding:var(--cn-space-6)}.cn-w-full{width:100%}.cn-h-full{height:100%}.cn-min-h-screen{min-height:100vh}.cn-text-left{text-align:left}.cn-text-center{text-align:center}.cn-text-right{text-align:right}.cn-hidden{display:none}.cn-block{display:block}.cn-inline{display:inline}.cn-inline-block{display:inline-block}.cn-overflow-hidden{overflow:hidden}.cn-overflow-auto{overflow:auto}.cn-cursor-pointer{cursor:pointer}.cn-cursor-not-allowed{cursor:not-allowed}.cn-pointer-events-none{pointer-events:none}.cn-opacity-0{opacity:0}.cn-opacity-50{opacity:0.5}.cn-opacity-100{opacity:1}.cn-rounded{border-radius:var(--cn-radius)}.cn-rounded-full{border-radius:var(--cn-radius-full)}.cn-border{border:1px solid var(--cn-border)}.cn-shadow{box-shadow:var(--cn-shadow)}.cn-shadow-lg{box-shadow:var(--cn-shadow-lg)}.cn-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:768px){:root{--cn-sidebar-width:100%}.cn-container{padding:0 var(--cn-space-4)}.cn-grid-2,.cn-grid-3,.cn-grid-4{grid-template-columns:1fr}.cn-modal{max-width:calc(100% - var(--cn-space-6));margin:var(--cn-space-3)}}