@cuencor/styles 0.0.1

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/_forms.scss ADDED
@@ -0,0 +1,316 @@
1
+ /* ── Forms ──────────────────────────────────────────────────────────────── */
2
+
3
+ .fn-form-group {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 5px;
7
+ margin-bottom: 1rem;
8
+ }
9
+
10
+ .fn-form-label {
11
+ font-size: var(--fn-text-sm);
12
+ font-weight: 600;
13
+ color: var(--fn-gray-700);
14
+ }
15
+
16
+ .fn-form-hint {
17
+ font-size: var(--fn-text-xs);
18
+ color: var(--fn-gray-500);
19
+ line-height: 1.4;
20
+
21
+ &--valid { color: var(--fn-success-600); font-weight: 500; }
22
+ }
23
+
24
+ .fn-form-error {
25
+ font-size: var(--fn-text-xs);
26
+ color: var(--fn-danger-600);
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 4px;
30
+ }
31
+
32
+ /* ── Text input / Textarea ── */
33
+ .fn-input {
34
+ width: 100%;
35
+ padding: 9px 12px;
36
+ font-family: var(--fn-font-sans);
37
+ font-size: var(--fn-text-sm);
38
+ color: var(--fn-gray-900);
39
+ background: #fff;
40
+ border: 1px solid var(--fn-gray-300);
41
+ border-radius: var(--fn-radius);
42
+ transition: border-color var(--fn-transition), box-shadow var(--fn-transition);
43
+ appearance: none;
44
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
45
+
46
+ &::placeholder { color: var(--fn-gray-400); }
47
+
48
+ &:hover:not(:focus):not(:disabled):not(:read-only) {
49
+ border-color: var(--fn-gray-400);
50
+ }
51
+
52
+ &:focus {
53
+ outline: none;
54
+ border-color: var(--fn-primary-500);
55
+ box-shadow: 0 0 0 3px rgba(47, 75, 179, 0.14);
56
+ }
57
+
58
+ &:disabled {
59
+ opacity: 0.5;
60
+ cursor: not-allowed;
61
+ background-color: var(--fn-gray-50);
62
+ }
63
+
64
+ &--error {
65
+ border-color: var(--fn-danger-500);
66
+ &:focus { box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.14); }
67
+ }
68
+
69
+ &--sm { padding: 6px 10px; font-size: var(--fn-text-xs); }
70
+ &--lg { padding: 11px 14px; font-size: var(--fn-text-base); }
71
+ }
72
+
73
+ textarea.fn-input {
74
+ resize: vertical;
75
+ min-height: 88px;
76
+ line-height: 1.5;
77
+ }
78
+
79
+ /* ── Select ── */
80
+ .fn-select {
81
+ width: 100%;
82
+ padding: 9px 36px 9px 12px;
83
+ font-family: var(--fn-font-sans);
84
+ font-size: var(--fn-text-sm);
85
+ font-weight: 500;
86
+ color: var(--fn-gray-800);
87
+ background: #fff;
88
+ border: 1px solid var(--fn-gray-300);
89
+ border-radius: var(--fn-radius);
90
+ // Chevron navy más elegante (stroke-width 2.5, color navy)
91
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23192a56' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
92
+ background-repeat: no-repeat;
93
+ background-position: right 10px center;
94
+ appearance: none;
95
+ cursor: pointer;
96
+ transition: border-color var(--fn-transition), box-shadow var(--fn-transition), background-color var(--fn-transition);
97
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
98
+
99
+ &:hover:not(:focus):not(:disabled) {
100
+ border-color: var(--fn-gray-400);
101
+ background-color: var(--fn-gray-50);
102
+ }
103
+
104
+ &:focus {
105
+ outline: none;
106
+ border-color: var(--fn-primary-500);
107
+ box-shadow: 0 0 0 3px rgba(47, 75, 179, 0.14);
108
+ background-color: #fff;
109
+ }
110
+
111
+ &:disabled {
112
+ opacity: 0.5;
113
+ cursor: not-allowed;
114
+ background-color: var(--fn-gray-50);
115
+ }
116
+
117
+ option {
118
+ font-weight: 400;
119
+ color: var(--fn-gray-800);
120
+ background: #fff;
121
+ }
122
+
123
+ &--error { border-color: var(--fn-danger-500); }
124
+
125
+ &--sm {
126
+ padding: 6px 30px 6px 10px;
127
+ font-size: var(--fn-text-xs);
128
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23192a56' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
129
+ background-position: right 8px center;
130
+ }
131
+ }
132
+
133
+ /* ── Input group (icon + input) ── */
134
+ .fn-input-group {
135
+ position: relative;
136
+
137
+ .fn-input,
138
+ .fn-select { padding-left: 36px; }
139
+
140
+ &--suffix .fn-input { padding-right: 36px; }
141
+
142
+ &__icon {
143
+ position: absolute;
144
+ left: 10px;
145
+ top: 50%;
146
+ transform: translateY(-50%);
147
+ color: var(--fn-gray-400);
148
+ pointer-events: none;
149
+ display: flex;
150
+ align-items: center;
151
+ }
152
+
153
+ &__suffix {
154
+ position: absolute;
155
+ right: 10px;
156
+ top: 50%;
157
+ transform: translateY(-50%);
158
+ color: var(--fn-gray-400);
159
+ display: flex;
160
+ align-items: center;
161
+ }
162
+
163
+ /* Show/hide password toggle button inside input */
164
+ &__toggle {
165
+ background: transparent;
166
+ border: none;
167
+ cursor: pointer;
168
+ padding: 2px;
169
+ border-radius: var(--fn-radius-sm);
170
+ color: var(--fn-gray-400);
171
+ display: flex;
172
+ align-items: center;
173
+ pointer-events: all;
174
+ transition: color var(--fn-transition);
175
+
176
+ &:hover { color: var(--fn-gray-600); }
177
+ }
178
+ }
179
+
180
+ /* ── Change password page layout ── */
181
+ .fn-change-pwd {
182
+ &__actions {
183
+ display: flex;
184
+ justify-content: flex-end;
185
+ gap: 10px;
186
+ margin-top: 24px;
187
+ padding-top: 20px;
188
+ border-top: 1px solid var(--fn-gray-100);
189
+ }
190
+ }
191
+
192
+ /* ── Checkbox & Radio ── */
193
+ .fn-checkbox,
194
+ .fn-radio {
195
+ display: flex;
196
+ align-items: flex-start;
197
+ gap: 8px;
198
+ cursor: pointer;
199
+
200
+ input[type='checkbox'],
201
+ input[type='radio'] {
202
+ width: 16px;
203
+ height: 16px;
204
+ flex-shrink: 0;
205
+ margin-top: 2px;
206
+ accent-color: var(--fn-primary-700);
207
+ cursor: pointer;
208
+ }
209
+
210
+ span {
211
+ font-size: var(--fn-text-sm);
212
+ color: var(--fn-gray-700);
213
+ line-height: 1.4;
214
+ }
215
+ }
216
+
217
+ /* ── Password strength indicator ── */
218
+ .fn-pwd-strength {
219
+ margin-top: 8px;
220
+
221
+ &__bars {
222
+ display: flex;
223
+ gap: 4px;
224
+ margin-bottom: 6px;
225
+ }
226
+
227
+ &__bar {
228
+ flex: 1;
229
+ height: 4px;
230
+ border-radius: var(--fn-radius-full);
231
+ background: var(--fn-gray-200);
232
+ transition: background var(--fn-transition);
233
+
234
+ &--weak { background: var(--fn-danger-500); }
235
+ &--fair { background: var(--fn-warning-400); }
236
+ &--good { background: var(--fn-info-500); }
237
+ &--strong { background: var(--fn-success-500); }
238
+ }
239
+
240
+ &__label {
241
+ display: block;
242
+ font-size: var(--fn-text-xs);
243
+ font-weight: 600;
244
+ margin-bottom: 8px;
245
+
246
+ &--weak { color: var(--fn-danger-600); }
247
+ &--fair { color: var(--fn-warning-600); }
248
+ &--good { color: var(--fn-info-600); }
249
+ &--strong { color: var(--fn-success-600); }
250
+ }
251
+
252
+ &__rules {
253
+ list-style: none;
254
+ padding: 0;
255
+ margin: 0;
256
+ display: flex;
257
+ flex-direction: column;
258
+ gap: 4px;
259
+ }
260
+
261
+ &__rule {
262
+ display: flex;
263
+ align-items: center;
264
+ gap: 6px;
265
+ font-size: var(--fn-text-xs);
266
+ color: var(--fn-gray-400);
267
+ line-height: 1.4;
268
+ transition: color var(--fn-transition);
269
+
270
+ lucide-icon { flex-shrink: 0; }
271
+
272
+ &--met {
273
+ color: var(--fn-success-600);
274
+ }
275
+ }
276
+ }
277
+
278
+ /* ── Toggle switch ── */
279
+ .fn-toggle {
280
+ display: inline-flex;
281
+ align-items: center;
282
+ gap: 8px;
283
+ cursor: pointer;
284
+
285
+ input[type='checkbox'] {
286
+ appearance: none;
287
+ width: 36px;
288
+ height: 20px;
289
+ background: var(--fn-gray-300);
290
+ border-radius: var(--fn-radius-full);
291
+ position: relative;
292
+ transition: background var(--fn-transition);
293
+ flex-shrink: 0;
294
+ cursor: pointer;
295
+
296
+ &::after {
297
+ content: '';
298
+ position: absolute;
299
+ top: 2px;
300
+ left: 2px;
301
+ width: 16px;
302
+ height: 16px;
303
+ background: #fff;
304
+ border-radius: 50%;
305
+ transition: transform var(--fn-transition);
306
+ box-shadow: var(--fn-shadow-sm);
307
+ }
308
+
309
+ &:checked {
310
+ background: var(--fn-primary-700);
311
+ &::after { transform: translateX(16px); }
312
+ }
313
+ }
314
+
315
+ span { font-size: var(--fn-text-sm); color: var(--fn-gray-700); }
316
+ }