createsonline 0.1.26__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.
Files changed (152) hide show
  1. createsonline/__init__.py +46 -0
  2. createsonline/admin/__init__.py +7 -0
  3. createsonline/admin/content.py +526 -0
  4. createsonline/admin/crud.py +805 -0
  5. createsonline/admin/field_builder.py +559 -0
  6. createsonline/admin/integration.py +482 -0
  7. createsonline/admin/interface.py +2562 -0
  8. createsonline/admin/model_creator.py +513 -0
  9. createsonline/admin/model_manager.py +388 -0
  10. createsonline/admin/modern_dashboard.py +498 -0
  11. createsonline/admin/permissions.py +264 -0
  12. createsonline/admin/user_forms.py +594 -0
  13. createsonline/ai/__init__.py +202 -0
  14. createsonline/ai/fields.py +1226 -0
  15. createsonline/ai/orm.py +325 -0
  16. createsonline/ai/services.py +1244 -0
  17. createsonline/app.py +506 -0
  18. createsonline/auth/__init__.py +8 -0
  19. createsonline/auth/management.py +228 -0
  20. createsonline/auth/models.py +552 -0
  21. createsonline/cli/__init__.py +5 -0
  22. createsonline/cli/commands/__init__.py +122 -0
  23. createsonline/cli/commands/database.py +416 -0
  24. createsonline/cli/commands/info.py +173 -0
  25. createsonline/cli/commands/initdb.py +218 -0
  26. createsonline/cli/commands/project.py +545 -0
  27. createsonline/cli/commands/serve.py +173 -0
  28. createsonline/cli/commands/shell.py +93 -0
  29. createsonline/cli/commands/users.py +148 -0
  30. createsonline/cli/main.py +2041 -0
  31. createsonline/cli/manage.py +274 -0
  32. createsonline/config/__init__.py +9 -0
  33. createsonline/config/app.py +2577 -0
  34. createsonline/config/database.py +179 -0
  35. createsonline/config/docs.py +384 -0
  36. createsonline/config/errors.py +160 -0
  37. createsonline/config/orm.py +43 -0
  38. createsonline/config/request.py +93 -0
  39. createsonline/config/settings.py +176 -0
  40. createsonline/data/__init__.py +23 -0
  41. createsonline/data/dataframe.py +925 -0
  42. createsonline/data/io.py +453 -0
  43. createsonline/data/series.py +557 -0
  44. createsonline/database/__init__.py +60 -0
  45. createsonline/database/abstraction.py +440 -0
  46. createsonline/database/assistant.py +585 -0
  47. createsonline/database/fields.py +442 -0
  48. createsonline/database/migrations.py +132 -0
  49. createsonline/database/models.py +604 -0
  50. createsonline/database.py +438 -0
  51. createsonline/http/__init__.py +28 -0
  52. createsonline/http/client.py +535 -0
  53. createsonline/ml/__init__.py +55 -0
  54. createsonline/ml/classification.py +552 -0
  55. createsonline/ml/clustering.py +680 -0
  56. createsonline/ml/metrics.py +542 -0
  57. createsonline/ml/neural.py +560 -0
  58. createsonline/ml/preprocessing.py +784 -0
  59. createsonline/ml/regression.py +501 -0
  60. createsonline/performance/__init__.py +19 -0
  61. createsonline/performance/cache.py +444 -0
  62. createsonline/performance/compression.py +335 -0
  63. createsonline/performance/core.py +419 -0
  64. createsonline/project_init.py +789 -0
  65. createsonline/routing.py +528 -0
  66. createsonline/security/__init__.py +34 -0
  67. createsonline/security/core.py +811 -0
  68. createsonline/security/encryption.py +349 -0
  69. createsonline/server.py +295 -0
  70. createsonline/static/css/admin.css +263 -0
  71. createsonline/static/css/common.css +358 -0
  72. createsonline/static/css/dashboard.css +89 -0
  73. createsonline/static/favicon.ico +0 -0
  74. createsonline/static/icons/icon-128x128.png +0 -0
  75. createsonline/static/icons/icon-128x128.webp +0 -0
  76. createsonline/static/icons/icon-16x16.png +0 -0
  77. createsonline/static/icons/icon-16x16.webp +0 -0
  78. createsonline/static/icons/icon-180x180.png +0 -0
  79. createsonline/static/icons/icon-180x180.webp +0 -0
  80. createsonline/static/icons/icon-192x192.png +0 -0
  81. createsonline/static/icons/icon-192x192.webp +0 -0
  82. createsonline/static/icons/icon-256x256.png +0 -0
  83. createsonline/static/icons/icon-256x256.webp +0 -0
  84. createsonline/static/icons/icon-32x32.png +0 -0
  85. createsonline/static/icons/icon-32x32.webp +0 -0
  86. createsonline/static/icons/icon-384x384.png +0 -0
  87. createsonline/static/icons/icon-384x384.webp +0 -0
  88. createsonline/static/icons/icon-48x48.png +0 -0
  89. createsonline/static/icons/icon-48x48.webp +0 -0
  90. createsonline/static/icons/icon-512x512.png +0 -0
  91. createsonline/static/icons/icon-512x512.webp +0 -0
  92. createsonline/static/icons/icon-64x64.png +0 -0
  93. createsonline/static/icons/icon-64x64.webp +0 -0
  94. createsonline/static/image/android-chrome-192x192.png +0 -0
  95. createsonline/static/image/android-chrome-512x512.png +0 -0
  96. createsonline/static/image/apple-touch-icon.png +0 -0
  97. createsonline/static/image/favicon-16x16.png +0 -0
  98. createsonline/static/image/favicon-32x32.png +0 -0
  99. createsonline/static/image/favicon.ico +0 -0
  100. createsonline/static/image/favicon.svg +17 -0
  101. createsonline/static/image/icon-128x128.png +0 -0
  102. createsonline/static/image/icon-128x128.webp +0 -0
  103. createsonline/static/image/icon-16x16.png +0 -0
  104. createsonline/static/image/icon-16x16.webp +0 -0
  105. createsonline/static/image/icon-180x180.png +0 -0
  106. createsonline/static/image/icon-180x180.webp +0 -0
  107. createsonline/static/image/icon-192x192.png +0 -0
  108. createsonline/static/image/icon-192x192.webp +0 -0
  109. createsonline/static/image/icon-256x256.png +0 -0
  110. createsonline/static/image/icon-256x256.webp +0 -0
  111. createsonline/static/image/icon-32x32.png +0 -0
  112. createsonline/static/image/icon-32x32.webp +0 -0
  113. createsonline/static/image/icon-384x384.png +0 -0
  114. createsonline/static/image/icon-384x384.webp +0 -0
  115. createsonline/static/image/icon-48x48.png +0 -0
  116. createsonline/static/image/icon-48x48.webp +0 -0
  117. createsonline/static/image/icon-512x512.png +0 -0
  118. createsonline/static/image/icon-512x512.webp +0 -0
  119. createsonline/static/image/icon-64x64.png +0 -0
  120. createsonline/static/image/icon-64x64.webp +0 -0
  121. createsonline/static/image/logo-header-h100.png +0 -0
  122. createsonline/static/image/logo-header-h100.webp +0 -0
  123. createsonline/static/image/logo-header-h200@2x.png +0 -0
  124. createsonline/static/image/logo-header-h200@2x.webp +0 -0
  125. createsonline/static/image/logo.png +0 -0
  126. createsonline/static/js/admin.js +274 -0
  127. createsonline/static/site.webmanifest +35 -0
  128. createsonline/static/templates/admin/base.html +87 -0
  129. createsonline/static/templates/admin/dashboard.html +217 -0
  130. createsonline/static/templates/admin/model_form.html +270 -0
  131. createsonline/static/templates/admin/model_list.html +202 -0
  132. createsonline/static/test_script.js +15 -0
  133. createsonline/static/test_styles.css +59 -0
  134. createsonline/static_files.py +365 -0
  135. createsonline/templates/404.html +100 -0
  136. createsonline/templates/admin_login.html +169 -0
  137. createsonline/templates/base.html +102 -0
  138. createsonline/templates/index.html +151 -0
  139. createsonline/templates.py +205 -0
  140. createsonline/testing.py +322 -0
  141. createsonline/utils.py +448 -0
  142. createsonline/validation/__init__.py +49 -0
  143. createsonline/validation/fields.py +598 -0
  144. createsonline/validation/models.py +504 -0
  145. createsonline/validation/validators.py +561 -0
  146. createsonline/views.py +184 -0
  147. createsonline-0.1.26.dist-info/METADATA +46 -0
  148. createsonline-0.1.26.dist-info/RECORD +152 -0
  149. createsonline-0.1.26.dist-info/WHEEL +5 -0
  150. createsonline-0.1.26.dist-info/entry_points.txt +2 -0
  151. createsonline-0.1.26.dist-info/licenses/LICENSE +21 -0
  152. createsonline-0.1.26.dist-info/top_level.txt +1 -0
