PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.2
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.2
2.0.14 2.0.13 2.0.12 2.0.11 2.0.10 2.0.9 trunk 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8
blockenberg / blocks / row / style.css

style.css in Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor 2.0.2, at blocks/row/style.css

547 lines 12.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* ========================================
2 Row Block Styles
3 Prefix: bkbg-row
4 ======================================== */
5
6 /* CSS Custom Properties */
7 .bkbg-row {
8 --bkbg-row-gap-none: 0;
9 --bkbg-row-gap-xs: 8px;
10 --bkbg-row-gap-s: 16px;
11 --bkbg-row-gap-m: 24px;
12 --bkbg-row-gap-l: 32px;
13 --bkbg-row-gap-xl: 48px;
14 position: relative;
15 width: 100%;
16 box-sizing: border-box;
17 }
18
19 /* Row Inner - Flexbox layout */
20 .bkbg-row__inner {
21 display: flex;
22 flex-wrap: nowrap;
23 width: 100%;
24 box-sizing: border-box;
25 overflow: visible;
26 }
27
28 /* Gap Variants */
29 .bkbg-row--gap-none .bkbg-row__inner {
30 gap: var(--bkbg-row-gap-none);
31 }
32
33 .bkbg-row--gap-xs .bkbg-row__inner {
34 gap: var(--bkbg-row-gap-xs);
35 }
36
37 .bkbg-row--gap-s .bkbg-row__inner {
38 gap: var(--bkbg-row-gap-s);
39 }
40
41 .bkbg-row--gap-m .bkbg-row__inner {
42 gap: var(--bkbg-row-gap-m);
43 }
44
45 .bkbg-row--gap-l .bkbg-row__inner {
46 gap: var(--bkbg-row-gap-l);
47 }
48
49 .bkbg-row--gap-xl .bkbg-row__inner {
50 gap: var(--bkbg-row-gap-xl);
51 }
52
53 /* Vertical Alignment */
54 .bkbg-row--valign-top .bkbg-row__inner {
55 align-items: flex-start;
56 }
57
58 .bkbg-row--valign-middle .bkbg-row__inner {
59 align-items: center;
60 }
61
62 .bkbg-row--valign-bottom .bkbg-row__inner {
63 align-items: flex-end;
64 }
65
66 /* Stack on Mobile */
67 @media (max-width: 767px) {
68 .bkbg-row--stack-mobile .bkbg-row__inner {
69 flex-direction: column;
70 }
71
72 .bkbg-row--stack-mobile .bkbg-column {
73 flex-basis: 100% !important;
74 max-width: 100% !important;
75 width: 100% !important;
76 }
77 }
78
79 /* ========================================
80 Editor-specific Styles
81 ======================================== */
82
83 /* Editor Row Container */
84 .editor-styles-wrapper .bkbg-row {
85 min-height: 50px;
86 border: 1px dashed transparent;
87 border-radius: 4px;
88 transition: border-color 0.15s ease;
89 }
90
91 .editor-styles-wrapper .bkbg-row:hover {
92 border-color: rgba(59, 130, 246, 0.3);
93 }
94
95 .editor-styles-wrapper .bkbg-row.is-selected,
96 .editor-styles-wrapper .bkbg-row:focus-within {
97 border-color: rgba(59, 130, 246, 0.5);
98 }
99
100 /* Drag and drop state */
101 .editor-styles-wrapper .bkbg-row.is-dragging-over,
102 .editor-styles-wrapper [data-type="blockenberg/row"].is-dragging-over > .bkbg-row {
103 border-color: rgba(59, 130, 246, 0.6) !important;
104 background-color: rgba(59, 130, 246, 0.03) !important;
105 }
106
107 /* Row label */
108 .editor-styles-wrapper .bkbg-row::before {
109 content: 'Row';
110 position: absolute;
111 top: -18px;
112 left: 0;
113 font-size: 10px;
114 font-weight: 600;
115 color: #3b82f6;
116 text-transform: uppercase;
117 letter-spacing: 0.5px;
118 opacity: 0;
119 transition: opacity 0.15s ease;
120 pointer-events: none;
121 z-index: 1;
122 }
123
124 .editor-styles-wrapper .bkbg-row:hover::before,
125 .editor-styles-wrapper .bkbg-row.is-selected::before {
126 opacity: 1;
127 }
128
129 /* Responsive mode badge */
130 .bkbg-row__mode-badge {
131 position: absolute;
132 top: -18px;
133 right: 0;
134 font-size: 9px;
135 font-weight: 600;
136 color: #fff;
137 background: #3b82f6;
138 padding: 2px 6px;
139 border-radius: 3px;
140 text-transform: uppercase;
141 letter-spacing: 0.5px;
142 opacity: 0;
143 transition: opacity 0.15s ease;
144 pointer-events: none;
145 z-index: 1;
146 }
147
148 .editor-styles-wrapper .bkbg-row:hover .bkbg-row__mode-badge,
149 .editor-styles-wrapper .bkbg-row.is-selected .bkbg-row__mode-badge {
150 opacity: 1;
151 }
152
153 /* Inner blocks layout in editor - direct children only */
154 .editor-styles-wrapper .bkbg-row > .bkbg-row__inner {
155 position: relative;
156 }
157
158 .editor-styles-wrapper .bkbg-row > .bkbg-row__inner > .block-editor-inner-blocks {
159 width: 100%;
160 }
161
162 .editor-styles-wrapper .bkbg-row > .bkbg-row__inner > .block-editor-inner-blocks > .block-editor-block-list__layout {
163 display: flex;
164 flex-wrap: nowrap;
165 width: 100%;
166 }
167
168 /* ========================================
169 Resize Handles
170 ======================================== */
171
172 /* Handles overlay container */
173 .bkbg-row__handles-overlay {
174 position: absolute;
175 top: 0;
176 left: 0;
177 right: 0;
178 bottom: 0;
179 pointer-events: none;
180 z-index: 100;
181 }
182
183 /* Handle wrapper positioned at column edge */
184 .bkbg-row__handle-wrapper {
185 position: absolute;
186 top: 0;
187 bottom: 0;
188 width: 0;
189 transform: translateX(-50%);
190 pointer-events: auto;
191 }
192
193 /* Resize handle */
194 .bkbg-row__resize-handle {
195 position: absolute;
196 top: 0;
197 bottom: 0;
198 left: -8px;
199 width: 16px;
200 cursor: col-resize;
201 z-index: 101;
202 opacity: 0;
203 transition: opacity 0.15s ease;
204 }
205
206 .bkbg-row:hover .bkbg-row__resize-handle,
207 .bkbg-row.is-selected .bkbg-row__resize-handle {
208 opacity: 1;
209 }
210
211 /* Handle visual line */
212 .bkbg-row__resize-handle-line {
213 position: absolute;
214 top: 0;
215 bottom: 0;
216 left: 50%;
217 width: 3px;
218 transform: translateX(-50%);
219 background: #3b82f6;
220 border-radius: 2px;
221 opacity: 0.5;
222 transition: opacity 0.15s ease, width 0.15s ease, background-color 0.15s ease;
223 }
224
225 .bkbg-row__resize-handle:hover .bkbg-row__resize-handle-line {
226 opacity: 1;
227 width: 5px;
228 background: #2563eb;
229 }
230
231 /* Resize percentage indicator - only show during drag */
232 .bkbg-row__resize-indicator {
233 position: absolute;
234 top: 50%;
235 left: 50%;
236 transform: translate(-50%, -50%);
237 display: flex;
238 align-items: center;
239 gap: 8px;
240 opacity: 0;
241 pointer-events: none;
242 transition: opacity 0.1s ease;
243 z-index: 102;
244 }
245
246 /* Show indicator only when row is resizing */
247 .bkbg-row--is-resizing .bkbg-row__resize-indicator {
248 opacity: 1;
249 }
250
251 .bkbg-row__resize-pct {
252 font-size: 11px;
253 font-weight: 600;
254 color: #fff;
255 background: #1e293b;
256 padding: 3px 6px;
257 border-radius: 3px;
258 white-space: nowrap;
259 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
260 }
261
262 .bkbg-row__resize-pct--left {
263 transform: translateX(-100%);
264 margin-left: -8px;
265 }
266
267 .bkbg-row__resize-pct--right {
268 transform: translateX(0);
269 margin-left: 8px;
270 }
271
272 /* Row is resizing state */
273 .bkbg-row--is-resizing {
274 user-select: none;
275 cursor: col-resize !important;
276 }
277
278 .bkbg-row--is-resizing * {
279 cursor: col-resize !important;
280 }
281
282 .bkbg-row--is-resizing .bkbg-row__resize-handle {
283 opacity: 1;
284 }
285
286 .bkbg-row--is-resizing .bkbg-row__resize-handle-line {
287 opacity: 1;
288 width: 5px;
289 background: #2563eb;
290 }
291
292 /* ========================================
293 Responsive Mode Preview in Editor
294 ======================================== */
295
296 /* Tablet mode preview */
297 .editor-styles-wrapper .bkbg-row--mode-tablet .bkbg-column {
298 flex-basis: var(--bkbg-col-tablet, var(--bkbg-col-desktop, 50%)) !important;
299 max-width: var(--bkbg-col-tablet, var(--bkbg-col-desktop, 50%)) !important;
300 }
301
302 /* Mobile mode preview */
303 .editor-styles-wrapper .bkbg-row--mode-mobile.bkbg-row--stack-mobile .bkbg-column {
304 flex-basis: 100% !important;
305 max-width: 100% !important;
306 }
307
308 .editor-styles-wrapper .bkbg-row--mode-mobile:not(.bkbg-row--stack-mobile) .bkbg-column {
309 flex-basis: var(--bkbg-col-mobile, 100%) !important;
310 max-width: var(--bkbg-col-mobile, 100%) !important;
311 }
312
313 /* ========================================
314 Preset Buttons
315 ======================================== */
316
317 .bkbg-row-presets {
318 display: flex;
319 flex-direction: column;
320 gap: 8px;
321 }
322
323 .bkbg-row-preset-btn {
324 width: 100%;
325 justify-content: flex-start !important;
326 text-align: left !important;
327 }
328
329 /* ========================================
330 Block List Layout Adjustments
331 ======================================== */
332
333 .editor-styles-wrapper .bkbg-row .block-editor-block-list__layout {
334 display: flex !important;
335 flex-wrap: nowrap !important;
336 width: 100% !important;
337 overflow: visible;
338 }
339
340 .editor-styles-wrapper .bkbg-row .block-editor-block-list__layout > .wp-block {
341 margin: 0 !important;
342 }
343
344 /* Ensure columns respect their widths in editor */
345 .editor-styles-wrapper .bkbg-row .block-editor-block-list__layout > .wp-block[data-type="blockenberg/column"] {
346 flex-shrink: 0;
347 flex-grow: 0;
348 }
349
350 /* ========================================
351 Layout Selector (Initial Setup)
352 ======================================== */
353
354 .bkbg-row-layout-selector {
355 min-height: 120px;
356 }
357
358 .bkbg-row-layout-selector .components-placeholder__instructions {
359 margin-bottom: 16px;
360 }
361
362 .bkbg-row-layout-options {
363 display: grid;
364 grid-template-columns: repeat(3, 1fr);
365 gap: 8px;
366 width: 100%;
367 max-width: 500px;
368 margin-bottom: 12px;
369 }
370
371 .bkbg-row-layout-option {
372 display: flex !important;
373 flex-direction: column !important;
374 align-items: center !important;
375 justify-content: center !important;
376 padding: 12px 8px !important;
377 min-height: 70px;
378 border: 1px solid #e2e8f0 !important;
379 border-radius: 4px !important;
380 background: #fff !important;
381 transition: all 0.15s ease !important;
382 }
383
384 .bkbg-row-layout-option:hover {
385 border-color: #3b82f6 !important;
386 background: #f8fafc !important;
387 transform: translateY(-1px);
388 }
389
390 .bkbg-row-layout-icon {
391 font-size: 18px;
392 letter-spacing: 2px;
393 margin-bottom: 4px;
394 opacity: 0.8;
395 }
396
397 .bkbg-row-layout-label {
398 font-size: 11px;
399 color: #64748b;
400 text-align: center;
401 }
402
403 .bkbg-row-skip-layout {
404 font-size: 12px !important;
405 color: #64748b !important;
406 }
407
408 .bkbg-row-skip-layout:hover {
409 color: #3b82f6 !important;
410 }
411
412 @media (max-width: 600px) {
413 .bkbg-row-layout-options {
414 grid-template-columns: repeat(2, 1fr);
415 }
416 }
417
418 /* ========================================
419 Row Actions (Right Side Panel)
420 ======================================== */
421
422 .bkbg-row__row-gear {
423 position: absolute;
424 top: 0;
425 bottom: 0;
426 left: -1px;
427 transform: translateX(-100%);
428 width: 26px;
429 display: flex;
430 flex-direction: column;
431 align-items: center;
432 justify-content: center;
433 padding: 3px 2px;
434 background: rgba(59, 130, 246, 0.04);
435 border-right: 1px dashed rgba(59, 130, 246, 0.35);
436 border-radius: 0;
437 opacity: 0;
438 visibility: hidden;
439 pointer-events: none;
440 transition: opacity 0.15s ease, visibility 0.15s ease;
441 z-index: 200;
442 }
443
444 .editor-styles-wrapper .bkbg-row:hover .bkbg-row__row-gear,
445 .editor-styles-wrapper .bkbg-row.is-selected .bkbg-row__row-gear,
446 .bkbg-row__row-gear:hover {
447 opacity: 1;
448 visibility: visible;
449 pointer-events: auto;
450 }
451
452 .bkbg-row__row-actions {
453 position: absolute;
454 top: 0;
455 bottom: 0;
456 right: -1px;
457 transform: translateX(100%);
458 width: 26px;
459 display: flex;
460 flex-direction: column;
461 align-items: center;
462 justify-content: space-between;
463 padding: 3px 2px;
464 background: rgba(59, 130, 246, 0.04);
465 border-left: 1px dashed rgba(59, 130, 246, 0.35);
466 border-radius: 0;
467 opacity: 0;
468 visibility: hidden;
469 pointer-events: none;
470 transition: opacity 0.15s ease, visibility 0.15s ease;
471 z-index: 200;
472 }
473
474 .editor-styles-wrapper .bkbg-row:hover .bkbg-row__row-actions,
475 .editor-styles-wrapper .bkbg-row.is-selected .bkbg-row__row-actions,
476 .bkbg-row__row-actions:hover {
477 opacity: 1;
478 visibility: visible;
479 pointer-events: auto;
480 }
481
482 /* Row action button */
483 .bkbg-row__row-action-btn {
484 display: flex !important;
485 align-items: center !important;
486 justify-content: center !important;
487 width: 22px !important;
488 height: 22px !important;
489 min-width: 22px !important;
490 padding: 0 !important;
491 background: transparent !important;
492 border: none !important;
493 border-radius: 4px !important;
494 color: rgba(59, 130, 246, 0.85) !important;
495 cursor: pointer !important;
496 transition: all 0.1s ease !important;
497 opacity: 0.75;
498 }
499
500 .bkbg-row__row-action-btn:hover:not(:disabled) {
501 background: rgba(59, 130, 246, 0.10) !important;
502 color: #2563eb !important;
503 opacity: 1;
504 }
505
506 .bkbg-row__row-action-btn:disabled {
507 opacity: 0.2 !important;
508 cursor: not-allowed !important;
509 }
510
511 .bkbg-row__row-action-btn svg {
512 width: 16px !important;
513 height: 16px !important;
514 fill: currentColor !important;
515 }
516
517 /* Make dashicon plus look thinner/smaller */
518 .bkbg-row__row-action-btn .dashicon,
519 .bkbg-row__row-action-btn .dashicons {
520 font-size: 14px;
521 width: 14px;
522 height: 14px;
523 }
524
525 /* Add column button - center, highlighted */
526 .bkbg-row__row-action-btn--add-col {
527 background: rgba(59, 130, 246, 0.12) !important;
528 border: 1px dashed rgba(59, 130, 246, 0.55) !important;
529 color: #2563eb !important;
530 border-radius: 999px !important;
531 opacity: 1;
532 }
533
534 .bkbg-row__row-action-btn--add-col:hover:not(:disabled) {
535 background: rgba(59, 130, 246, 0.18) !important;
536 border-color: #3b82f6 !important;
537 transform: scale(1.1);
538 }
539
540 /* Hide row actions during resize */
541 .bkbg-row--is-resizing .bkbg-row__row-actions {
542 display: none !important;
543 }
544
545 .bkbg-row--is-resizing .bkbg-row__row-gear {
546 display: none !important;
547 }