drf-to-mkdoc 0.1.5__py3-none-any.whl → 1.0.7__py3-none-any.whl

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.

Potentially problematic release.


This version of drf-to-mkdoc might be problematic. Click here for more details.

Files changed (34) hide show
  1. drf_to_mkdoc/__init__.py +1 -1
  2. drf_to_mkdoc/apps.py +6 -2
  3. drf_to_mkdoc/conf/defaults.py +0 -1
  4. drf_to_mkdoc/conf/settings.py +8 -5
  5. drf_to_mkdoc/management/commands/build_docs.py +61 -20
  6. drf_to_mkdoc/management/commands/generate_docs.py +1 -2
  7. drf_to_mkdoc/management/commands/generate_model_docs.py +37 -7
  8. drf_to_mkdoc/static/drf-to-mkdoc/javascripts/endpoints-filter.js +189 -0
  9. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/accessibility.css +21 -0
  10. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/animations.css +11 -0
  11. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/badges.css +54 -0
  12. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/base.css +15 -0
  13. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/endpoint-content.css +48 -0
  14. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/endpoints-grid.css +75 -0
  15. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/filter-section.css +209 -0
  16. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/fixes.css +44 -0
  17. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/layout.css +31 -0
  18. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/loading.css +35 -0
  19. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/responsive.css +89 -0
  20. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/sections.css +35 -0
  21. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/stats.css +34 -0
  22. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/tags.css +92 -0
  23. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/theme-toggle.css +30 -0
  24. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/endpoints/variables.css +30 -0
  25. drf_to_mkdoc/static/drf-to-mkdoc/stylesheets/extra.css +358 -0
  26. drf_to_mkdoc/utils/common.py +31 -26
  27. drf_to_mkdoc/utils/endpoint_generator.py +130 -131
  28. drf_to_mkdoc/utils/extractors/query_parameter_extractors.py +7 -7
  29. {drf_to_mkdoc-0.1.5.dist-info → drf_to_mkdoc-1.0.7.dist-info}/METADATA +1 -1
  30. drf_to_mkdoc-1.0.7.dist-info/RECORD +43 -0
  31. drf_to_mkdoc-0.1.5.dist-info/RECORD +0 -25
  32. {drf_to_mkdoc-0.1.5.dist-info → drf_to_mkdoc-1.0.7.dist-info}/WHEEL +0 -0
  33. {drf_to_mkdoc-0.1.5.dist-info → drf_to_mkdoc-1.0.7.dist-info}/licenses/LICENSE +0 -0
  34. {drf_to_mkdoc-0.1.5.dist-info → drf_to_mkdoc-1.0.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,75 @@
1
+ /* ===== ENDPOINTS GRID ===== */
2
+ .endpoints-grid {
3
+ display: grid;
4
+ grid-template-columns: 1fr;
5
+ gap: 16px;
6
+ margin: 24px 0;
7
+ transition: all 0.3s ease;
8
+ width: 100%;
9
+ }
10
+
11
+ .endpoints-grid.filtering {
12
+ opacity: 0.7;
13
+ }
14
+
15
+ /* ===== ENDPOINT CARDS ===== */
16
+ .endpoint-card {
17
+ position: relative;
18
+ display: flex;
19
+ align-items: center;
20
+ gap: 16px;
21
+ padding: 20px;
22
+ background: var(--bg-secondary);
23
+ border: 1px solid var(--border-color);
24
+ border-radius: 12px;
25
+ transition: all 0.3s ease;
26
+ text-decoration: none;
27
+ color: var(--text-primary);
28
+ box-shadow: var(--shadow);
29
+ overflow: hidden;
30
+ width: 100%;
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ .endpoint-card::before {
35
+ content: '';
36
+ position: absolute;
37
+ top: 0;
38
+ left: 0;
39
+ right: 0;
40
+ bottom: 0;
41
+ background: linear-gradient(135deg, rgba(59, 130, 246, 0.1), rgba(147, 51, 234, 0.1));
42
+ opacity: 0;
43
+ transition: opacity 0.3s ease;
44
+ z-index: 1;
45
+ }
46
+
47
+ .endpoint-card:hover::before {
48
+ opacity: 1;
49
+ }
50
+
51
+ .endpoint-card:hover {
52
+ transform: translateY(-2px);
53
+ box-shadow: var(--shadow-hover);
54
+ }
55
+
56
+ .endpoint-card:focus {
57
+ outline: 2px solid var(--accent-primary);
58
+ outline-offset: 2px;
59
+ }
60
+
61
+ .endpoint-card.hidden {
62
+ opacity: 0;
63
+ transform: scale(0.95);
64
+ pointer-events: none;
65
+ position: absolute;
66
+ height: 0;
67
+ margin: 0;
68
+ padding: 0;
69
+ border: none;
70
+ }
71
+
72
+ .endpoint-card > * {
73
+ position: relative;
74
+ z-index: 2;
75
+ }
@@ -0,0 +1,209 @@
1
+ /* Filter Section - Fixed Layout */
2
+ .filter-section,
3
+ .filter-sidebar {
4
+ background: linear-gradient(135deg, #e0f2ff, #ffffff);
5
+ border: 1px solid var(--border-color);
6
+ border-radius: 16px;
7
+ padding: 24px;
8
+ margin-bottom: 32px;
9
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
10
+ transition: all 0.3s ease;
11
+ width: 100%;
12
+ max-width: 100%;
13
+ box-sizing: border-box; /* Prevents overflow */
14
+ position: relative; /* Ensures proper positioning */
15
+ z-index: 1; /* Prevents overlap with other elements */
16
+ }
17
+
18
+ .filter-sidebar.collapsed {
19
+ /* Add styles for collapsed state if needed */
20
+ overflow: hidden;
21
+ }
22
+
23
+ .filter-title {
24
+ font-size: 20px;
25
+ font-weight: 700;
26
+ color: var(--text-primary);
27
+ margin-bottom: 20px;
28
+ text-align: left;
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 8px;
32
+ }
33
+
34
+ .filter-grid {
35
+ display: grid;
36
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
37
+ gap: 16px;
38
+ margin-bottom: 20px;
39
+ width: 100%;
40
+ }
41
+
42
+ .filter-group {
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: 6px;
46
+ min-width: 0; /* Prevents flex items from overflowing */
47
+ }
48
+
49
+ .filter-label {
50
+ font-size: 13px;
51
+ font-weight: 600;
52
+ color: var(--text-primary);
53
+ margin-bottom: 4px;
54
+ }
55
+
56
+ .filter-input,
57
+ .filter-select {
58
+ width: 100%;
59
+ max-width: 100%;
60
+ box-sizing: border-box;
61
+ padding: 10px 12px;
62
+ border: 1px solid var(--border-color);
63
+ border-radius: 8px;
64
+ font-size: 14px;
65
+ background: var(--bg-primary);
66
+ color: var(--text-primary);
67
+ transition: border 0.2s ease, box-shadow 0.2s ease;
68
+ appearance: none;
69
+ background-image: none;
70
+ min-height: 40px; /* Consistent height */
71
+ }
72
+
73
+ .filter-select {
74
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
75
+ background-position: right 10px center;
76
+ background-repeat: no-repeat;
77
+ background-size: 16px;
78
+ padding-right: 40px;
79
+ }
80
+
81
+ .filter-input:focus,
82
+ .filter-select:focus {
83
+ outline: none;
84
+ border-color: var(--accent-primary);
85
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
86
+ }
87
+
88
+ .filter-input:hover,
89
+ .filter-select:hover {
90
+ border-color: var(--accent-primary);
91
+ }
92
+
93
+ .filter-actions {
94
+ display: flex;
95
+ justify-content: center;
96
+ gap: 12px;
97
+ padding-top: 20px;
98
+ border-top: 1px solid var(--border-color);
99
+ margin-top: 20px;
100
+ }
101
+
102
+ .filter-apply,
103
+ .filter-clear {
104
+ padding: 10px 20px;
105
+ border-radius: 8px;
106
+ font-size: 14px;
107
+ font-weight: 600;
108
+ cursor: pointer;
109
+ transition: all 0.2s ease;
110
+ min-width: 100px;
111
+ border: none;
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ }
116
+
117
+ .filter-apply {
118
+ background: var(--accent-primary);
119
+ color: #fff;
120
+ }
121
+
122
+ .filter-clear {
123
+ background: transparent;
124
+ color: var(--text-secondary);
125
+ border: 1px solid var(--border-color);
126
+ }
127
+
128
+ .filter-apply:hover {
129
+ background: var(--accent-secondary);
130
+ transform: translateY(-1px);
131
+ }
132
+
133
+ .filter-clear:hover {
134
+ border-color: var(--accent-primary);
135
+ color: var(--text-primary);
136
+ background: rgba(59, 130, 246, 0.05);
137
+ }
138
+
139
+ .filter-apply:active,
140
+ .filter-clear:active {
141
+ transform: translateY(0);
142
+ }
143
+
144
+ .filter-results {
145
+ margin-top: 16px;
146
+ font-size: 13px;
147
+ text-align: center;
148
+ color: var(--text-secondary);
149
+ font-style: italic;
150
+ }
151
+
152
+ /* Main content layout to prevent overlap */
153
+ .main-content {
154
+ width: 100%;
155
+ max-width: 1200px;
156
+ margin: 0 auto;
157
+ padding: 0 16px;
158
+ }
159
+
160
+ /* Responsive adjustments */
161
+ @media (max-width: 768px) {
162
+ .filter-grid {
163
+ grid-template-columns: 1fr;
164
+ gap: 12px;
165
+ }
166
+
167
+ .filter-actions {
168
+ flex-direction: column;
169
+ gap: 8px;
170
+ }
171
+
172
+ .filter-apply,
173
+ .filter-clear {
174
+ width: 100%;
175
+ }
176
+
177
+ .filter-sidebar {
178
+ padding: 16px;
179
+ margin-bottom: 24px;
180
+ }
181
+ }
182
+
183
+ @media (max-width: 480px) {
184
+ .filter-title {
185
+ font-size: 18px;
186
+ }
187
+
188
+ .filter-input,
189
+ .filter-select {
190
+ font-size: 16px; /* Prevents zoom on iOS */
191
+ }
192
+ }
193
+
194
+ /* Ensure proper spacing with endpoint cards */
195
+ .endpoints-grid {
196
+ margin-top: 24px;
197
+ clear: both;
198
+ }
199
+
200
+ /* Fix any potential z-index issues */
201
+ .filter-sidebar {
202
+ position: relative;
203
+ z-index: 10;
204
+ }
205
+
206
+ .endpoint-card {
207
+ position: relative;
208
+ z-index: 1;
209
+ }
@@ -0,0 +1,44 @@
1
+ /* ===== CONTAINER FIXES ===== */
2
+ .container,
3
+ .content-wrapper {
4
+ width: 100%;
5
+ max-width: 100%;
6
+ overflow-x: hidden;
7
+ }
8
+
9
+ /* ===== FILTER VISIBILITY FIXES ===== */
10
+ .filter-section {
11
+ position: relative;
12
+ z-index: 10;
13
+ }
14
+
15
+ .filter-toggle {
16
+ white-space: nowrap;
17
+ overflow: hidden;
18
+ text-overflow: ellipsis;
19
+ }
20
+
21
+ /* Custom dropdown arrow for better cross-browser support */
22
+ .filter-select {
23
+ cursor: pointer;
24
+ }
25
+
26
+ .filter-select::-ms-expand {
27
+ display: none;
28
+ }
29
+
30
+ /* Ensure proper stacking context */
31
+ .main-content {
32
+ position: relative;
33
+ z-index: 1;
34
+ }
35
+
36
+ /* Fix for potential parent container issues */
37
+ html {
38
+ box-sizing: border-box;
39
+ }
40
+
41
+ html, body {
42
+ width: 100%;
43
+ overflow-x: hidden;
44
+ }
@@ -0,0 +1,31 @@
1
+ /* ===== LAYOUT ===== */
2
+ .main-content {
3
+ max-width: 1400px;
4
+ margin: 0 auto;
5
+ padding: 20px 20px 40px;
6
+ width: 100%;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ .page-header {
11
+ text-align: center;
12
+ margin-bottom: 48px;
13
+ }
14
+
15
+ .page-title {
16
+ font-size: 42px;
17
+ font-weight: 800;
18
+ color: var(--text-primary);
19
+ margin: 0 0 16px 0;
20
+ background: linear-gradient(135deg, var(--accent-primary), #9333ea);
21
+ -webkit-background-clip: text;
22
+ -webkit-text-fill-color: transparent;
23
+ background-clip: text;
24
+ }
25
+
26
+ .page-subtitle {
27
+ font-size: 18px;
28
+ color: var(--text-secondary);
29
+ margin: 0 auto;
30
+ max-width: 600px;
31
+ }
@@ -0,0 +1,35 @@
1
+ /* ===== LOADING STATES ===== */
2
+ .loading-overlay {
3
+ position: fixed;
4
+ top: 0;
5
+ left: 0;
6
+ right: 0;
7
+ bottom: 0;
8
+ background: rgba(0, 0, 0, 0.1);
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ z-index: 9999;
13
+ opacity: 0;
14
+ pointer-events: none;
15
+ transition: opacity 0.3s ease;
16
+ }
17
+
18
+ .loading-overlay.show {
19
+ opacity: 1;
20
+ pointer-events: all;
21
+ }
22
+
23
+ .loading-spinner {
24
+ width: 40px;
25
+ height: 40px;
26
+ border: 3px solid var(--border-color);
27
+ border-top: 3px solid var(--accent-primary);
28
+ border-radius: 50%;
29
+ animation: spin 1s linear infinite;
30
+ }
31
+
32
+ @keyframes spin {
33
+ 0% { transform: rotate(0deg); }
34
+ 100% { transform: rotate(360deg); }
35
+ }
@@ -0,0 +1,89 @@
1
+ /* ===== RESPONSIVE DESIGN ===== */
2
+ @media (max-width: 1024px) {
3
+ .filter-grid {
4
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
5
+ }
6
+
7
+ .main-content {
8
+ padding: 20px 16px 40px;
9
+ }
10
+ }
11
+
12
+ @media (max-width: 768px) {
13
+ .main-content {
14
+ padding: 70px 16px 40px;
15
+ }
16
+
17
+ .page-title {
18
+ font-size: 32px;
19
+ }
20
+
21
+ .endpoints-grid {
22
+ grid-template-columns: 1fr;
23
+ }
24
+
25
+ .filter-grid {
26
+ grid-template-columns: 1fr;
27
+ }
28
+
29
+ .filter-header {
30
+ flex-direction: column;
31
+ align-items: stretch;
32
+ gap: 16px;
33
+ }
34
+
35
+ .filter-title {
36
+ text-align: center;
37
+ }
38
+
39
+ .theme-toggle {
40
+ top: 16px;
41
+ right: 16px;
42
+ padding: 8px 12px;
43
+ font-size: 12px;
44
+ }
45
+
46
+ .filter-actions {
47
+ flex-direction: column;
48
+ gap: 8px;
49
+ }
50
+
51
+ .endpoint-card {
52
+ flex-direction: column;
53
+ align-items: flex-start;
54
+ gap: 12px;
55
+ }
56
+
57
+ .method-badge {
58
+ align-self: flex-start;
59
+ }
60
+
61
+ .endpoint-path {
62
+ word-break: break-word;
63
+ overflow-wrap: break-word;
64
+ }
65
+ }
66
+
67
+ @media (max-width: 480px) {
68
+ .main-content {
69
+ padding: 70px 12px 40px;
70
+ }
71
+
72
+ .filter-section {
73
+ padding: 16px;
74
+ margin-bottom: 24px;
75
+ }
76
+
77
+ .page-title {
78
+ font-size: 28px;
79
+ }
80
+
81
+ .filter-apply,
82
+ .filter-clear {
83
+ padding: 12px 16px;
84
+ }
85
+
86
+ .endpoint-card {
87
+ padding: 16px;
88
+ }
89
+ }
@@ -0,0 +1,35 @@
1
+ /* ===== SECTIONS ===== */
2
+ .app-section,
3
+ .viewset-section {
4
+ margin-bottom: 48px;
5
+ transition: opacity 0.3s ease;
6
+ }
7
+
8
+ .app-title,
9
+ .viewset-title {
10
+ font-size: 24px;
11
+ font-weight: 700;
12
+ color: var(--text-primary);
13
+ margin-bottom: 20px;
14
+ padding-bottom: 12px;
15
+ border-bottom: 2px solid var(--border-color);
16
+ position: relative;
17
+ }
18
+
19
+ .app-title::before,
20
+ .viewset-title::before {
21
+ content: '';
22
+ position: absolute;
23
+ bottom: -2px;
24
+ left: 0;
25
+ width: 60px;
26
+ height: 2px;
27
+ background: linear-gradient(135deg, var(--accent-primary), #9333ea);
28
+ }
29
+
30
+ .app-description {
31
+ color: var(--text-secondary);
32
+ font-size: 16px;
33
+ margin-bottom: 32px;
34
+ line-height: 1.6;
35
+ }
@@ -0,0 +1,34 @@
1
+ /* ===== STATS ===== */
2
+ .stats-section {
3
+ display: grid;
4
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
5
+ gap: 20px;
6
+ margin-bottom: 40px;
7
+ }
8
+
9
+ .stat-card {
10
+ background: var(--bg-secondary);
11
+ border: 1px solid var(--border-color);
12
+ border-radius: 12px;
13
+ padding: 20px;
14
+ text-align: center;
15
+ box-shadow: var(--shadow);
16
+ transition: transform 0.2s ease;
17
+ }
18
+
19
+ .stat-card:hover {
20
+ transform: translateY(-2px);
21
+ }
22
+
23
+ .stat-number {
24
+ font-size: 28px;
25
+ font-weight: 700;
26
+ color: var(--accent-primary);
27
+ margin-bottom: 8px;
28
+ }
29
+
30
+ .stat-label {
31
+ font-size: 14px;
32
+ color: var(--text-secondary);
33
+ font-weight: 500;
34
+ }
@@ -0,0 +1,92 @@
1
+ /* ===== TAGS ===== */
2
+ .tags-container {
3
+ display: flex;
4
+ flex-wrap: wrap;
5
+ gap: 8px;
6
+ }
7
+
8
+ .tag {
9
+ display: flex;
10
+ align-items: center;
11
+ gap: 4px;
12
+ padding: 6px 10px;
13
+ border-radius: 16px;
14
+ font-size: 11px;
15
+ font-weight: 500;
16
+ background: var(--bg-primary);
17
+ color: var(--text-secondary);
18
+ border: 1px solid var(--border-color);
19
+ transition: all 0.2s ease;
20
+ }
21
+
22
+ .tag:hover {
23
+ transform: translateY(-1px);
24
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
25
+ }
26
+
27
+ /* Tag Types - Light Mode */
28
+ .tag.auth {
29
+ background: #fef3c7;
30
+ color: #92400e;
31
+ border-color: #fbbf24;
32
+ }
33
+
34
+ .tag.pagination {
35
+ background: #dbeafe;
36
+ color: #1e40af;
37
+ border-color: #3b82f6;
38
+ }
39
+
40
+ .tag.search {
41
+ background: #dcfce7;
42
+ color: #166534;
43
+ border-color: #22c55e;
44
+ }
45
+
46
+ .tag.ordering {
47
+ background: #fce7f3;
48
+ color: #be185d;
49
+ border-color: #ec4899;
50
+ }
51
+
52
+ .tag.permission {
53
+ background: #f3e8ff;
54
+ color: #7c3aed;
55
+ border-color: #a855f7;
56
+ }
57
+
58
+ /* Tag Types - Dark Mode */
59
+ [data-theme="dark"] .tag.auth,
60
+ [data-md-color-scheme="slate"] .tag.auth {
61
+ background: #451a03;
62
+ color: #fbbf24;
63
+ border-color: #92400e;
64
+ }
65
+
66
+ [data-theme="dark"] .tag.pagination,
67
+ [data-md-color-scheme="slate"] .tag.pagination {
68
+ background: #1e3a8a;
69
+ color: #60a5fa;
70
+ border-color: #1e40af;
71
+ }
72
+
73
+ [data-theme="dark"] .tag.search,
74
+ [data-md-color-scheme="slate"] .tag.search {
75
+ background: #14532d;
76
+ color: #4ade80;
77
+ border-color: #166534;
78
+ }
79
+
80
+ [data-theme="dark"] .tag.ordering,
81
+ [data-md-color-scheme="slate"] .tag.ordering {
82
+ background: #831843;
83
+ color: #f472b6;
84
+ border-color: #be185d;
85
+ }
86
+
87
+ [data-theme="dark"] .tag.permission,
88
+ [data-md-color-scheme="slate"] .tag.permission {
89
+ background: #581c87;
90
+ color: #c4b5fd;
91
+ border-color: #7c3aed;
92
+ }
@@ -0,0 +1,30 @@
1
+ /* ===== THEME TOGGLE ===== */
2
+ .theme-toggle {
3
+ position: fixed;
4
+ top: 20px;
5
+ right: 20px;
6
+ background: var(--bg-secondary);
7
+ border: 1px solid var(--border-color);
8
+ padding: 10px 16px;
9
+ border-radius: 12px;
10
+ cursor: pointer;
11
+ transition: all 0.3s ease;
12
+ z-index: 1000;
13
+ font-size: 14px;
14
+ color: var(--text-primary);
15
+ box-shadow: var(--shadow);
16
+ display: flex;
17
+ align-items: center;
18
+ gap: 8px;
19
+ }
20
+
21
+ .theme-toggle:hover {
22
+ transform: translateY(-2px);
23
+ box-shadow: var(--shadow-hover);
24
+ border-color: var(--accent-primary);
25
+ }
26
+
27
+ .theme-toggle:focus {
28
+ outline: 2px solid var(--accent-primary);
29
+ outline-offset: 2px;
30
+ }
@@ -0,0 +1,30 @@
1
+ /* ===== BASE VARIABLES ===== */
2
+ :root {
3
+ --bg-primary: #f8fafc;
4
+ --bg-secondary: #ffffff;
5
+ --text-primary: #1e293b;
6
+ --text-secondary: #64748b;
7
+ --border-color: #e2e8f0;
8
+ --shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
9
+ --shadow-hover: 0 12px 40px rgba(0, 0, 0, 0.15);
10
+ --accent-primary: #3b82f6;
11
+ --accent-secondary: #1e40af;
12
+ --success: #10b981;
13
+ --warning: #f59e0b;
14
+ --error: #ef4444;
15
+ --info: #06b6d4;
16
+ }
17
+
18
+ /* Dark Mode Variables */
19
+ [data-theme="dark"],
20
+ [data-md-color-scheme="slate"] {
21
+ --bg-primary: #0f172a;
22
+ --bg-secondary: #1e293b;
23
+ --text-primary: #f1f5f9;
24
+ --text-secondary: #94a3b8;
25
+ --border-color: #334155;
26
+ --shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
27
+ --shadow-hover: 0 12px 40px rgba(0, 0, 0, 0.4);
28
+ --accent-primary: #60a5fa;
29
+ --accent-secondary: #3b82f6;
30
+ }