med-cms 1.0.0-beta.2 → 1.0.0-beta.5
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.
- package/database/config/db-init.js +67 -53
- package/database/models/appointments.js +35 -20
- package/database/models/clinics.js +25 -13
- package/database/models/diseases.js +21 -13
- package/database/models/districts.js +55 -0
- package/database/models/news.js +25 -0
- package/database/models/user-addresses.js +21 -14
- package/database/models/users.js +69 -26
- package/database/services/admin/create-clinic.js +18 -6
- package/database/services/admin/db-analytics.js +42 -16
- package/database/services/admin/index.js +6 -6
- package/database/services/admin/manage-staff.js +47 -17
- package/database/services/doctor/conduct-exam.js +26 -20
- package/database/services/doctor/get-schedule.js +26 -18
- package/database/services/doctor/index.js +6 -6
- package/database/services/doctor/patient-access.js +34 -25
- package/database/services/patient/book-appointment.js +37 -17
- package/database/services/patient/calc-district.js +70 -21
- package/database/services/patient/get-profile.js +49 -21
- package/database/services/patient/index.js +5 -5
- package/index.js +45 -22
- package/migrate-diseases.js +192 -120
- package/package.json +1 -1
- package/public/css/admin.css +80 -80
- package/public/css/auth.css +52 -44
- package/public/css/doctor.css +131 -125
- package/public/css/home.css +155 -0
- package/public/html/dashboard-admin.html +423 -101
- package/public/html/dashboard-doctor.html +155 -66
- package/public/html/dashboard-patient.html +199 -94
- package/public/html/home/about.html +0 -0
- package/public/html/home/contact.html +0 -0
- package/public/html/home/info.html +0 -0
- package/public/html/home.html +159 -0
- package/public/html/login.html +73 -43
- package/public/js/admin.js +329 -165
- package/public/js/auth.js +45 -41
- package/public/js/doctor.js +117 -103
- package/public/js/home.js +113 -0
- package/public/js/patient.js +130 -108
- package/server/midleware.js +33 -13
- package/server/permissions.js +105 -43
- package/server/server.js +493 -176
- package/test.js +12 -23
package/public/css/admin.css
CHANGED
|
@@ -1,129 +1,129 @@
|
|
|
1
1
|
body {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
font-family: "Segoe UI", system-ui, sans-serif;
|
|
3
|
+
background-color: #f8fafc;
|
|
4
|
+
color: #0f172a;
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.admin-panel {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
max-width: 1200px;
|
|
11
|
+
margin: 0 auto;
|
|
12
|
+
padding: 30px 20px;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
header {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
align-items: center;
|
|
19
|
+
border-bottom: 2px solid #e2e8f0;
|
|
20
|
+
padding-bottom: 20px;
|
|
21
|
+
margin-bottom: 30px;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
header h1 {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
margin: 0;
|
|
26
|
+
font-size: 24px;
|
|
27
|
+
color: #1e3a8a;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
.btn-logout {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
background-color: #ef4444;
|
|
32
|
+
color: white;
|
|
33
|
+
border: none;
|
|
34
|
+
padding: 10px 20px;
|
|
35
|
+
border-radius: 6px;
|
|
36
|
+
font-weight: bold;
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
transition: background 0.2s;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.btn-logout:hover {
|
|
42
|
-
|
|
42
|
+
background-color: #dc2626;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
/* Карточки аналитики БД */
|
|
46
46
|
.stats-cards {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
display: grid;
|
|
48
|
+
grid-template-columns: repeat(3, 1fr);
|
|
49
|
+
gap: 20px;
|
|
50
|
+
margin-bottom: 40px;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
.card {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
background: white;
|
|
55
|
+
padding: 20px;
|
|
56
|
+
border-radius: 8px;
|
|
57
|
+
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.03);
|
|
58
|
+
font-size: 16px;
|
|
59
|
+
font-weight: 500;
|
|
60
|
+
color: #475569;
|
|
61
|
+
border-top: 4px solid #2563eb;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
.card span {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
display: block;
|
|
66
|
+
font-size: 32px;
|
|
67
|
+
font-weight: 700;
|
|
68
|
+
color: #0f172a;
|
|
69
|
+
margin-top: 10px;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/* Сетка с формами задач */
|
|
73
73
|
.grid-forms {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
display: grid;
|
|
75
|
+
grid-template-columns: 1fr 1fr;
|
|
76
|
+
gap: 30px;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.form-box {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
background: white;
|
|
81
|
+
padding: 25px;
|
|
82
|
+
border-radius: 8px;
|
|
83
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
.form-box h3 {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
margin-top: 0;
|
|
88
|
+
margin-bottom: 20px;
|
|
89
|
+
color: #0f172a;
|
|
90
|
+
font-size: 18px;
|
|
91
|
+
border-left: 4px solid #2563eb;
|
|
92
|
+
padding-left: 10px;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
.form-box form input,
|
|
95
|
+
.form-box form input,
|
|
96
96
|
.form-box form select {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
width: 100%;
|
|
98
|
+
padding: 12px;
|
|
99
|
+
margin-bottom: 15px;
|
|
100
|
+
border: 1px solid #cbd5e1;
|
|
101
|
+
border-radius: 6px;
|
|
102
|
+
font-size: 14px;
|
|
103
|
+
box-sizing: border-box;
|
|
104
|
+
background-color: #fff;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
.form-box form input:focus,
|
|
107
|
+
.form-box form input:focus,
|
|
108
108
|
.form-box form select:focus {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
border-color: #2563eb;
|
|
110
|
+
outline: none;
|
|
111
|
+
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
.form-box form button {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
width: 100%;
|
|
116
|
+
padding: 12px;
|
|
117
|
+
background-color: #2563eb;
|
|
118
|
+
color: white;
|
|
119
|
+
border: none;
|
|
120
|
+
border-radius: 6px;
|
|
121
|
+
font-weight: bold;
|
|
122
|
+
font-size: 15px;
|
|
123
|
+
cursor: pointer;
|
|
124
|
+
transition: background 0.2s;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
.form-box form button:hover {
|
|
128
|
-
|
|
128
|
+
background-color: #1d4ed8;
|
|
129
129
|
}
|
package/public/css/auth.css
CHANGED
|
@@ -1,55 +1,63 @@
|
|
|
1
1
|
body {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
|
|
3
|
+
background-color: #f0f4f8;
|
|
4
|
+
margin: 0;
|
|
5
|
+
display: flex;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
align-items: center;
|
|
8
|
+
height: 100vh;
|
|
9
9
|
}
|
|
10
10
|
.auth-container {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
background: #ffffff;
|
|
12
|
+
padding: 30px;
|
|
13
|
+
border-radius: 8px;
|
|
14
|
+
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
|
|
15
|
+
width: 350px;
|
|
16
16
|
}
|
|
17
17
|
.form-group {
|
|
18
|
-
|
|
18
|
+
margin-bottom: 15px;
|
|
19
19
|
}
|
|
20
20
|
.form-group label {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
.form-group input,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
21
|
+
display: block;
|
|
22
|
+
margin-bottom: 5px;
|
|
23
|
+
font-size: 14px;
|
|
24
|
+
color: #4a5568;
|
|
25
|
+
}
|
|
26
|
+
.form-group input,
|
|
27
|
+
textarea,
|
|
28
|
+
select {
|
|
29
|
+
width: 100%;
|
|
30
|
+
padding: 10px;
|
|
31
|
+
border: 1px solid #cbd5e1;
|
|
32
|
+
border-radius: 4px;
|
|
33
|
+
box-sizing: border-box;
|
|
34
|
+
}
|
|
35
|
+
.btn,
|
|
36
|
+
.btn-save,
|
|
37
|
+
button[type="submit"] {
|
|
38
|
+
width: 100%;
|
|
39
|
+
padding: 11px;
|
|
40
|
+
background-color: #2563eb;
|
|
41
|
+
color: white;
|
|
42
|
+
border: none;
|
|
43
|
+
border-radius: 4px;
|
|
44
|
+
font-weight: bold;
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
}
|
|
47
|
+
.btn:hover {
|
|
48
|
+
background-color: #1d4ed8;
|
|
49
|
+
}
|
|
50
|
+
.hidden {
|
|
51
|
+
display: none !important;
|
|
52
|
+
}
|
|
45
53
|
.toggle-text {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
font-size: 13px;
|
|
55
|
+
text-align: center;
|
|
56
|
+
color: #64748b;
|
|
57
|
+
margin-top: 15px;
|
|
50
58
|
}
|
|
51
59
|
.toggle-text span {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
color: #2563eb;
|
|
61
|
+
cursor: pointer;
|
|
62
|
+
text-decoration: underline;
|
|
55
63
|
}
|
package/public/css/doctor.css
CHANGED
|
@@ -1,204 +1,210 @@
|
|
|
1
1
|
/* Общие настройки интерфейса врача */
|
|
2
2
|
body {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
font-family:
|
|
4
|
+
"Segoe UI",
|
|
5
|
+
system-ui,
|
|
6
|
+
-apple-system,
|
|
7
|
+
sans-serif;
|
|
8
|
+
background-color: #f1f5f9;
|
|
9
|
+
color: #0f172a;
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 0;
|
|
8
12
|
}
|
|
9
13
|
|
|
10
14
|
.dashboard {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
max-width: 1200px;
|
|
16
|
+
margin: 0 auto;
|
|
17
|
+
padding: 20px;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
/* Шапка АРМ Врача */
|
|
17
21
|
header {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
display: flex;
|
|
23
|
+
justify-content: space-between;
|
|
24
|
+
align-items: center;
|
|
25
|
+
background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
|
|
26
|
+
color: white;
|
|
27
|
+
padding: 20px 30px;
|
|
28
|
+
border-radius: 12px;
|
|
29
|
+
box-shadow: 0 4px 15px rgba(30, 58, 138, 0.15);
|
|
30
|
+
margin-bottom: 25px;
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
header h1 {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
margin: 0;
|
|
35
|
+
font-size: 22px;
|
|
36
|
+
font-weight: 600;
|
|
37
|
+
letter-spacing: 0.5px;
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
.btn-logout {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
background-color: rgba(255, 255, 255, 0.2);
|
|
42
|
+
color: white;
|
|
43
|
+
border: 1px solid rgba(255, 255, 255, 0.4);
|
|
44
|
+
padding: 8px 18px;
|
|
45
|
+
border-radius: 6px;
|
|
46
|
+
font-weight: bold;
|
|
47
|
+
cursor: pointer;
|
|
48
|
+
transition: all 0.2s;
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
.btn-logout:hover {
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
background-color: #ef4444;
|
|
53
|
+
border-color: #ef4444;
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
/* Главный рабочий контент (Сетка) */
|
|
53
57
|
.main-content {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
display: grid;
|
|
59
|
+
grid-template-columns: 1fr 2fr;
|
|
60
|
+
gap: 25px;
|
|
61
|
+
align-items: start;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
/* Секция расписания и очереди */
|
|
61
65
|
.schedule-section {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
background: white;
|
|
67
|
+
padding: 20px;
|
|
68
|
+
border-radius: 12px;
|
|
69
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
|
|
70
|
+
border-top: 4px solid #3b82f6;
|
|
67
71
|
}
|
|
68
72
|
|
|
69
|
-
.schedule-section h3,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
.schedule-section h3,
|
|
74
|
+
.exam-section h3 {
|
|
75
|
+
margin-top: 0;
|
|
76
|
+
margin-bottom: 15px;
|
|
77
|
+
color: #1e3a8a;
|
|
78
|
+
font-size: 18px;
|
|
74
79
|
}
|
|
75
80
|
|
|
76
81
|
.patient-list {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
82
|
+
list-style: none;
|
|
83
|
+
padding: 0;
|
|
84
|
+
margin: 0;
|
|
80
85
|
}
|
|
81
86
|
|
|
82
87
|
.patient-list li {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
display: flex;
|
|
89
|
+
justify-content: space-between;
|
|
90
|
+
align-items: center;
|
|
91
|
+
padding: 12px 15px;
|
|
92
|
+
background: #f8fafc;
|
|
93
|
+
border: 1px solid #e2e8f0;
|
|
94
|
+
border-radius: 8px;
|
|
95
|
+
margin-bottom: 10px;
|
|
96
|
+
font-size: 14px;
|
|
92
97
|
}
|
|
93
98
|
|
|
94
99
|
.patient-list li b {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
100
|
+
color: #2563eb;
|
|
101
|
+
background: #eff6ff;
|
|
102
|
+
padding: 2px 6px;
|
|
103
|
+
border-radius: 4px;
|
|
99
104
|
}
|
|
100
105
|
|
|
101
106
|
.btn-action {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
background-color: #10b981;
|
|
108
|
+
color: white;
|
|
109
|
+
border: none;
|
|
110
|
+
padding: 6px 12px;
|
|
111
|
+
border-radius: 6px;
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
font-weight: 600;
|
|
114
|
+
font-size: 13px;
|
|
115
|
+
transition: background 0.2s;
|
|
111
116
|
}
|
|
112
117
|
|
|
113
118
|
.btn-action:hover {
|
|
114
|
-
|
|
119
|
+
background-color: #059669;
|
|
115
120
|
}
|
|
116
121
|
|
|
117
122
|
/* Секция интерактивного осмотра */
|
|
118
123
|
.exam-section {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
background: white;
|
|
125
|
+
padding: 25px;
|
|
126
|
+
border-radius: 12px;
|
|
127
|
+
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.04);
|
|
128
|
+
border-top: 4px solid #10b981;
|
|
124
129
|
}
|
|
125
130
|
|
|
126
131
|
.exam-section h3 span {
|
|
127
|
-
|
|
128
|
-
|
|
132
|
+
color: #059669;
|
|
133
|
+
text-decoration: underline;
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
/* Стилизация медицинских текстовых полей */
|
|
132
137
|
.form-group {
|
|
133
|
-
|
|
138
|
+
margin-bottom: 20px;
|
|
134
139
|
}
|
|
135
140
|
|
|
136
141
|
.form-group label {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
+
display: block;
|
|
143
|
+
font-weight: 600;
|
|
144
|
+
margin-bottom: 8px;
|
|
145
|
+
font-size: 14px;
|
|
146
|
+
color: #334155;
|
|
142
147
|
}
|
|
143
148
|
|
|
144
149
|
.form-group textarea {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.form-group textarea:focus,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
150
|
+
width: 100%;
|
|
151
|
+
height: 90px;
|
|
152
|
+
padding: 12px;
|
|
153
|
+
border: 1px solid #cbd5e1;
|
|
154
|
+
border-radius: 8px;
|
|
155
|
+
font-family: inherit;
|
|
156
|
+
font-size: 14px;
|
|
157
|
+
box-sizing: border-box;
|
|
158
|
+
resize: vertical;
|
|
159
|
+
background-color: #f8fafc;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.form-group textarea:focus,
|
|
163
|
+
.form-group select:focus {
|
|
164
|
+
border-color: #10b981;
|
|
165
|
+
outline: none;
|
|
166
|
+
background-color: #fff;
|
|
167
|
+
box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);
|
|
162
168
|
}
|
|
163
169
|
|
|
164
170
|
.form-group select {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
width: 100%;
|
|
172
|
+
padding: 12px;
|
|
173
|
+
border: 1px solid #cbd5e1;
|
|
174
|
+
border-radius: 8px;
|
|
175
|
+
font-size: 14px;
|
|
176
|
+
background-color: #f8fafc;
|
|
177
|
+
box-sizing: border-box;
|
|
178
|
+
cursor: pointer;
|
|
173
179
|
}
|
|
174
180
|
|
|
175
181
|
/* Кнопка сохранения осмотра в статистику */
|
|
176
182
|
.btn-save {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
183
|
+
width: 100%;
|
|
184
|
+
padding: 14px;
|
|
185
|
+
background: #10b981;
|
|
186
|
+
color: white;
|
|
187
|
+
border: none;
|
|
188
|
+
border-radius: 8px;
|
|
189
|
+
font-weight: bold;
|
|
190
|
+
font-size: 15px;
|
|
191
|
+
cursor: pointer;
|
|
192
|
+
transition: background 0.2s;
|
|
193
|
+
box-shadow: 0 2px 5px rgba(16, 185, 129, 0.2);
|
|
188
194
|
}
|
|
189
195
|
|
|
190
196
|
.btn-save:hover {
|
|
191
|
-
|
|
197
|
+
background: #059669;
|
|
192
198
|
}
|
|
193
199
|
|
|
194
200
|
/* Служебные классы */
|
|
195
201
|
.hidden {
|
|
196
|
-
|
|
202
|
+
display: none !important;
|
|
197
203
|
}
|
|
198
204
|
|
|
199
205
|
/* Адаптивность для небольших экранов */
|
|
200
206
|
@media (max-width: 768px) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
207
|
+
.main-content {
|
|
208
|
+
grid-template-columns: 1fr;
|
|
209
|
+
}
|
|
204
210
|
}
|