1
+ /* assets/css/button-generator-style.css */
2
+
3
+ /* --- Переменные (можно использовать из layout-styles.css, если они глобальные) --- */
4
+ : root {
5
+ --btn-gen-text : var (--text-color , # e0e0e0 );
6
+ --btn-gen-text-muted : var (--text-color-muted , # b3b3cc );
7
+ --btn-gen-bg-panel : var (--bg-color-lighter , # 2a2a4e );
8
+ --btn-gen-bg-fieldset : rgba (255 , 255 , 255 , 0.03 );
9
+ --btn-gen-border : var (--border-color , rgba (135 , 206 , 250 , 0.3 ));
10
+ --btn-gen-accent : var (--link-color , # 87CEFA );
11
+ --btn-gen-input-bg : rgba (0 , 0 , 0 , 0.15 );
12
+ }
13
+
14
+ /* --- Основной контейнер --- */
15
+ .button-generator-container {
16
+ display : grid;
17
+ grid-template-columns : minmax (320px , 1fr ) 2fr ; /* Чуть больше мин. ширина настроек */
18
+ gap : 2rem ;
19
+ max-width : 1300px ; /* Можно увеличить */
20
+ margin : 0 auto;
21
+ /* Задаем высоту контейнеру, чтобы ограничить высоту дочерних элементов */
22
+ /* Можно использовать vh (viewport height) минус высота шапки/подвала */
23
+ /* Пример: 100vh - высота шапки - высота подвала - отступы */
24
+ /* Либо фиксированную высоту, если шапка/подвал не видны */
25
+ /* height: calc(100vh - 150px); */ /* Пример расчета, подбери значение */
26
+ /* Или пока не задаем, пусть растягивается */
27
+ align-items : start; /* Выравнивание колонок по верху */
28
+ }
29
+
30
+ /* Панель Настроек */
31
+ .controls-panel {
32
+ background-color : var (--btn-gen-bg-panel );
33
+ padding : 1.5rem ;
34
+ border-radius : 8px ;
35
+ box-shadow : 0 2px 10px rgba (0 , 0 , 0 , 0.2 );
36
+ display : flex;
37
+ flex-direction : column;
38
+ gap : 1.5rem ;
39
+ /* --- Добавляем скролл --- */
40
+ max-height : calc (90vh - 100px ); /* Примерная макс. высота (подбери значение) */
41
+ /* Или можно так: position: sticky; top: 20px; max-height: calc(100vh - 40px); */
42
+ overflow-y : auto; /* Включаем вертикальный скролл */
43
+ /* Стилизация скроллбара (опционально) */
44
+ scrollbar-width : thin;
45
+ scrollbar-color : var (--btn-gen-border ) var (--btn-gen-bg-panel );
46
+ }
47
+ .controls-panel ::-webkit-scrollbar { width : 8px ; }
48
+ .controls-panel ::-webkit-scrollbar-track { background : var (--btn-gen-bg-fieldset ); border-radius : 4px ;}
49
+ .controls-panel ::-webkit-scrollbar-thumb { background-color : var (--btn-gen-border ); border-radius : 4px ; }
50
+
51
+ .controls-panel h2 {
52
+ text-align : center;
53
+ margin-bottom : 0 ; /* Убрали нижний отступ, используем gap */
54
+ font-size : 1.5em ;
55
+ color : var (--btn-gen-text );
56
+ }
57
+
58
+ .controls-panel fieldset {
59
+ border : 1px solid var (--btn-gen-border );
60
+ border-radius : 6px ;
61
+ padding : 1rem 1.2rem ;
62
+ margin : 0 ;
63
+ background-color : var (--btn-gen-bg-fieldset );
64
+ }
65
+
66
+ .controls-panel legend {
67
+ padding : 0 0.5em ;
68
+ font-weight : bold;
69
+ color : var (--btn-gen-text-muted );
70
+ font-size : 0.9em ;
71
+ }
72
+ /* Легенда с чекбоксом */
73
+ .controls-panel legend label {
74
+ display : inline-flex;
75
+ align-items : center;
76
+ gap : 0.5em ;
77
+ cursor : pointer;
78
+ }
79
+
80
+ /* Группа контролов */
81
+ .control-group {
82
+ margin-bottom : 0.8rem ;
83
+ }
84
+ .control-group : last-child {
85
+ margin-bottom : 0 ;
86
+ }
87
+ .control-group label {
88
+ display : block;
89
+ margin-bottom : 0.3rem ;
90
+ font-size : 0.9em ;
91
+ color : var (--btn-gen-text-muted );
92
+ }
93
+ /* Группа с элементами в строку */
94
+ .control-group .row {
95
+ display : flex;
96
+ align-items : center;
97
+ gap : 0.5rem ;
98
+ flex-wrap : wrap; /* Перенос, если не влезает */
99
+ }
100
+ .control-group .row label {
101
+ margin-bottom : 0 ;
102
+ flex-shrink : 0 ; /* Не сжимать метку */
103
+ min-width : 90px ; /* Выравнивание меток */
104
+ }
105
+ .control-group .row input [type = "range" ] {
106
+ flex-grow : 1 ; /* Ползунок занимает место */
107
+ cursor : pointer;
108
+ height : 5px ; /* Тонкий ползунок */
109
+ }
110
+ .control-group .row span { /* Для 'px', '%' и т.д. */
111
+ font-size : 0.85em ;
112
+ color : var (--btn-gen-text-muted );
113
+ }
114
+ /* Группа с чекбоксами */
115
+ .checkbox-group {
116
+ display : flex;
117
+ gap : 1rem ;
118
+ flex-wrap : wrap;
119
+ }
120
+ .checkbox-group label {
121
+ display : inline-flex;
122
+ align-items : center;
123
+ gap : 0.4em ;
124
+ margin-bottom : 0 ;
125
+ cursor : pointer;
126
+ }
127
+ .checkbox-group input [type = "checkbox" ] {
128
+ cursor : pointer;
129
+ }
130
+
131
+
132
+ /* Стили для инпутов */
133
+ .controls-panel input [type = "text" ],
134
+ .controls-panel input [type = "number" ],
135
+ .controls-panel select {
136
+ width : 100% ;
137
+ padding : 0.5em 0.7em ;
138
+ border : 1px solid var (--btn-gen-border );
139
+ background-color : var (--btn-gen-input-bg );
140
+ color : var (--btn-gen-text );
141
+ border-radius : 4px ;
142
+ font-size : 0.9em ;
143
+ box-sizing : border-box; /* Учитывать padding и border в ширине */
144
+ }
145
+ .controls-panel input : focus ,
146
+ .controls-panel select : focus {
147
+ outline : none;
148
+ border-color : var (--btn-gen-accent );
149
+ box-shadow : 0 0 0 2px rgba (135 , 206 , 250 , 0.3 );
150
+ background-color : var (--bg-color-lighter );
151
+ }
152
+
153
+ /* Маленькие числовые инпуты */
154
+ .input-number-small {
155
+ width : 5em ;
156
+ text-align : right;
157
+ flex-shrink : 0 ;
158
+ padding-right : 0.4em ;
159
+ -moz-appearance : textfield;
160
+ }
161
+ .input-number-small ::-webkit-inner-spin-button ,
162
+ .input-number-small ::-webkit-outer-spin-button {
163
+ -webkit-appearance : none; margin : 0 ;
164
+ }
165
+ .input-number-tiny { /* Еще меньше (для opacity) */
166
+ width : 4em ;
167
+ text-align : right;
168
+ flex-shrink : 0 ;
169
+ padding-right : 0.4em ;
170
+ -moz-appearance : textfield;
171
+ }
172
+ .input-number-tiny ::-webkit-inner-spin-button ,
173
+ .input-number-tiny ::-webkit-outer-spin-button {
174
+ -webkit-appearance : none; margin : 0 ;
175
+ }
176
+
177
+ /* Контролы цвета */
178
+ .control-group .color-control {
179
+ align-items : center;
180
+ }
181
+ .color-control label { min-width : auto; } /* Убираем мин. ширину для цвета */
182
+ .color-control input [type = "color" ] {
183
+ width : 32px ;
184
+ height : 32px ;
185
+ border : none;
186
+ padding : 0 ;
187
+ border-radius : 4px ;
188
+ cursor : pointer;
189
+ background-color : transparent;
190
+ overflow : hidden;
191
+ flex-shrink : 0 ;
192
+ }
193
+ .color-control input [type = "color" ]::-webkit-color-swatch-wrapper { padding : 0 ; }
194
+ .color-control input [type = "color" ]::-webkit-color-swatch { border : none; border-radius : 3px ;}
195
+ .color-control input [type = "color" ]::-moz-color-swatch { border : none; border-radius : 3px ;}
196
+
197
+ .input-hex-small { /* Для отображения HEX рядом с color picker */
198
+ font-family : var (--font-code , monospace);
199
+ font-size : 0.85em ;
200
+ width : 6em ;
201
+ padding : 0.3em 0.5em ;
202
+ text-align : center;
203
+ background-color : rgba (0 , 0 , 0 , 0.1 );
204
+ border : 1px solid transparent;
205
+ flex-shrink : 0 ;
206
+ }
207
+ .opacity-label { /* Метка для прозрачности */
208
+ margin-left : 0.5rem ;
209
+ font-size : 0.8em !important ; /* Важно перебить общие стили label */
210
+ color : var (--btn-gen-text-muted ) !important ;
211
+ margin-bottom : 0 !important ;
212
+ }
213
+
214
+
215
+ /* Скрытие/показ блоков настроек тени */
216
+ .control-group-multiple {
217
+ border-top : 1px dashed var (--btn-gen-border );
218
+ margin-top : 1rem ;
219
+ padding-top : 1rem ;
220
+ }
221
+
222
+
223
+ /* --- Панель Превью и Вывода CSS --- */
224
+ .preview-output-panel {
225
+ display : flex;
226
+ flex-direction : column;
227
+ gap : 2rem ;
228
+ /* Делаем эту панель "липкой", если панель настроек скроллится */
229
+ position : sticky;
230
+ top : 20px ; /* Отступ от верха окна */
231
+ /* Важно: чтобы sticky работал, у родителя (.button-generator-container)
232
+ не должно быть overflow: hidden/auto/scroll по той оси,
233
+ по которой элемент должен "липнуть" */
234
+ }
235
+ .preview-output-panel section { /* Стили для секций Превью и Вывода */
236
+ background-color : var (--btn-gen-bg-panel );
237
+ padding : 1.5rem ;
238
+ border-radius : 8px ;
239
+ box-shadow : 0 2px 10px rgba (0 , 0 , 0 , 0.2 );
240
+ }
241
+ .preview-output-panel h2 {
242
+ text-align : center;
243
+ margin-top : 0 ;
244
+ margin-bottom : 1.5rem ;
245
+ font-size : 1.5em ;
246
+ color : var (--btn-gen-text );
247
+ }
248
+
249
+ /* Область превью */
250
+ .preview-box {
251
+ min-height : 150px ; /* Минимальная высота */
252
+ display : flex;
253
+ justify-content : center;
254
+ align-items : center;
255
+ background-color : var (--btn-gen-bg-fieldset ); /* Фон для превью */
256
+ border-radius : 6px ;
257
+ padding : 2rem ;
258
+ border : 1px dashed var (--btn-gen-border );
259
+ overflow : hidden; /* На случай больших теней */
260
+ }
261
+
262
+ /* Кнопка превью (стили будут задаваться JS) */
263
+ # previewButton {
264
+ /* Базовые стили, которые могут быть переопределены JS */
265
+ border : 1px solid # ccc ;
266
+ background-color : # eee ;
267
+ color : # 333 ;
268
+ padding : 6px 24px ;
269
+ font-size : 15px ;
270
+ border-radius : 6px ;
271
+ cursor : default; /* Не кликабельна по умолчанию */
272
+ transition : all 0.2s ease-out; /* Плавные переходы для стилей */
273
+ }
274
+
275
+ /* Область вывода CSS */
276
+ .output-area .output-wrapper { /* Используем класс из конвертера */
277
+ display : flex;
278
+ gap : 0.5rem ;
279
+ align-items : stretch;
280
+ }
281
+ # cssOutput {
282
+ flex-grow : 1 ;
283
+ background-color : # 282c34 ; /* Темный фон для кода */
284
+ border : 1px solid var (--btn-gen-border );
285
+ padding : 0.8rem 1rem ;
286
+ border-radius : 4px ;
287
+ font-family : var (--font-code , monospace);
288
+ color : # abb2bf ; /* Цвет текста кода */
289
+ resize : vertical;
290
+ min-height : 150px ;
291
+ white-space : pre; /* Сохраняем пробелы и переносы */
292
+ line-height : 1.5 ;
293
+ }
294
+ .output-area .copy-button { /* Кнопка Копировать */
295
+ background : var (--btn-gen-accent );
296
+ border : none;
297
+ color : var (--btn-gen-bg-panel );
298
+ font-size : 0.8em ;
299
+ font-weight : bold;
300
+ cursor : pointer;
301
+ padding : 0.5em 1em ;
302
+ border-radius : 4px ;
303
+ opacity : 0.9 ;
304
+ transition : opacity 0.2s ease;
305
+ writing-mode : vertical-rl; /* Вертикальный текст (опционально) */
306
+ text-orientation : mixed;
307
+ display : flex;
308
+ align-items : center;
309
+ justify-content : center;
310
+ }
311
+ .output-area .copy-button : hover { opacity : 1 ; }
312
+
313
+
314
+ /* Адаптивность */
315
+ @media (max-width : 900px ) {
316
+ .button-generator-container {
317
+ grid-template-columns : 1fr ; /* Одна колонка */
318
+ height : auto; /* Убираем ограничение высоты */
319
+ align-items : stretch; /* Сбрасываем выравнивание */
320
+ }
321
+ .controls-panel {
322
+ order : 2 ;
323
+ max-height : none; /* Убираем ограничение высоты и скролл */
324
+ overflow-y : visible;
325
+ }
326
+ .preview-output-panel {
327
+ order : 1 ;
328
+ position : static; /* Убираем sticky */
329
+ top : auto;
330
+ }
331
+ }
332
+
333
+ @media (max-width : 500px ) {
334
+ .control-group .row {
335
+ flex-direction : column; /* Элементы в столбик */
336
+ align-items : stretch; /* Растянуть по ширине */
337
+ }
338
+ .control-group .row label {
339
+ min-width : auto; /* Убрать мин ширину метки */
340
+ margin-bottom : 0.3rem ;
341
+ }
342
+ .input-number-small , .input-number-tiny , .input-hex-small {
343
+ width : 100% ; /* Числовые поля на всю ширину */
344
+ text-align : left;
345
+ padding-left : 0.7em ;
346
+ }
347
+ .control-group .row span { /* 'px', '%' */
348
+ display : none; /* Скрыть единицы */
349
+ }
350
+ .control-group .color-control {
351
+ flex-direction : row; /* Оставить цвет и хекс в строку */
352
+ flex-wrap : wrap;
353
+ }
354
+ .opacity-label { margin-left : 0 ; margin-top : 0.5rem ;}
355
+ .checkbox-group { flex-direction : column; gap : 0.5rem ; align-items : flex-start;}
356
+
357
+ .output-area .copy-button { /* Возвращаем горизонтальный текст */
358
+ writing-mode : horizontal-tb;
359
+ padding : 0.5em 1em ;
360
+ }
361
+ }
0 commit comments