PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.6
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.6
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 / timeline / style.css

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

699 lines 16.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Timeline Block Styles
3 * Blockenberg
4 */
5
6 /* ========================================
7 CSS Variables & Base
8 ======================================== */
9
10 .bkbg-tl-wrap {
11 --bkbg-tl-line-color: #e5e7eb;
12 --bkbg-tl-line-width: 3px;
13 --bkbg-tl-marker-bg: #3b82f6;
14 --bkbg-tl-marker-color: #ffffff;
15 --bkbg-tl-marker-size: 44px;
16 --bkbg-tl-card-bg: #ffffff;
17 --bkbg-tl-card-border: #e5e7eb;
18 --bkbg-tl-card-border-w: 1px;
19 --bkbg-tl-card-radius: 12px;
20 --bkbg-tl-card-padding: 24px;
21 --bkbg-tl-date-color: #3b82f6;
22 --bkbg-tl-date-size: 14px;
23 --bkbg-tl-date-weight: 600;
24 --bkbg-tl-title-color: #1f2937;
25 --bkbg-tl-title-size: 20px;
26 --bkbg-tl-title-weight: 600;
27 --bkbg-tl-content-color: #6b7280;
28 --bkbg-tl-content-size: 15px;
29 --bkbg-tl-spacing: 40px;
30
31 position: relative;
32 width: 100%;
33 }
34
35 /* ========================================
36 Vertical Layout
37 ======================================== */
38
39 .bkbg-tl-vertical .bkbg-tl-items {
40 position: relative;
41 display: flex;
42 flex-direction: column;
43 gap: var(--bkbg-tl-spacing);
44 }
45
46 /* Connector line - vertical */
47 .bkbg-tl-vertical.bkbg-tl-has-connector .bkbg-tl-items::before {
48 content: '';
49 position: absolute;
50 left: calc(var(--bkbg-tl-marker-size) / 2 - var(--bkbg-tl-line-width) / 2);
51 top: 0;
52 bottom: 0;
53 width: var(--bkbg-tl-line-width);
54 background-color: var(--bkbg-tl-line-color);
55 }
56
57 .bkbg-tl-vertical.bkbg-tl-connector-dashed .bkbg-tl-items::before {
58 background: repeating-linear-gradient(
59 to bottom,
60 var(--bkbg-tl-line-color) 0,
61 var(--bkbg-tl-line-color) 8px,
62 transparent 8px,
63 transparent 16px
64 );
65 }
66
67 .bkbg-tl-vertical.bkbg-tl-connector-dotted .bkbg-tl-items::before {
68 background: repeating-linear-gradient(
69 to bottom,
70 var(--bkbg-tl-line-color) 0,
71 var(--bkbg-tl-line-color) 4px,
72 transparent 4px,
73 transparent 10px
74 );
75 }
76
77 /* Item - vertical default (left aligned) */
78 .bkbg-tl-vertical .bkbg-tl-item {
79 position: relative;
80 display: flex;
81 align-items: flex-start;
82 gap: 20px;
83 padding-left: 0;
84 }
85
86 /* Marker */
87 .bkbg-tl-marker {
88 flex-shrink: 0;
89 width: var(--bkbg-tl-marker-size);
90 height: var(--bkbg-tl-marker-size);
91 border-radius: 50%;
92 background-color: var(--bkbg-tl-marker-bg);
93 color: var(--bkbg-tl-marker-color);
94 display: flex;
95 align-items: center;
96 justify-content: center;
97 position: relative;
98 z-index: 2;
99 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
100 }
101
102 .bkbg-tl-marker-icon {
103 width: 50%;
104 height: 50%;
105 }
106
107 /* Dashicon in marker */
108 .bkbg-tl-marker-dashicon {
109 font-size: calc(var(--bkbg-tl-marker-size) * 0.5);
110 width: auto;
111 height: auto;
112 line-height: 1;
113 }
114
115 /* Custom image in marker */
116 .bkbg-tl-marker-img {
117 width: 60%;
118 height: 60%;
119 object-fit: contain;
120 border-radius: 50%;
121 }
122
123 .bkbg-tl-marker-number {
124 font-size: calc(var(--bkbg-tl-marker-size) * 0.4);
125 font-weight: 700;
126 }
127
128 .bkbg-tl-marker-dot {
129 width: 40%;
130 height: 40%;
131 background-color: var(--bkbg-tl-marker-color);
132 border-radius: 50%;
133 }
134
135 /* Card */
136 .bkbg-tl-card {
137 flex: 1;
138 background-color: var(--bkbg-tl-card-bg);
139 border: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
140 border-radius: var(--bkbg-tl-card-radius);
141 padding: var(--bkbg-tl-card-padding);
142 position: relative;
143 }
144
145 .bkbg-tl-card.has-shadow {
146 box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
147 }
148
149 /* Card arrow - vertical */
150 .bkbg-tl-vertical .bkbg-tl-card::before {
151 content: '';
152 position: absolute;
153 left: -8px;
154 top: calc(var(--bkbg-tl-marker-size) / 2 - 8px);
155 width: 16px;
156 height: 16px;
157 background-color: var(--bkbg-tl-card-bg);
158 border-left: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
159 border-bottom: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
160 transform: rotate(45deg);
161 }
162
163 .bkbg-tl-card.has-shadow::before {
164 box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.04);
165 }
166
167 /* Date */
168 .bkbg-tl-date {
169 color: var(--bkbg-tl-date-color);
170 font-size: var(--bkbg-tl-date-size);
171 font-weight: var(--bkbg-tl-date-weight);
172 margin-bottom: 8px;
173 text-transform: uppercase;
174 letter-spacing: 0.5px;
175 }
176
177 /* Title */
178 .bkbg-tl-title {
179 color: var(--bkbg-tl-title-color);
180 font-size: var(--bkbg-tl-title-size);
181 font-weight: var(--bkbg-tl-title-weight);
182 margin: 0 0 12px 0;
183 line-height: 1.3;
184 }
185
186 /* Content */
187 .bkbg-tl-content {
188 color: var(--bkbg-tl-content-color);
189 font-size: var(--bkbg-tl-content-size);
190 margin: 0;
191 line-height: 1.6;
192 }
193
194 /* ========================================
195 Alternating Layout (Vertical)
196 ======================================== */
197
198 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-items {
199 padding-left: calc(var(--bkbg-tl-marker-size) / 2);
200 padding-right: calc(var(--bkbg-tl-marker-size) / 2);
201 }
202
203 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-items::before {
204 left: 50%;
205 transform: translateX(-50%);
206 }
207
208 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item {
209 width: calc(50% - var(--bkbg-tl-marker-size) / 2);
210 }
211
212 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-left {
213 padding-right: 20px;
214 margin-left: 0;
215 margin-right: auto;
216 flex-direction: row-reverse;
217 text-align: right;
218 }
219
220 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-right {
221 padding-left: 20px;
222 margin-left: auto;
223 margin-right: 0;
224 }
225
226 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-marker {
227 position: absolute;
228 right: calc(-1 * var(--bkbg-tl-marker-size) - 20px);
229 top: 0;
230 }
231
232 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-right .bkbg-tl-marker {
233 position: absolute;
234 left: calc(-1 * var(--bkbg-tl-marker-size) - 20px);
235 top: 0;
236 }
237
238 /* Card arrows for alternating */
239 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-card::before {
240 left: auto;
241 right: -8px;
242 border-left: none;
243 border-bottom: none;
244 border-right: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
245 border-top: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
246 }
247
248 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-card.has-shadow::before {
249 box-shadow: 2px -2px 4px rgba(0, 0, 0, 0.04);
250 }
251
252 /* ========================================
253 Horizontal Layout
254 ======================================== */
255
256 .bkbg-tl-horizontal .bkbg-tl-items {
257 display: flex;
258 flex-direction: row;
259 gap: 0;
260 overflow-x: auto;
261 padding: 20px 0 40px;
262 position: relative;
263 }
264
265 .bkbg-tl-horizontal .bkbg-tl-item {
266 flex: 0 0 280px;
267 display: flex;
268 flex-direction: column;
269 align-items: center;
270 position: relative;
271 padding: 0 calc(var(--bkbg-tl-spacing) / 2);
272 }
273
274 /* Connector line - horizontal: line after each item except last */
275 .bkbg-tl-horizontal.bkbg-tl-has-connector .bkbg-tl-item:not(:last-child)::after {
276 content: '';
277 position: absolute;
278 top: calc(var(--bkbg-tl-marker-size) / 2 - var(--bkbg-tl-line-width) / 2);
279 left: calc(50% + var(--bkbg-tl-marker-size) / 2);
280 width: calc(100% - var(--bkbg-tl-marker-size));
281 height: var(--bkbg-tl-line-width);
282 background-color: var(--bkbg-tl-line-color);
283 }
284
285 .bkbg-tl-horizontal.bkbg-tl-connector-dashed .bkbg-tl-item:not(:last-child)::after {
286 background: repeating-linear-gradient(
287 to right,
288 var(--bkbg-tl-line-color) 0,
289 var(--bkbg-tl-line-color) 8px,
290 transparent 8px,
291 transparent 16px
292 );
293 }
294
295 .bkbg-tl-horizontal.bkbg-tl-connector-dotted .bkbg-tl-item:not(:last-child)::after {
296 background: repeating-linear-gradient(
297 to right,
298 var(--bkbg-tl-line-color) 0,
299 var(--bkbg-tl-line-color) 4px,
300 transparent 4px,
301 transparent 10px
302 );
303 }
304
305 .bkbg-tl-horizontal .bkbg-tl-card {
306 margin-top: 20px;
307 text-align: center;
308 }
309
310 .bkbg-tl-horizontal .bkbg-tl-card::before {
311 display: none;
312 }
313
314 /* ========================================
315 Animations
316 ======================================== */
317
318 .bkbg-tl-wrap[data-animate="1"] .bkbg-tl-item {
319 opacity: 0;
320 transition: opacity 0.6s ease, transform 0.6s ease;
321 }
322
323 .bkbg-tl-wrap[data-animate="1"][data-animation="fade-up"] .bkbg-tl-item {
324 transform: translateY(30px);
325 }
326
327 .bkbg-tl-wrap[data-animate="1"][data-animation="fade-in"] .bkbg-tl-item {
328 transform: none;
329 }
330
331 .bkbg-tl-wrap[data-animate="1"][data-animation="slide-in"] .bkbg-tl-item-left {
332 transform: translateX(-30px);
333 }
334
335 .bkbg-tl-wrap[data-animate="1"][data-animation="slide-in"] .bkbg-tl-item-right {
336 transform: translateX(30px);
337 }
338
339 .bkbg-tl-wrap[data-animate="1"][data-animation="scale-up"] .bkbg-tl-item {
340 transform: scale(0.9);
341 }
342
343 .bkbg-tl-wrap[data-animate="1"] .bkbg-tl-item.is-visible {
344 opacity: 1;
345 transform: translateY(0) translateX(0) scale(1);
346 }
347
348 /* ========================================
349 Editor Styles
350 ======================================== */
351
352 /* Marker clickable in editor */
353 .bkbg-tl-marker-clickable {
354 cursor: pointer;
355 transition: transform 0.15s, box-shadow 0.15s;
356 }
357
358 .bkbg-tl-marker-clickable:hover {
359 transform: scale(1.1);
360 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
361 }
362
363 /* ========================================
364 Icon Picker Modal
365 ======================================== */
366
367 .bkbg-tl-icon-popover {
368 z-index: 1000001 !important;
369 }
370
371 .bkbg-tl-icon-picker-modal {
372 width: 380px;
373 max-width: 90vw;
374 background: #fff;
375 border-radius: 8px;
376 overflow: hidden;
377 }
378
379 .bkbg-tl-icon-picker-header {
380 display: flex;
381 align-items: center;
382 justify-content: space-between;
383 padding: 12px 16px;
384 border-bottom: 1px solid #e5e7eb;
385 background: #f9fafb;
386 }
387
388 .bkbg-tl-icon-picker-header h3 {
389 margin: 0;
390 font-size: 14px;
391 font-weight: 600;
392 color: #1f2937;
393 }
394
395 .bkbg-tl-icon-picker-close {
396 min-width: 24px !important;
397 height: 24px !important;
398 padding: 0 !important;
399 }
400
401 /* Tab Panel */
402 .bkbg-tl-icon-tabs {
403 padding: 0;
404 }
405
406 .bkbg-tl-icon-tabs .components-tab-panel__tabs {
407 border-bottom: 1px solid #e5e7eb;
408 padding: 0 16px;
409 justify-content: flex-start;
410 gap: 0;
411 }
412
413 .bkbg-tl-icon-tabs .components-tab-panel__tabs-item {
414 padding: 10px 16px;
415 border: none;
416 background: none;
417 color: #6b7280;
418 font-weight: 500;
419 font-size: 13px;
420 border-bottom: 2px solid transparent;
421 margin-bottom: -1px;
422 transition: all 0.15s;
423 }
424
425 .bkbg-tl-icon-tabs .components-tab-panel__tabs-item:hover {
426 color: #1f2937;
427 }
428
429 .bkbg-tl-icon-tabs .components-tab-panel__tabs-item.is-active {
430 color: var(--wp-admin-theme-color, #007cba);
431 border-bottom-color: var(--wp-admin-theme-color, #007cba);
432 }
433
434 /* Dashicons Panel */
435 .bkbg-tl-dashicons-panel {
436 padding: 12px;
437 }
438
439 .bkbg-tl-icon-search {
440 margin-bottom: 12px;
441 }
442
443 .bkbg-tl-icon-search input {
444 width: 100%;
445 padding: 8px 12px;
446 border: 1px solid #d1d5db;
447 border-radius: 6px;
448 font-size: 13px;
449 }
450
451 .bkbg-tl-icon-search input:focus {
452 border-color: var(--wp-admin-theme-color, #007cba);
453 box-shadow: 0 0 0 1px var(--wp-admin-theme-color, #007cba);
454 outline: none;
455 }
456
457 .bkbg-tl-dashicons-grid {
458 display: grid;
459 grid-template-columns: repeat(8, 1fr);
460 gap: 4px;
461 max-height: 280px;
462 overflow-y: auto;
463 padding: 4px;
464 }
465
466 .bkbg-tl-dashicon-btn {
467 width: 36px;
468 height: 36px;
469 padding: 0;
470 display: flex;
471 align-items: center;
472 justify-content: center;
473 border: 2px solid transparent;
474 border-radius: 6px;
475 background: #f3f4f6;
476 cursor: pointer;
477 transition: all 0.15s;
478 }
479
480 .bkbg-tl-dashicon-btn:hover {
481 background: #e5e7eb;
482 transform: scale(1.1);
483 }
484
485 .bkbg-tl-dashicon-btn.is-active {
486 border-color: var(--wp-admin-theme-color, #007cba);
487 background: #eff6ff;
488 }
489
490 .bkbg-tl-dashicon-btn .dashicons {
491 font-size: 20px;
492 width: 20px;
493 height: 20px;
494 color: #374151;
495 }
496
497 .bkbg-tl-no-icons {
498 grid-column: 1 / -1;
499 text-align: center;
500 color: #6b7280;
501 padding: 24px;
502 font-size: 13px;
503 }
504
505 /* Media Panel */
506 .bkbg-tl-media-panel {
507 padding: 20px 16px;
508 text-align: center;
509 }
510
511 .bkbg-tl-current-media {
512 display: flex;
513 flex-direction: column;
514 align-items: center;
515 gap: 12px;
516 margin-bottom: 20px;
517 padding: 16px;
518 background: #f9fafb;
519 border-radius: 8px;
520 }
521
522 .bkbg-tl-current-media img {
523 max-width: 80px;
524 max-height: 80px;
525 border-radius: 50%;
526 object-fit: cover;
527 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
528 }
529
530 .bkbg-tl-media-btn {
531 display: inline-flex !important;
532 align-items: center;
533 gap: 8px;
534 padding: 10px 20px !important;
535 }
536
537 .bkbg-tl-media-btn .dashicons {
538 font-size: 18px;
539 width: 18px;
540 height: 18px;
541 }
542
543 .bkbg-tl-media-hint {
544 margin-top: 12px;
545 font-size: 12px;
546 color: #6b7280;
547 }
548
549 /* Old icon picker - deprecated, keep for compatibility */
550 .bkbg-tl-icon-picker {
551 display: grid;
552 grid-template-columns: repeat(5, 1fr);
553 gap: 4px;
554 padding: 8px;
555 min-width: 200px;
556 }
557
558 .bkbg-tl-icon-picker-btn {
559 width: 36px;
560 height: 36px;
561 padding: 0;
562 display: flex;
563 align-items: center;
564 justify-content: center;
565 border: 2px solid transparent;
566 border-radius: 6px;
567 background: #f3f4f6;
568 cursor: pointer;
569 transition: all 0.15s;
570 }
571
572 .bkbg-tl-icon-picker-btn:hover {
573 background: #e5e7eb;
574 }
575
576 .bkbg-tl-icon-picker-btn.is-active {
577 border-color: var(--wp-admin-theme-color, #007cba);
578 background: #eff6ff;
579 }
580
581 .bkbg-tl-icon-picker-btn svg {
582 width: 20px;
583 height: 20px;
584 fill: #374151;
585 }
586
587 /* Item hover in editor */
588 .bkbg-tl-item {
589 position: relative;
590 }
591
592 .bkbg-tl-item-actions {
593 position: absolute;
594 top: 0;
595 right: -44px;
596 display: flex;
597 flex-direction: column;
598 gap: 2px;
599 opacity: 0;
600 visibility: hidden;
601 transition: opacity 0.15s, visibility 0.15s;
602 background: #fff;
603 border-radius: 6px;
604 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
605 padding: 4px;
606 z-index: 10;
607 }
608
609 .bkbg-tl-item:hover .bkbg-tl-item-actions,
610 .bkbg-tl-item-hovered .bkbg-tl-item-actions {
611 opacity: 1;
612 visibility: visible;
613 }
614
615 .bkbg-tl-item-actions .components-button {
616 min-width: 28px;
617 height: 28px;
618 padding: 0;
619 justify-content: center;
620 }
621
622 .bkbg-tl-item-actions .components-button:hover {
623 background: #f3f4f6;
624 }
625
626 .bkbg-tl-item-actions .components-button.is-destructive:hover {
627 background: #fef2f2;
628 color: #dc2626;
629 }
630
631 /* Add button UI is standardized via assets/css/editor.css (.bkbg-editor-actions) */
632
633 /* Alternating in editor - adjust actions position */
634 .bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-item-actions {
635 right: auto;
636 left: -44px;
637 }
638
639 /* Horizontal layout - actions below card, horizontal buttons */
640 .bkbg-tl-horizontal .bkbg-tl-item-actions {
641 position: absolute;
642 top: auto;
643 bottom: -40px;
644 right: auto;
645 left: 50%;
646 transform: translateX(-50%);
647 flex-direction: row;
648 }
649
650 /* ========================================
651 Responsive
652 ======================================== */
653
654 @media (max-width: 768px) {
655 /* Disable alternating on mobile */
656 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-items::before {
657 left: calc(var(--bkbg-tl-marker-size) / 2 - var(--bkbg-tl-line-width) / 2);
658 transform: none;
659 }
660
661 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item {
662 width: 100%;
663 padding-left: 0;
664 padding-right: 0;
665 margin-left: 0;
666 flex-direction: row;
667 text-align: left;
668 }
669
670 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-marker,
671 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-right .bkbg-tl-marker {
672 position: relative;
673 left: auto;
674 right: auto;
675 }
676
677 .bkbg-tl-vertical.bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-card::before {
678 left: -8px;
679 right: auto;
680 border-right: none;
681 border-top: none;
682 border-left: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
683 border-bottom: var(--bkbg-tl-card-border-w) solid var(--bkbg-tl-card-border);
684 }
685
686 .bkbg-tl-horizontal .bkbg-tl-item {
687 flex: 0 0 240px;
688 }
689
690 .bkbg-tl-item-actions {
691 right: -36px;
692 }
693
694 .bkbg-tl-alternating .bkbg-tl-item-left .bkbg-tl-item-actions {
695 left: auto;
696 right: -36px;
697 }
698 }
699