1
+/* ========================
2
+ MAPS CONNECT - STYLES
3
+ Minimalista con contornos rectos
4
+ ======================== */
5
+
6
+:root {
7
+ --primary-color: #1e40af; /* Azul profesional */
8
+ --secondary-color: #7c3aed; /* Púrpura */
9
+ --success-color: #10b981; /* Verde */
10
+ --warning-color: #f59e0b; /* Ámbar */
11
+ --danger-color: #ef4444; /* Rojo */
12
+ --gray-100: #f3f4f6;
13
+ --gray-200: #e5e7eb;
14
+ --gray-300: #d1d5db;
15
+ --gray-400: #9ca3af;
16
+ --gray-500: #6b7280;
17
+ --gray-600: #4b5563;
18
+ --gray-700: #374151;
19
+ --gray-800: #1f2937;
20
+ --gray-900: #111827;
21
+
22
+ --border-radius: 0; /* Sin bordes redondeados */
23
+ --box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
24
+ --transition: all 0.3s ease;
25
+}
26
+
27
+* {
28
+ margin: 0;
29
+ padding: 0;
30
+ box-sizing: border-box;
31
+}
32
+
33
+html {
34
+ scroll-behavior: smooth;
35
+}
36
+
37
+body {
38
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
39
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
40
+ sans-serif;
41
+ -webkit-font-smoothing: antialiased;
42
+ -moz-osx-font-smoothing: grayscale;
43
+ background-color: var(--gray-100);
44
+ color: var(--gray-800);
45
+ line-height: 1.6;
46
+ display: flex;
47
+}
48
+
49
+/* ========================
50
+ SIDEBAR NAVIGATION
51
+ ======================== */
52
+
53
+.sidebar {
54
+ width: 250px;
55
+ background-color: var(--gray-900);
56
+ color: white;
57
+ position: fixed;
58
+ left: 0;
59
+ top: 0;
60
+ height: 100vh;
61
+ overflow-y: auto;
62
+ padding: 20px 0;
63
+ box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1);
64
+ transition: var(--transition);
65
+ z-index: 100;
66
+}
67
+
68
+.sidebar-header {
69
+ display: flex;
70
+ justify-content: space-between;
71
+ align-items: center;
72
+ padding: 0 20px 30px 20px;
73
+ border-bottom: 1px solid var(--gray-700);
74
+}
75
+
76
+.logo {
77
+ font-size: 28px;
78
+ font-weight: 700;
79
+ letter-spacing: 2px;
80
+ color: var(--primary-color);
81
+}
82
+
83
+.toggle-btn {
84
+ display: none;
85
+ background: none;
86
+ border: none;
87
+ color: white;
88
+ font-size: 20px;
89
+ cursor: pointer;
90
+}
91
+
92
+.nav-menu {
93
+ list-style: none;
94
+ padding: 0 10px;
95
+ margin-bottom: auto;
96
+}
97
+
98
+.nav-menu li {
99
+ margin-bottom: 5px;
100
+}
101
+
102
+.nav-link {
103
+ display: block;
104
+ padding: 12px 15px;
105
+ color: var(--gray-300);
106
+ text-decoration: none;
107
+ border: 1px solid transparent;
108
+ transition: var(--transition);
109
+}
110
+
111
+.nav-link:hover {
112
+ background-color: var(--gray-800);
113
+ color: white;
114
+ border-left: 3px solid var(--primary-color);
115
+ padding-left: 12px;
116
+}
117
+
118
+.nav-link.active {
119
+ background-color: var(--primary-color);
120
+ color: white;
121
+ border-left: 3px solid var(--secondary-color);
122
+ padding-left: 12px;
123
+}
124
+
125
+.sidebar-footer {
126
+ padding: 20px 10px;
127
+ border-top: 1px solid var(--gray-700);
128
+}
129
+
130
+.logout-btn {
131
+ width: 100%;
132
+ padding: 10px 15px;
133
+ background-color: var(--danger-color);
134
+ color: white;
135
+ border: none;
136
+ cursor: pointer;
137
+ font-size: 14px;
138
+ font-weight: 600;
139
+ transition: var(--transition);
140
+}
141
+
142
+.logout-btn:hover {
143
+ background-color: #dc2626;
144
+}
145
+
146
+/* ========================
147
+ MAIN CONTAINER
148
+ ======================== */
149
+
150
+.container {
151
+ flex: 1;
152
+ margin-left: 250px;
153
+ background-color: var(--gray-100);
154
+ min-height: 100vh;
155
+ display: flex;
156
+ flex-direction: column;
157
+}
158
+
159
+main {
160
+ flex: 1;
161
+ padding: 40px;
162
+ max-width: 1200px;
163
+ margin: 0 auto;
164
+ width: 100%;
165
+}
166
+
167
+/* ========================
168
+ HEADER
169
+ ======================== */
170
+
171
+.header {
172
+ margin-bottom: 40px;
173
+ text-align: center;
174
+}
175
+
176
+.header h1 {
177
+ font-size: 32px;
178
+ margin-bottom: 10px;
179
+ color: var(--gray-900);
180
+}
181
+
182
+.subtitle {
183
+ font-size: 16px;
184
+ color: var(--gray-500);
185
+}
186
+
187
+/* ========================
188
+ AUTHENTICATION SECTION
189
+ ======================== */
190
+
191
+.auth-section {
192
+ display: flex;
193
+ align-items: center;
194
+ justify-content: center;
195
+ min-height: 80vh;
196
+}
197
+
198
+.auth-container {
199
+ width: 100%;
200
+ max-width: 400px;
201
+}
202
+
203
+.auth-box {
204
+ background-color: white;
205
+ padding: 40px 30px;
206
+ box-shadow: var(--box-shadow);
207
+ border: 1px solid var(--gray-200);
208
+}
209
+
210
+.auth-box h2 {
211
+ font-size: 24px;
212
+ margin-bottom: 30px;
213
+ color: var(--gray-900);
214
+ text-align: center;
215
+}
216
+
217
+/* ========================
218
+ FORM STYLES
219
+ ======================== */
220
+
221
+.form {
222
+ width: 100%;
223
+}
224
+
225
+.form-group {
226
+ margin-bottom: 20px;
227
+ display: flex;
228
+ flex-direction: column;
229
+}
230
+
231
+.form-group label {
232
+ font-size: 14px;
233
+ font-weight: 600;
234
+ margin-bottom: 8px;
235
+ color: var(--gray-700);
236
+}
237
+
238
+.form-group input,
239
+.form-group select,
240
+.form-group textarea {
241
+ padding: 10px 12px;
242
+ border: 1px solid var(--gray-300);
243
+ background-color: white;
244
+ font-size: 14px;
245
+ font-family: inherit;
246
+ transition: var(--transition);
247
+}
248
+
249
+.form-group input:focus,
250
+.form-group select:focus,
251
+.form-group textarea:focus {
252
+ outline: none;
253
+ border-color: var(--primary-color);
254
+ box-shadow: 0 0 0 3px rgba(30, 64, 175, 0.1);
255
+}
256
+
257
+.error-message {
258
+ font-size: 12px;
259
+ color: var(--danger-color);
260
+ margin-top: 4px;
261
+ display: none;
262
+}
263
+
264
+.error-message.show {
265
+ display: block;
266
+}
267
+
268
+.error-box {
269
+ background-color: #fee2e2;
270
+ border: 1px solid #fca5a5;
271
+ color: var(--danger-color);
272
+ padding: 12px;
273
+ margin-bottom: 20px;
274
+ font-size: 14px;
275
+}
276
+
277
+/* ========================
278
+ BUTTONS
279
+ ======================== */
280
+
281
+.btn {
282
+ padding: 10px 16px;
283
+ border: none;
284
+ cursor: pointer;
285
+ font-size: 14px;
286
+ font-weight: 600;
287
+ transition: var(--transition);
288
+ border: 1px solid transparent;
289
+}
290
+
291
+.btn-primary {
292
+ background-color: var(--primary-color);
293
+ color: white;
294
+ width: 100%;
295
+ margin-top: 10px;
296
+}
297
+
298
+.btn-primary:hover {
299
+ background-color: #1e3a8a;
300
+}
301
+
302
+.btn-primary:disabled {
303
+ background-color: var(--gray-400);
304
+ cursor: not-allowed;
305
+}
306
+
307
+.btn-secondary {
308
+ background-color: var(--gray-200);
309
+ color: var(--gray-800);
310
+}
311
+
312
+.btn-secondary:hover {
313
+ background-color: var(--gray-300);
314
+}
315
+
316
+.btn-success {
317
+ background-color: var(--success-color);
318
+ color: white;
319
+}
320
+
321
+.btn-success:hover {
322
+ background-color: #059669;
323
+}
324
+
325
+.link-btn {
326
+ background: none;
327
+ border: none;
328
+ color: var(--primary-color);
329
+ cursor: pointer;
330
+ font-weight: 600;
331
+ padding: 0;
332
+ text-decoration: underline;
333
+ font-size: 14px;
334
+}
335
+
336
+.link-btn:hover {
337
+ color: #1e3a8a;
338
+}
339
+
340
+/* ========================
341
+ AUTH TOGGLE
342
+ ======================== */
343
+
344
+.auth-toggle {
345
+ text-align: center;
346
+ margin-top: 20px;
347
+ padding-top: 20px;
348
+ border-top: 1px solid var(--gray-200);
349
+ font-size: 14px;
350
+ color: var(--gray-600);
351
+}
352
+
353
+/* ========================
354
+ LOADING SPINNER
355
+ ======================== */
356
+
357
+.loading-spinner {
358
+ display: flex;
359
+ flex-direction: column;
360
+ align-items: center;
361
+ gap: 15px;
362
+ margin-top: 20px;
363
+}
364
+
365
+.spinner {
366
+ width: 30px;
367
+ height: 30px;
368
+ border: 3px solid var(--gray-200);
369
+ border-top-color: var(--primary-color);
370
+ border-radius: 50%;
371
+ animation: spin 1s linear infinite;
372
+}
373
+
374
+@keyframes spin {
375
+ to {
376
+ transform: rotate(360deg);
377
+ }
378
+}
379
+
380
+/* ========================
381
+ DASHBOARD SECTION
382
+ ======================== */
383
+
384
+.dashboard-section {
385
+ padding: 40px;
386
+}
387
+
388
+.welcome-box {
389
+ background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
390
+ color: white;
391
+ padding: 30px;
392
+ margin-bottom: 40px;
393
+ border: 1px solid rgba(255, 255, 255, 0.1);
394
+}
395
+
396
+.welcome-box h2 {
397
+ font-size: 28px;
398
+ margin-bottom: 10px;
399
+}
400
+
401
+.welcome-box p {
402
+ font-size: 16px;
403
+ opacity: 0.9;
404
+}
405
+
406
+/* ========================
407
+ STATS GRID
408
+ ======================== */
409
+
410
+.stats-grid {
411
+ display: grid;
412
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
413
+ gap: 20px;
414
+ margin-bottom: 40px;
415
+}
416
+
417
+.stat-card {
418
+ background-color: white;
419
+ padding: 30px;
420
+ border: 1px solid var(--gray-200);
421
+ box-shadow: var(--box-shadow);
422
+ text-align: center;
423
+}
424
+
425
+.stat-card h3 {
426
+ font-size: 32px;
427
+ color: var(--primary-color);
428
+ margin-bottom: 10px;
429
+}
430
+
431
+.stat-card p {
432
+ font-size: 14px;
433
+ color: var(--gray-600);
434
+}
435
+
436
+/* ========================
437
+ ACTIVITY SECTION
438
+ ======================== */
439
+
440
+.activity-section {
441
+ background-color: white;
442
+ padding: 30px;
443
+ border: 1px solid var(--gray-200);
444
+ box-shadow: var(--box-shadow);
445
+}
446
+
447
+.activity-section h3 {
448
+ margin-bottom: 20px;
449
+ font-size: 18px;
450
+ color: var(--gray-900);
451
+ border-bottom: 2px solid var(--primary-color);
452
+ padding-bottom: 10px;
453
+}
454
+
455
+.activity-list {
456
+ display: flex;
457
+ flex-direction: column;
458
+ gap: 15px;
459
+}
460
+
461
+.activity-item {
462
+ padding: 15px;
463
+ background-color: var(--gray-50);
464
+ border-left: 3px solid var(--primary-color);
465
+}
466
+
467
+.empty-state {
468
+ text-align: center;
469
+ color: var(--gray-400);
470
+ padding: 40px 20px;
471
+}
472
+
473
+/* ========================
474
+ FOOTER
475
+ ======================== */
476
+
477
+.footer {
478
+ background-color: var(--gray-900);
479
+ color: white;
480
+ text-align: center;
481
+ padding: 20px;
482
+ font-size: 14px;
483
+ margin-left: 250px;
484
+}
485
+
486
+/* ========================
487
+ GLOBAL ERROR
488
+ ======================== */
489
+
490
+.global-error {
491
+ position: fixed;
492
+ top: 20px;
493
+ right: 20px;
494
+ background-color: var(--danger-color);
495
+ color: white;
496
+ padding: 15px 20px;
497
+ border: 1px solid #dc2626;
498
+ max-width: 400px;
499
+ z-index: 1000;
500
+ animation: slideIn 0.3s ease;
501
+}
502
+
503
+@keyframes slideIn {
504
+ from {
505
+ transform: translateX(400px);
506
+ opacity: 0;
507
+ }
508
+ to {
509
+ transform: translateX(0);
510
+ opacity: 1;
511
+ }
512
+}
513
+
514
+/* ========================
515
+ UTILITIES
516
+ ======================== */
517
+
518
+.text-center {
519
+ text-align: center;
520
+}
521
+
522
+.mt-20 {
523
+ margin-top: 20px;
524
+}
525
+
526
+.mb-20 {
527
+ margin-bottom: 20px;
528
+}
529
+
530
+.p-20 {
531
+ padding: 20px;
532
+}
533
+
534
+.text-muted {
535
+ color: var(--gray-500);
536
+}
537
+
538
+.text-danger {
539
+ color: var(--danger-color);
540
+}
541
+
542
+.text-success {
543
+ color: var(--success-color);
544
+}