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

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

494 lines 11.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Testimonials Block Styles
3 * Blockenberg
4 */
5
6 .bkbg-ts-wrap {
7 --bkbg-ts-columns: 3;
8 --bkbg-ts-gap: 24px;
9
10 --bkbg-ts-card-bg: #ffffff;
11 --bkbg-ts-card-border-color: #e5e7eb;
12 --bkbg-ts-card-border-width: 1px;
13 --bkbg-ts-card-radius: 16px;
14 --bkbg-ts-card-padding: 24px;
15
16 --bkbg-ts-text-align: left;
17
18 --bkbg-ts-quote-icon-color: #3b82f6;
19 --bkbg-ts-quote-icon-size: 22px;
20
21 --bkbg-ts-quote-color: #111827;
22
23 --bkbg-ts-name-color: #111827;
24
25 --bkbg-ts-role-color: #6b7280;
26
27 --bkbg-ts-company-color: #6b7280;
28
29 --bkbg-ts-rating-color: #f59e0b;
30 --bkbg-ts-rating-size: 16px;
31
32 --bkbg-ts-featured-border-color: #3b82f6;
33
34 --bkbg-ts-avatar-size: 44px;
35 --bkbg-ts-avatar-radius: 999px;
36
37 width: 100%;
38 }
39
40 /* Keep wrapper clean on frontend (some themes add wrapper borders) */
41 .wp-block-blockenberg-testimonials,
42 .wp-block-blockenberg-testimonials .bkbg-ts-wrap {
43 border: 0;
44 outline: 0;
45 }
46
47 .bkbg-ts-grid {
48 display: grid;
49 grid-template-columns: repeat(var(--bkbg-ts-columns), minmax(0, 1fr));
50 gap: var(--bkbg-ts-gap);
51 }
52
53 @media (max-width: 900px) {
54 .bkbg-ts-grid {
55 grid-template-columns: repeat(2, minmax(0, 1fr));
56 }
57 }
58
59 @media (max-width: 560px) {
60 .bkbg-ts-grid {
61 grid-template-columns: repeat(1, minmax(0, 1fr));
62 }
63 }
64
65 /* Carousel layout (scroll-snap) */
66 .bkbg-ts-carousel {
67 position: relative;
68 }
69
70 .bkbg-ts-carousel-track {
71 display: grid;
72 grid-auto-flow: column;
73 grid-auto-columns: minmax(260px, 1fr);
74 gap: var(--bkbg-ts-gap);
75 -ms-overflow-style: none;
76 scrollbar-width: none;
77 overflow-x: auto;
78 overflow-y: visible;
79 padding-bottom: 8px;
80 scroll-snap-type: x mandatory;
81 align-items: start;
82 }
83
84 .bkbg-ts-carousel-track::-webkit-scrollbar {
85 width: 0;
86 height: 0;
87 }
88
89 .bkbg-ts-carousel.bkbg-ts-carousel-peek .bkbg-ts-carousel-track {
90 padding-right: 20%;
91 }
92
93 .bkbg-ts-slide {
94 scroll-snap-align: start;
95 }
96
97 .bkbg-ts-nav {
98 display: flex;
99 justify-content: flex-end;
100 gap: 8px;
101 margin-bottom: 10px;
102 }
103
104 .bkbg-ts-carousel-inner {
105 position: relative;
106 display: flex;
107 flex-direction: column;
108 }
109
110 /* Nav placement styles */
111 .bkbg-ts-nav {
112 order: 0;
113 position: relative;
114 z-index: 2;
115 }
116
117 .bkbg-ts-carousel-track {
118 order: 1;
119 position: relative;
120 z-index: 1;
121 }
122
123 .bkbg-ts-nav-bottom .bkbg-ts-nav {
124 justify-content: center;
125 margin: 10px 0 0;
126 order: 2;
127 }
128
129 .bkbg-ts-nav-overlay .bkbg-ts-nav {
130 position: absolute;
131 top: 50%;
132 left: 0;
133 right: 0;
134 transform: translateY(-50%);
135 justify-content: space-between;
136 margin: 0;
137 pointer-events: none;
138 z-index: 3;
139 }
140
141 .bkbg-ts-nav-overlay .bkbg-ts-nav-btn {
142 pointer-events: auto;
143 position: relative;
144 z-index: 4;
145 }
146
147 .bkbg-ts-nav-overlay .bkbg-ts-nav-btn:hover {
148 z-index: 10;
149 background: #fff;
150 }
151
152 .bkbg-ts-nav-overlay .bkbg-ts-nav-btn {
153 width: 40px;
154 height: 40px;
155 border-radius: 999px;
156 box-shadow: 0 10px 24px rgba(0, 0, 0, 0.12);
157 }
158
159 .bkbg-ts-nav-overlay .bkbg-ts-carousel-track {
160 padding-left: 48px;
161 padding-right: 48px;
162 }
163
164 /* Indicators */
165 .bkbg-ts-indicators {
166 display: flex;
167 justify-content: center;
168 margin-top: 10px;
169 }
170
171 .bkbg-ts-indicators-pos-top .bkbg-ts-indicators {
172 margin-top: 0;
173 margin-bottom: 10px;
174 }
175
176 .bkbg-ts-dots {
177 display: flex;
178 gap: 8px;
179 }
180
181 .bkbg-ts-dot {
182 width: var(--bkbg-ts-indicator-size, 8px);
183 height: var(--bkbg-ts-indicator-size, 8px);
184 border-radius: 999px;
185 border: 0;
186 background: var(--bkbg-ts-indicator-color, rgba(0, 0, 0, 0.22));
187 cursor: pointer;
188 padding: 0;
189 transition: width 0.18s ease, background-color 0.18s ease;
190 }
191
192 .bkbg-ts-dot.is-active {
193 background: var(--bkbg-ts-indicator-active-color, rgba(0, 0, 0, 0.65));
194 }
195
196 /* Dots variant: active dot becomes a pill */
197 .bkbg-ts-dots-style-pill .bkbg-ts-dot.is-active {
198 width: calc(var(--bkbg-ts-indicator-size, 8px) * 2.6);
199 }
200
201 .bkbg-ts-progress {
202 width: min(360px, 100%);
203 height: var(--bkbg-ts-progress-height, 6px);
204 border-radius: 999px;
205 background: var(--bkbg-ts-progress-bg, rgba(0, 0, 0, 0.12));
206 overflow: hidden;
207 }
208
209 /* Progress variant: edge-to-edge line */
210 .bkbg-ts-progress-style-edge .bkbg-ts-progress {
211 width: 100%;
212 border-radius: 0;
213 }
214
215 .bkbg-ts-progress-style-edge .bkbg-ts-progress-bar {
216 border-radius: 0;
217 }
218
219 .bkbg-ts-progress-bar {
220 height: 100%;
221 width: 0%;
222 background: var(--bkbg-ts-progress-fg, rgba(0, 0, 0, 0.55));
223 border-radius: 999px;
224 }
225
226 .bkbg-ts-fraction {
227 font-size: var(--bkbg-ts-fraction-size, 13px);
228 color: var(--bkbg-ts-fraction-color, rgba(0, 0, 0, 0.65));
229 font-weight: 600;
230 letter-spacing: 0.02em;
231 user-select: none;
232 }
233
234 .bkbg-ts-nav-btn {
235 width: 36px;
236 height: 36px;
237 border-radius: 10px;
238 border: 1px solid rgba(0, 0, 0, 0.12);
239 background: #fff;
240 cursor: pointer;
241 display: inline-flex;
242 align-items: center;
243 justify-content: center;
244 }
245
246 .bkbg-ts-nav-btn:hover {
247 background: rgba(0, 0, 0, 0.03);
248 }
249
250 .bkbg-ts-card {
251 background: var(--bkbg-ts-card-bg);
252 border: var(--bkbg-ts-card-border-width) solid var(--bkbg-ts-card-border-color);
253 border-radius: var(--bkbg-ts-card-radius);
254 padding: var(--bkbg-ts-card-padding);
255 text-align: var(--bkbg-ts-text-align);
256 display: flex;
257 flex-direction: column;
258 gap: 14px;
259 position: relative;
260 }
261
262 .bkbg-ts-card.is-featured {
263 border-color: var(--bkbg-ts-featured-border-color);
264 box-shadow: 0 0 0 2px var(--bkbg-ts-featured-border-color), 0 10px 24px rgba(0, 0, 0, 0.08);
265 }
266
267 /* Make featured card stand out in grid */
268 .bkbg-ts-grid .bkbg-ts-card.is-featured {
269 grid-column: span 2;
270 }
271
272 @media (max-width: 900px) {
273 .bkbg-ts-grid .bkbg-ts-card.is-featured {
274 grid-column: span 2;
275 }
276 }
277
278 @media (max-width: 560px) {
279 .bkbg-ts-grid .bkbg-ts-card.is-featured {
280 grid-column: span 1;
281 }
282 }
283
284 .bkbg-ts-card.has-shadow {
285 box-shadow: 0 10px 24px rgba(0, 0, 0, 0.08);
286 }
287
288 .bkbg-ts-quote-icon {
289 color: var(--bkbg-ts-quote-icon-color);
290 display: inline-flex;
291 }
292
293 .bkbg-ts-quote-icon .dashicons {
294 width: var(--bkbg-ts-quote-icon-size);
295 height: var(--bkbg-ts-quote-icon-size);
296 font-size: var(--bkbg-ts-quote-icon-size);
297 }
298
299 .bkbg-ts-wrap .bkbg-ts-quote {
300 color: var(--bkbg-ts-quote-color);
301 font-family: var(--bkts-qt-ff);
302 font-size: var(--bkts-qt-fs-d, 16px);
303 line-height: var(--bkts-qt-lh-d, 1.6);
304 letter-spacing: var(--bkts-qt-ls-d);
305 word-spacing: var(--bkts-qt-ws-d);
306 font-weight: var(--bkts-qt-fw, 500);
307 font-style: var(--bkts-qt-fst);
308 text-decoration: var(--bkts-qt-td);
309 text-transform: var(--bkts-qt-tt);
310 margin: 0;
311 }
312
313 .bkbg-ts-meta {
314 display: flex;
315 align-items: center;
316 gap: 12px;
317 }
318
319 .bkbg-ts-avatar {
320 width: var(--bkbg-ts-avatar-size);
321 height: var(--bkbg-ts-avatar-size);
322 border-radius: var(--bkbg-ts-avatar-radius);
323 overflow: hidden;
324 background: #f3f4f6;
325 border: 1px solid rgba(0, 0, 0, 0.04);
326 flex-shrink: 0;
327 display: flex;
328 align-items: center;
329 justify-content: center;
330 }
331
332 .bkbg-ts-avatar img {
333 width: 100%;
334 height: 100%;
335 object-fit: cover;
336 display: block;
337 }
338
339 .bkbg-ts-avatar .dashicons {
340 color: #6b7280;
341 width: 22px;
342 height: 22px;
343 font-size: 22px;
344 }
345
346 .bkbg-ts-author {
347 display: flex;
348 flex-direction: column;
349 gap: 2px;
350 min-width: 0;
351 }
352
353 .bkbg-ts-wrap .bkbg-ts-name {
354 color: var(--bkbg-ts-name-color);
355 font-family: var(--bkts-nm-ff);
356 font-size: var(--bkts-nm-fs-d, 16px);
357 line-height: var(--bkts-nm-lh-d, 1.25);
358 letter-spacing: var(--bkts-nm-ls-d);
359 word-spacing: var(--bkts-nm-ws-d);
360 font-weight: var(--bkts-nm-fw, 700);
361 font-style: var(--bkts-nm-fst);
362 text-decoration: var(--bkts-nm-td);
363 text-transform: var(--bkts-nm-tt);
364 margin: 0;
365 }
366
367 .bkbg-ts-wrap .bkbg-ts-roleline {
368 color: var(--bkbg-ts-role-color);
369 font-family: var(--bkts-rl-ff);
370 font-size: var(--bkts-rl-fs-d, 13px);
371 line-height: var(--bkts-rl-lh-d, 1.2);
372 letter-spacing: var(--bkts-rl-ls-d);
373 word-spacing: var(--bkts-rl-ws-d);
374 font-weight: var(--bkts-rl-fw, 600);
375 font-style: var(--bkts-rl-fst);
376 text-decoration: var(--bkts-rl-td);
377 text-transform: var(--bkts-rl-tt);
378 margin: 0;
379 }
380
381 .bkbg-ts-company {
382 color: var(--bkbg-ts-company-color);
383 font-weight: 600;
384 }
385
386 .bkbg-ts-rating {
387 display: inline-flex;
388 gap: 4px;
389 color: var(--bkbg-ts-rating-color);
390 }
391
392 .bkbg-ts-star {
393 width: var(--bkbg-ts-rating-size);
394 height: var(--bkbg-ts-rating-size);
395 font-size: var(--bkbg-ts-rating-size);
396 line-height: 1;
397 }
398
399 .bkbg-ts-star-btn {
400 appearance: none;
401 background: transparent;
402 border: 0;
403 padding: 0;
404 margin: 0;
405 line-height: 1;
406 cursor: pointer;
407 color: inherit;
408 display: inline-flex;
409 align-items: center;
410 justify-content: center;
411 }
412
413 .bkbg-ts-star-btn:focus {
414 outline: 2px solid var(--wp-admin-theme-color, #007cba);
415 outline-offset: 2px;
416 }
417
418 /* Editor controls */
419 .bkbg-ts-card.is-active {
420 outline: 2px solid var(--wp-admin-theme-color, #007cba);
421 outline-offset: 2px;
422 }
423
424 .bkbg-ts-actions {
425 position: absolute;
426 top: 10px;
427 right: 10px;
428 display: flex;
429 gap: 6px;
430 opacity: 0;
431 transform: translateY(-4px);
432 transition: opacity 0.15s ease, transform 0.15s ease;
433 }
434
435 .bkbg-ts-card:hover .bkbg-ts-actions,
436 .bkbg-ts-card.is-active .bkbg-ts-actions {
437 opacity: 1;
438 transform: translateY(0);
439 }
440
441 .bkbg-ts-actions .components-button {
442 min-width: 28px;
443 height: 28px;
444 padding: 0;
445 }
446
447 /* ── Responsive typography ────────────────────────────────── */
448 @media (max-width: 1024px) {
449 .bkbg-ts-wrap .bkbg-ts-quote {
450 font-size: var(--bkts-qt-fs-t, var(--bkts-qt-fs-d, 16px));
451 line-height: var(--bkts-qt-lh-t, var(--bkts-qt-lh-d, 1.6));
452 letter-spacing: var(--bkts-qt-ls-t, var(--bkts-qt-ls-d));
453 word-spacing: var(--bkts-qt-ws-t, var(--bkts-qt-ws-d));
454 }
455 .bkbg-ts-wrap .bkbg-ts-name {
456 font-size: var(--bkts-nm-fs-t, var(--bkts-nm-fs-d, 16px));
457 line-height: var(--bkts-nm-lh-t, var(--bkts-nm-lh-d, 1.25));
458 letter-spacing: var(--bkts-nm-ls-t, var(--bkts-nm-ls-d));
459 word-spacing: var(--bkts-nm-ws-t, var(--bkts-nm-ws-d));
460 }
461 .bkbg-ts-wrap .bkbg-ts-roleline {
462 font-size: var(--bkts-rl-fs-t, var(--bkts-rl-fs-d, 13px));
463 line-height: var(--bkts-rl-lh-t, var(--bkts-rl-lh-d, 1.2));
464 letter-spacing: var(--bkts-rl-ls-t, var(--bkts-rl-ls-d));
465 word-spacing: var(--bkts-rl-ws-t, var(--bkts-rl-ws-d));
466 }
467 }
468 @media (max-width: 767px) {
469 .bkbg-ts-wrap .bkbg-ts-quote {
470 font-size: var(--bkts-qt-fs-m, var(--bkts-qt-fs-t, var(--bkts-qt-fs-d, 16px)));
471 line-height: var(--bkts-qt-lh-m, var(--bkts-qt-lh-t, var(--bkts-qt-lh-d, 1.6)));
472 letter-spacing: var(--bkts-qt-ls-m, var(--bkts-qt-ls-t, var(--bkts-qt-ls-d)));
473 word-spacing: var(--bkts-qt-ws-m, var(--bkts-qt-ws-t, var(--bkts-qt-ws-d)));
474 }
475 .bkbg-ts-wrap .bkbg-ts-name {
476 font-size: var(--bkts-nm-fs-m, var(--bkts-nm-fs-t, var(--bkts-nm-fs-d, 16px)));
477 line-height: var(--bkts-nm-lh-m, var(--bkts-nm-lh-t, var(--bkts-nm-lh-d, 1.25)));
478 letter-spacing: var(--bkts-nm-ls-m, var(--bkts-nm-ls-t, var(--bkts-nm-ls-d)));
479 word-spacing: var(--bkts-nm-ws-m, var(--bkts-nm-ws-t, var(--bkts-nm-ws-d)));
480 }
481 .bkbg-ts-wrap .bkbg-ts-roleline {
482 font-size: var(--bkts-rl-fs-m, var(--bkts-rl-fs-t, var(--bkts-rl-fs-d, 13px)));
483 line-height: var(--bkts-rl-lh-m, var(--bkts-rl-lh-t, var(--bkts-rl-lh-d, 1.2)));
484 letter-spacing: var(--bkts-rl-ls-m, var(--bkts-rl-ls-t, var(--bkts-rl-ls-d)));
485 word-spacing: var(--bkts-rl-ws-m, var(--bkts-rl-ws-t, var(--bkts-rl-ws-d)));
486 }
487 }
488
489 @media (prefers-reduced-motion: reduce) {
490 .bkbg-ts-carousel-track {
491 scroll-behavior: auto;
492 }
493 }
494