@@ -0,0 +1,263 @@
1
+ /* CREATESONLINE Admin Panel Styles v0.1.6 */
2
+
3
+ :root {
4
+ --primary-color: #2563eb;
5
+ --secondary-color: #64748b;
6
+ --success-color: #10b981;
7
+ --danger-color: #ef4444;
8
+ --warning-color: #f59e0b;
9
+ --dark-bg: #1e293b;
10
+ --light-bg: #f8fafc;
11
+ --border-color: #e2e8f0;
12
+ }
13
+
14
+ * {
15
+ margin: 0;
16
+ padding: 0;
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ body {
21
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
22
+ background: var(--light-bg);
23
+ color: #1e293b;
24
+ line-height: 1.6;
25
+ }
26
+
27
+ /* Admin Header */
28
+ .admin-header {
29
+ background: var(--dark-bg);
30
+ color: white;
31
+ padding: 1rem 2rem;
32
+ display: flex;
33
+ justify-content: space-between;
34
+ align-items: center;
35
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
36
+ }
37
+
38
+ .admin-logo {
39
+ font-size: 1.5rem;
40
+ font-weight: bold;
41
+ color: var(--primary-color);
42
+ }
43
+
44
+ .admin-nav {
45
+ display: flex;
46
+ gap: 2rem;
47
+ }
48
+
49
+ .admin-nav a {
50
+ color: white;
51
+ text-decoration: none;
52
+ transition: color 0.3s;
53
+ }
54
+
55
+ .admin-nav a:hover {
56
+ color: var(--primary-color);
57
+ }
58
+
59
+ /* Admin Sidebar */
60
+ .admin-sidebar {
61
+ position: fixed;
62
+ left: 0;
63
+ top: 60px;
64
+ width: 250px;
65
+ height: calc(100vh - 60px);
66
+ background: white;
67
+ border-right: 1px solid var(--border-color);
68
+ padding: 2rem 0;
69
+ overflow-y: auto;
70
+ }
71
+
72
+ .admin-sidebar ul {
73
+ list-style: none;
74
+ }
75
+
76
+ .admin-sidebar li {
77
+ padding: 0.75rem 1.5rem;
78
+ cursor: pointer;
79
+ transition: background 0.3s;
80
+ }
81
+
82
+ .admin-sidebar li:hover {
83
+ background: var(--light-bg);
84
+ }
85
+
86
+ .admin-sidebar li.active {
87
+ background: var(--primary-color);
88
+ color: white;
89
+ }
90
+
91
+ /* Admin Main Content */
92
+ .admin-main {
93
+ margin-left: 250px;
94
+ padding: 2rem;
95
+ min-height: calc(100vh - 60px);
96
+ }
97
+
98
+ .admin-container {
99
+ max-width: 1200px;
100
+ margin: 0 auto;
101
+ }
102
+
103
+ /* Cards */
104
+ .admin-card {
105
+ background: white;
106
+ border-radius: 8px;
107
+ padding: 1.5rem;
108
+ margin-bottom: 1.5rem;
109
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
110
+ }
111
+
112
+ .admin-card-header {
113
+ font-size: 1.25rem;
114
+ font-weight: 600;
115
+ margin-bottom: 1rem;
116
+ padding-bottom: 0.75rem;
117
+ border-bottom: 1px solid var(--border-color);
118
+ }
119
+
120
+ /* Tables */
121
+ .admin-table {
122
+ width: 100%;
123
+ border-collapse: collapse;
124
+ margin-top: 1rem;
125
+ }
126
+
127
+ .admin-table th {
128
+ background: var(--light-bg);
129
+ padding: 0.75rem;
130
+ text-align: left;
131
+ font-weight: 600;
132
+ border-bottom: 2px solid var(--border-color);
133
+ }
134
+
135
+ .admin-table td {
136
+ padding: 0.75rem;
137
+ border-bottom: 1px solid var(--border-color);
138
+ }
139
+
140
+ .admin-table tr:hover {
141
+ background: var(--light-bg);
142
+ }
143
+
144
+ /* Buttons */
145
+ .admin-btn {
146
+ padding: 0.5rem 1rem;
147
+ border: none;
148
+ border-radius: 4px;
149
+ cursor: pointer;
150
+ font-size: 0.875rem;
151
+ font-weight: 500;
152
+ transition: all 0.3s;
153
+ }
154
+
155
+ .admin-btn-primary {
156
+ background: var(--primary-color);
157
+ color: white;
158
+ }
159
+
160
+ .admin-btn-primary:hover {
161
+ background: #1d4ed8;
162
+ }
163
+
164
+ .admin-btn-success {
165
+ background: var(--success-color);
166
+ color: white;
167
+ }
168
+
169
+ .admin-btn-danger {
170
+ background: var(--danger-color);
171
+ color: white;
172
+ }
173
+
174
+ /* Forms */
175
+ .admin-form-group {
176
+ margin-bottom: 1rem;
177
+ }
178
+
179
+ .admin-form-label {
180
+ display: block;
181
+ font-weight: 500;
182
+ margin-bottom: 0.5rem;
183
+ }
184
+
185
+ .admin-form-input {
186
+ width: 100%;
187
+ padding: 0.5rem;
188
+ border: 1px solid var(--border-color);
189
+ border-radius: 4px;
190
+ font-size: 1rem;
191
+ }
192
+
193
+ .admin-form-input:focus {
194
+ outline: none;
195
+ border-color: var(--primary-color);
196
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
197
+ }
198
+
199
+ /* Stats Grid */
200
+ .admin-stats-grid {
201
+ display: grid;
202
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
203
+ gap: 1.5rem;
204
+ margin-bottom: 2rem;
205
+ }
206
+
207
+ .admin-stat-card {
208
+ background: white;
209
+ border-radius: 8px;
210
+ padding: 1.5rem;
211
+ box-shadow: 0 1px 3px rgba(0,0,0,0.1);
212
+ }
213
+
214
+ .admin-stat-value {
215
+ font-size: 2rem;
216
+ font-weight: bold;
217
+ color: var(--primary-color);
218
+ }
219
+
220
+ .admin-stat-label {
221
+ color: var(--secondary-color);
222
+ font-size: 0.875rem;
223
+ }
224
+
225
+ /* Badges */
226
+ .admin-badge {
227
+ display: inline-block;
228
+ padding: 0.25rem 0.5rem;
229
+ border-radius: 4px;
230
+ font-size: 0.75rem;
231
+ font-weight: 600;
232
+ }
233
+
234
+ .admin-badge-success {
235
+ background: #d1fae5;
236
+ color: #065f46;
237
+ }
238
+
239
+ .admin-badge-warning {
240
+ background: #fef3c7;
241
+ color: #92400e;
242
+ }
243
+
244
+ .admin-badge-danger {
245
+ background: #fee2e2;
246
+ color: #991b1b;
247
+ }
248
+
249
+ /* Responsive */
250
+ @media (max-width: 768px) {
251
+ .admin-sidebar {
252
+ transform: translateX(-100%);
253
+ transition: transform 0.3s;
254
+ }
255
+
256
+ .admin-sidebar.active {
257
+ transform: translateX(0);
258
+ }
259
+
260
+ .admin-main {
261
+ margin-left: 0;
262
+ }
263
+ }
@@ -0,0 +1,358 @@
1
+ /* common.css - Shared styles for all CREATESONLINE pages */
2
+ :root {
3
+ --primary: #000000;
4
+ --secondary: #ffffff;
5
+ --gray-50: #fafafa;
6
+ --gray-100: #f5f5f5;
7
+ --gray-200: #e5e5e5;
8
+ --gray-600: #525252;
9
+ --gray-700: #404040;
10
+ --gray-900: #171717;
11
+ --accent: #151516;
12
+ --success: #10b981;
13
+ --info: #3b82f6;
14
+ --warning: #f59e0b;
15
+ --error: #ef4444;
16
+ }
17
+
18
+ * {
19
+ box-sizing: border-box;
20
+ }
21
+
22
+ body {
23
+ font-family: 'Inter', 'Segoe UI', Arial, sans-serif;
24
+ background: linear-gradient(135deg, #000000 0%, #ffffff 100%);
25
+ color: var(--primary);
26
+ margin: 0;
27
+ padding: 0;
28
+ min-height: 100vh;
29
+ line-height: 1.6;
30
+ }
31
+
32
+ /* Common Header */
33
+ .header {
34
+ display: flex;
35
+ justify-content: space-between;
36
+ align-items: center;
37
+ padding: 1rem 2rem;
38
+ background: var(--secondary);
39
+ border-bottom: 1px solid var(--gray-200);
40
+ box-shadow: 0 2px 4px rgba(0,0,0,0.05);
41
+ }
42
+
43
+ .header-logo {
44
+ display: flex;
45
+ align-items: center;
46
+ text-decoration: none;
47
+ transition: all 0.3s ease;
48
+ }
49
+
50
+ .header-logo:hover {
51
+ transform: scale(1.05);
52
+ }
53
+
54
+ .header-logo-image {
55
+ height: 40px;
56
+ width: auto;
57
+ margin-right: 0.75rem;
58
+ filter: drop-shadow(0 2px 8px rgba(0,0,0,0.1));
59
+ }
60
+
61
+ .header-logo-text {
62
+ font-size: 1.2rem;
63
+ font-weight: 700;
64
+ color: var(--primary);
65
+ }
66
+
67
+ .header-nav {
68
+ display: flex;
69
+ gap: 2rem;
70
+ }
71
+
72
+ .nav-link {
73
+ color: var(--primary);
74
+ text-decoration: none;
75
+ font-size: 1rem;
76
+ font-weight: 600;
77
+ transition: all 0.2s;
78
+ opacity: 0.8;
79
+ padding: 0.5rem 1rem;
80
+ border-radius: 6px;
81
+ }
82
+
83
+ .nav-link:hover {
84
+ opacity: 1;
85
+ background: var(--primary);
86
+ color: var(--secondary);
87
+ transform: translateY(-1px);
88
+ }
89
+
90
+ .nav-link.active {
91
+ background: var(--primary);
92
+ color: var(--secondary);
93
+ opacity: 1;
94
+ }
95
+
96
+ /* Common Layout */
97
+ .container {
98
+ max-width: 1200px;
99
+ margin: 0 auto;
100
+ padding: 0 2rem;
101
+ }
102
+
103
+ .page-title {
104
+ text-align: center;
105
+ font-size: 2.5rem;
106
+ font-weight: 800;
107
+ margin: 3rem 0;
108
+ color: var(--primary);
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ gap: 1rem;
113
+ }
114
+
115
+ .page-icon {
116
+ width: 32px;
117
+ height: 32px;
118
+ }
119
+
120
+ /* Common Cards */
121
+ .card {
122
+ background: var(--secondary);
123
+ border-radius: 12px;
124
+ padding: 2rem;
125
+ box-shadow: 0 4px 16px rgba(0,0,0,0.08);
126
+ border: 2px solid var(--gray-200);
127
+ transition: all 0.3s ease;
128
+ margin-bottom: 2rem;
129
+ }
130
+
131
+ .card:hover {
132
+ transform: translateY(-2px);
133
+ box-shadow: 0 8px 32px rgba(0,0,0,0.12);
134
+ border-color: var(--primary);
135
+ }
136
+
137
+ .card-title {
138
+ font-size: 1.3rem;
139
+ font-weight: 700;
140
+ margin-bottom: 1rem;
141
+ color: var(--primary);
142
+ display: flex;
143
+ align-items: center;
144
+ gap: 0.5rem;
145
+ }
146
+
147
+ .card-icon {
148
+ width: 20px;
149
+ height: 20px;
150
+ }
151
+
152
+ .card-description {
153
+ color: var(--gray-600);
154
+ margin-bottom: 1.5rem;
155
+ line-height: 1.6;
156
+ }
157
+
158
+ /* Common Buttons */
159
+ .btn {
160
+ display: inline-flex;
161
+ align-items: center;
162
+ gap: 0.5rem;
163
+ padding: 0.75rem 1.5rem;
164
+ border-radius: 8px;
165
+ font-weight: 600;
166
+ text-decoration: none;
167
+ transition: all 0.3s ease;
168
+ border: 2px solid transparent;
169
+ cursor: pointer;
170
+ font-size: 0.95rem;
171
+ }
172
+
173
+ .btn-primary {
174
+ background: var(--primary);
175
+ color: var(--secondary);
176
+ border-color: var(--primary);
177
+ }
178
+
179
+ .btn-primary:hover {
180
+ background: var(--gray-900);
181
+ transform: translateY(-2px);
182
+ box-shadow: 0 4px 12px rgba(0,0,0,0.3);
183
+ }
184
+
185
+ .btn-secondary {
186
+ background: var(--secondary);
187
+ color: var(--primary);
188
+ border-color: var(--gray-200);
189
+ }
190
+
191
+ .btn-secondary:hover {
192
+ background: var(--primary);
193
+ color: var(--secondary);
194
+ border-color: var(--primary);
195
+ transform: translateY(-2px);
196
+ }
197
+
198
+ .btn-icon {
199
+ width: 16px;
200
+ height: 16px;
201
+ }
202
+
203
+ /* Code Blocks */
204
+ .code-block {
205
+ background: var(--gray-900);
206
+ color: #e2e8f0;
207
+ padding: 1.5rem;
208
+ border-radius: 8px;
209
+ font-family: 'Monaco', 'Consolas', monospace;
210
+ font-size: 0.9rem;
211
+ overflow-x: auto;
212
+ margin: 1rem 0;
213
+ }
214
+
215
+ .code-header {
216
+ display: flex;
217
+ align-items: center;
218
+ gap: 1rem;
219
+ margin-bottom: 1rem;
220
+ padding-bottom: 0.5rem;
221
+ border-bottom: 1px solid rgba(255,255,255,0.1);
222
+ }
223
+
224
+ .method-badge {
225
+ background: var(--primary);
226
+ color: white;
227
+ padding: 0.25rem 0.5rem;
228
+ border-radius: 4px;
229
+ font-size: 0.8rem;
230
+ font-weight: 700;
231
+ }
232
+
233
+ .method-badge.get { background: var(--success); }
234
+ .method-badge.post { background: var(--info); }
235
+ .method-badge.put { background: var(--warning); }
236
+ .method-badge.delete { background: var(--error); }
237
+
238
+ /* Grid Layouts */
239
+ .grid {
240
+ display: grid;
241
+ gap: 2rem;
242
+ margin: 2rem 0;
243
+ }
244
+
245
+ .grid-2 { grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); }
246
+ .grid-3 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
247
+ .grid-4 { grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); }
248
+
249
+ /* Status Indicators */
250
+ .status {
251
+ display: inline-flex;
252
+ align-items: center;
253
+ gap: 0.5rem;
254
+ padding: 0.5rem 1rem;
255
+ border-radius: 20px;
256
+ font-size: 0.85rem;
257
+ font-weight: 600;
258
+ }
259
+
260
+ .status-online {
261
+ background: #dcfce7;
262
+ color: #166534;
263
+ }
264
+
265
+ .status-offline {
266
+ background: #fee2e2;
267
+ color: #991b1b;
268
+ }
269
+
270
+ .status-warning {
271
+ background: #fef3c7;
272
+ color: #92400e;
273
+ }
274
+
275
+ .status-dot {
276
+ width: 8px;
277
+ height: 8px;
278
+ border-radius: 50%;
279
+ background: currentColor;
280
+ }
281
+
282
+ /* Common Footer */
283
+ .footer {
284
+ background: var(--gray-100);
285
+ color: var(--gray-700);
286
+ padding: 2rem 0;
287
+ text-align: center;
288
+ border-top: 1px solid var(--gray-200);
289
+ margin-top: 4rem;
290
+ }
291
+
292
+ .footer-content {
293
+ display: flex;
294
+ align-items: center;
295
+ justify-content: center;
296
+ gap: 0.5rem;
297
+ font-size: 0.9rem;
298
+ }
299
+
300
+ .footer-favicon {
301
+ width: 20px;
302
+ height: 20px;
303
+ }
304
+
305
+ /* Responsive Design */
306
+ @media (max-width: 768px) {
307
+ .header {
308
+ flex-direction: column;
309
+ gap: 1rem;
310
+ padding: 1rem;
311
+ }
312
+
313
+ .header-nav {
314
+ gap: 1rem;
315
+ }
316
+
317
+ .container {
318
+ padding: 0 1rem;
319
+ }
320
+
321
+ .page-title {
322
+ font-size: 2rem;
323
+ margin: 2rem 0;
324
+ }
325
+
326
+ .grid-2,
327
+ .grid-3,
328
+ .grid-4 {
329
+ grid-template-columns: 1fr;
330
+ }
331
+
332
+ .card {
333
+ padding: 1.5rem;
334
+ }
335
+ }
336
+
337
+ /* Utilities */
338
+ .text-center { text-align: center; }
339
+ .text-left { text-align: left; }
340
+ .text-right { text-align: right; }
341
+
342
+ .mt-1 { margin-top: 0.5rem; }
343
+ .mt-2 { margin-top: 1rem; }
344
+ .mt-3 { margin-top: 1.5rem; }
345
+ .mt-4 { margin-top: 2rem; }
346
+
347
+ .mb-1 { margin-bottom: 0.5rem; }
348
+ .mb-2 { margin-bottom: 1rem; }
349
+ .mb-3 { margin-bottom: 1.5rem; }
350
+ .mb-4 { margin-bottom: 2rem; }
351
+
352
+ .flex { display: flex; }
353
+ .flex-col { flex-direction: column; }
354
+ .items-center { align-items: center; }
355
+ .justify-center { justify-content: center; }
356
+ .gap-1 { gap: 0.5rem; }
357
+ .gap-2 { gap: 1rem; }
358
+ .gap-3 { gap: 1.5rem; }
@@ -0,0 +1,89 @@
1
+ /* Basic admin dashboard styles for CREATESONLINE */
2
+ :root {
3
+ --bg: #0f1222;
4
+ --panel: #151935;
5
+ --border: #262a4d;
6
+ --text: #e6e8ff;
7
+ --muted: #a9add4;
8
+ --accent: #667eea;
9
+ --accent-2: #8e9cff;
10
+ --success: #35d07f;
11
+ --danger: #ff5f7a;
12
+ }
13
+
14
+ * { box-sizing: border-box; }
15
+ html, body { height: 100%; }
16
+ body {
17
+ margin: 0;
18
+ background: var(--bg);
19
+ color: var(--text);
20
+ font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
21
+ }
22
+
23
+ .admin-layout { display: grid; grid-template-columns: 280px 1fr; min-height: 100vh; }
24
+ .admin-sidebar {
25
+ background: var(--panel);
26
+ border-right: 1px solid var(--border);
27
+ padding: 20px 16px;
28
+ }
29
+ .sidebar-brand {
30
+ display: flex; align-items: center; gap: 12px;
31
+ text-decoration: none; color: var(--text); margin-bottom: 16px;
32
+ }
33
+ .sidebar-logo img { height: 36px; width: auto; display: block; }
34
+ .sidebar-title { font-weight: 700; letter-spacing: .5px; }
35
+ .sidebar-subtitle { color: var(--muted); font-size: 12px; }
36
+
37
+ .sidebar-nav { margin-top: 12px; }
38
+ .nav-section { margin-bottom: 16px; }
39
+ .nav-section-title { color: var(--muted); font-size: 12px; text-transform: uppercase; margin: 10px 8px; }
40
+ .nav-item { list-style: none; }
41
+ .nav-link {
42
+ display: flex; align-items: center; gap: 10px;
43
+ padding: 10px 12px; margin: 4px 6px;
44
+ border-radius: 8px; color: var(--text); text-decoration: none;
45
+ }
46
+ .nav-link:hover { background: #1b2044; }
47
+ .nav-link.active { background: #1e2350; outline: 1px solid #2b3170; }
48
+ .nav-icon { color: var(--accent-2); font-weight: 600; }
49
+
50
+ .admin-header {
51
+ display: flex; justify-content: space-between; align-items: center;
52
+ padding: 16px 20px; border-bottom: 1px solid var(--border); background: #101430;
53
+ }
54
+ .header-title { margin: 0; font-size: 20px; }
55
+ .breadcrumb { color: var(--muted); font-size: 12px; }
56
+
57
+ .header-search { display: flex; align-items: center; gap: 8px; background: #0e1330; border: 1px solid var(--border); padding: 6px 10px; border-radius: 8px; }
58
+ .search-input { background: transparent; border: 0; outline: none; color: var(--text); }
59
+ .action-button { display: inline-flex; align-items: center; justify-content: center; height: 36px; width: 36px; border-radius: 8px; text-decoration: none; color: var(--text); background: #161b3d; border: 1px solid var(--border); }
60
+ .action-button:hover { background: #1d2250; }
61
+
62
+ .user-menu { display: flex; align-items: center; gap: 10px; padding: 6px 8px; background: #0f1435; border: 1px solid var(--border); border-radius: 10px; }
63
+ .user-avatar { height: 28px; width: 28px; border-radius: 50%; display: grid; place-items: center; background: var(--accent); font-weight: 700; }
64
+ .user-info { line-height: 1.1; }
65
+ .user-name { font-size: 13px; }
66
+ .user-role { color: var(--muted); font-size: 11px; }
67
+
68
+ .admin-main { padding: 18px 20px; }
69
+ .dashboard-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 16px; }
70
+ .metric-card { background: #12163c; border: 1px solid var(--border); border-radius: 12px; padding: 14px; }
71
+ .metric-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
72
+ .metric-title { color: var(--muted); font-size: 12px; text-transform: uppercase; }
73
+ .metric-icon { color: var(--accent-2); font-weight: 700; }
74
+ .metric-value { font-size: 28px; font-weight: 800; letter-spacing: .5px; }
75
+ .metric-change { color: var(--muted); font-size: 12px; display: flex; align-items: center; gap: 6px; }
76
+
77
+ .ai-health-card { background: linear-gradient(180deg, #141a48 0%, #10153a 100%); }
78
+ .ai-score-circle { height: 80px; width: 80px; border-radius: 50%; display: grid; place-items: center; font-weight: 800; color: #d6dbff; border: 3px solid #3440a3; margin: 8px 0; }
79
+
80
+ /* Responsiveness */
81
+ @media (max-width: 1200px) {
82
+ .dashboard-grid { grid-template-columns: repeat(2, minmax(0,1fr)); }
83
+ }
84
+ @media (max-width: 800px) {
85
+ .admin-layout { grid-template-columns: 1fr; }
86
+ .admin-sidebar { position: sticky; top: 0; z-index: 10; }
87
+ .dashboard-grid { grid-template-columns: 1fr; }
88
+ }
89
+
Binary file