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 / blockquote / style.css

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

344 lines 13.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /* ========================================
2 Blockquote / Pull Quote Block
3 Prefix: bkbg-bq-
4 ======================================== */
5
6 /* ── CSS Custom Properties (fallbacks) ────────────────────────────────────── */
7 .bkbg-bq-wrap {
8 --bkbg-bq-accent-color: #3b82f6;
9 --bkbg-bq-accent-w: 4px;
10 --bkbg-bq-accent-r: 2px;
11 --bkbg-bq-bg: transparent;
12 --bkbg-bq-radius: 8px;
13 --bkbg-bq-mark-opacity: 0.20;
14 --bkbg-bq-pad-t: 28px;
15 --bkbg-bq-pad-r: 32px;
16 --bkbg-bq-pad-b: 28px;
17 --bkbg-bq-pad-l: 32px;
18 --bkbg-bq-shadow: none;
19 --bkbg-bq-quote-size: 22px;
20 --bkbg-bq-quote-weight: 400;
21 --bkbg-bq-quote-fstyle: italic;
22 --bkbg-bq-quote-lh: 1.65;
23 --bkbg-bq-quote-color: #1e293b;
24 --bkbg-bq-quote-spacing: 20px;
25 --bkbg-bq-name-size: 15px;
26 --bkbg-bq-name-weight: 700;
27 --bkbg-bq-name-color: #1e293b;
28 --bkbg-bq-role-size: 13px;
29 --bkbg-bq-role-weight: 400;
30 --bkbg-bq-role-color: #6b7280;
31 --bkbg-bq-photo-size: 52px;
32 --bkbg-bq-photo-border: none;
33 --bkbg-bq-gap-photo: 12px;
34 }
35
36 /* ── Wrapper ───────────────────────────────────────────────────────────────── */
37 .bkbg-bq-wrap {
38 position: relative;
39 display: block;
40 margin: 0;
41 padding: var(--bkbg-bq-pad-t) var(--bkbg-bq-pad-r) var(--bkbg-bq-pad-b) var(--bkbg-bq-pad-l);
42 background: var(--bkbg-bq-bg);
43 border-radius: var(--bkbg-bq-radius);
44 box-shadow: var(--bkbg-bq-shadow);
45 }
46
47 /* ── Body (sits above float mark) ─────────────────────────────────────────── */
48 .bkbg-bq-body {
49 position: relative;
50 z-index: 1;
51 }
52
53 /* ── Quote text ────────────────────────────────────────────────────────────── */
54 .bkbg-bq-text {
55 display: block;
56 margin: 0 0 var(--bkbg-bq-quote-spacing) 0;
57 padding: 0;
58 border: none;
59 font-size: var(--bkbg-bq-quote-size);
60 font-weight: var(--bkbg-bq-quote-weight);
61 font-style: var(--bkbg-bq-quote-fstyle);
62 line-height: var(--bkbg-bq-quote-lh);
63 color: var(--bkbg-bq-quote-color);
64 }
65
66 /* ──────────────────────────────────────────────────────────────────────────── */
67 /* QUOTE STYLE VARIANTS */
68 /* ──────────────────────────────────────────────────────────────────────────── */
69
70 /* ── Line: left accent bar ─────────────────────────────────────────────────── */
71 .bkbg-bq-wrap[data-style="line"] {
72 border-left: var(--bkbg-bq-accent-w) solid var(--bkbg-bq-accent-color);
73 border-radius: 0 var(--bkbg-bq-radius) var(--bkbg-bq-radius) 0;
74 }
75
76 /* ── Top Bar: top accent stripe ─────────────────────────────────────────────── */
77 .bkbg-bq-wrap[data-style="top-bar"] {
78 border-top: var(--bkbg-bq-accent-w) solid var(--bkbg-bq-accent-color);
79 border-radius: 0 0 var(--bkbg-bq-radius) var(--bkbg-bq-radius);
80 }
81
82 /* ── Bordered: full outline ─────────────────────────────────────────────────── */
83 .bkbg-bq-wrap[data-style="bordered"] {
84 border: var(--bkbg-bq-accent-w) solid var(--bkbg-bq-accent-color);
85 }
86
87 /* ── Card: tinted background + shadow ─────────────────────────────────────── */
88 .bkbg-bq-wrap[data-style="card"] {
89 /* bg set via inline CSS var; shadow controlled by toggle */
90 border-radius: var(--bkbg-bq-radius);
91 }
92
93 /* ── Quotes: mark is the main visual focus — no extra rules needed, typography
94 controlled entirely via inspector controls ──────────────────────────────── */
95
96 /* ── Minimal: no decorations — inherits base styles ────────────────────────── */
97
98 /* ──────────────────────────────────────────────────────────────────────────── */
99 /* DECORATIVE QUOTE MARK */
100 /* ──────────────────────────────────────────────────────────────────────────── */
101
102 /* Mark shared base */
103 .bkbg-bq-mark {
104 display: block;
105 line-height: 1;
106 user-select: none;
107 pointer-events: none;
108 }
109
110 /* Float → Side: mark in its own left column, body takes remaining space */
111 .bkbg-bq-wrap[data-mark-pos="float"],
112 .bkbg-bq-wrap[data-mark-pos="right"] {
113 display: flex;
114 flex-direction: row;
115 align-items: flex-start;
116 gap: var(--bkbg-bq-mark-side-gap, 16px);
117 }
118
119 /* Left: mark first (default DOM order) */
120 .bkbg-bq-wrap[data-mark-pos="float"] .bkbg-bq-mark {
121 position: static;
122 flex-shrink: 0;
123 opacity: 1;
124 pointer-events: none;
125 user-select: none;
126 margin-top: -4px;
127 }
128
129 /* Right: mark last — push it after body via order */
130 .bkbg-bq-wrap[data-mark-pos="right"] .bkbg-bq-mark {
131 position: static;
132 flex-shrink: 0;
133 opacity: 1;
134 pointer-events: none;
135 user-select: none;
136 margin-top: -4px;
137 order: 1; /* body is 0 (default), mark goes after */
138 }
139
140 .bkbg-bq-wrap[data-mark-pos="float"] .bkbg-bq-body,
141 .bkbg-bq-wrap[data-mark-pos="right"] .bkbg-bq-body {
142 flex: 1;
143 min-width: 0;
144 }
145
146 /* Above: in-flow block before quote text */
147 .bkbg-bq-wrap[data-mark-pos="above"] .bkbg-bq-mark {
148 position: static;
149 margin-bottom: 8px;
150 }
151
152 /* Center the mark for center-aligned blocks */
153 .bkbg-bq-wrap[data-quote-align="center"][data-mark-pos="above"] .bkbg-bq-body,
154 .bkbg-bq-wrap[data-quote-align="center"][data-mark-pos="above"] .bkbg-bq-mark {
155 display: flex;
156 flex-direction: column;
157 align-items: center;
158 }
159
160 /* ──────────────────────────────────────────────────────────────────────────── */
161 /* TEXT ALIGNMENT */
162 /* ──────────────────────────────────────────────────────────────────────────── */
163
164 .bkbg-bq-wrap[data-quote-align="left"] .bkbg-bq-body { text-align: left; }
165 .bkbg-bq-wrap[data-quote-align="center"] .bkbg-bq-body { text-align: center; }
166 .bkbg-bq-wrap[data-quote-align="right"] .bkbg-bq-body { text-align: right; }
167
168 /* ──────────────────────────────────────────────────────────────────────────── */
169 /* AUTHOR ROW */
170 /* ──────────────────────────────────────────────────────────────────────────── */
171
172 .bkbg-bq-author {
173 display: flex;
174 gap: var(--bkbg-bq-gap-photo);
175 }
176
177 /* Horizontal: photo on left, text on right, vertically centred */
178 .bkbg-bq-author[data-layout="horizontal"] {
179 flex-direction: row;
180 align-items: center;
181 }
182
183 /* Horizontal-right: photo on right, text on left, text right-aligned towards photo */
184 .bkbg-bq-author[data-layout="horizontal-right"] {
185 flex-direction: row;
186 align-items: center;
187 }
188 .bkbg-bq-author[data-layout="horizontal-right"] .bkbg-bq-photo-wrap {
189 order: 1;
190 }
191 .bkbg-bq-author[data-layout="horizontal-right"] .bkbg-bq-info {
192 text-align: right;
193 }
194
195 /* Vertical: photo above, text below, stacked */
196 .bkbg-bq-author[data-layout="vertical"] {
197 flex-direction: column;
198 align-items: flex-start;
199 }
200
201 /* Align author row with text alignment */
202 .bkbg-bq-wrap[data-quote-align="center"] .bkbg-bq-author {
203 justify-content: center;
204 }
205 .bkbg-bq-wrap[data-quote-align="center"] .bkbg-bq-author[data-layout="vertical"] {
206 align-items: center;
207 }
208 /* When horizontal + photo visible + centre align: keep name/role left-aligned to photo */
209 .bkbg-bq-wrap[data-quote-align="center"] .bkbg-bq-author[data-layout="horizontal"] .bkbg-bq-info {
210 text-align: left;
211 }
212 /* horizontal-right keeps right-align regardless of quote alignment */
213 .bkbg-bq-wrap[data-quote-align="center"] .bkbg-bq-author[data-layout="horizontal-right"] .bkbg-bq-info,
214 .bkbg-bq-wrap[data-quote-align="left"] .bkbg-bq-author[data-layout="horizontal-right"] .bkbg-bq-info {
215 text-align: right;
216 }
217 .bkbg-bq-wrap[data-quote-align="right"] .bkbg-bq-author {
218 justify-content: flex-end;
219 }
220 .bkbg-bq-wrap[data-quote-align="right"] .bkbg-bq-author[data-layout="vertical"] {
221 align-items: flex-end;
222 }
223 .bkbg-bq-wrap[data-quote-align="right"] .bkbg-bq-author[data-layout="horizontal"] .bkbg-bq-info {
224 text-align: left;
225 }
226 .bkbg-bq-wrap[data-quote-align="right"] .bkbg-bq-author[data-layout="horizontal-right"] .bkbg-bq-info {
227 text-align: right;
228 }
229
230 /* Info column */
231 .bkbg-bq-info {
232 display: flex;
233 flex-direction: column;
234 gap: 2px;
235 min-width: 0;
236 justify-content: center;
237 }
238
239 /* ── Author name ───────────────────────────────────────────────────────────── */
240 .bkbg-bq-name,
241 .bkbg-bq-wrap .bkbg-bq-name {
242 margin: 0;
243 padding: 0;
244 font-size: var(--bkbg-bq-name-size);
245 font-weight: var(--bkbg-bq-name-weight);
246 font-style: normal;
247 color: var(--bkbg-bq-name-color);
248 line-height: 1.3;
249 text-align: inherit;
250 }
251
252 /* ── Author role ───────────────────────────────────────────────────────────── */
253 .bkbg-bq-role,
254 .bkbg-bq-wrap .bkbg-bq-role {
255 margin: 0;
256 padding: 0;
257 font-size: var(--bkbg-bq-role-size);
258 font-weight: var(--bkbg-bq-role-weight);
259 font-style: normal;
260 color: var(--bkbg-bq-role-color);
261 line-height: 1.4;
262 text-align: inherit;
263 }
264
265 /* ── Author photo ──────────────────────────────────────────────────────────── */
266 .bkbg-bq-photo-wrap {
267 flex-shrink: 0;
268 width: var(--bkbg-bq-photo-size);
269 height: var(--bkbg-bq-photo-size);
270 overflow: hidden;
271 }
272
273 .bkbg-bq-photo {
274 display: block;
275 width: 100%;
276 height: 100%;
277 object-fit: cover;
278 border: var(--bkbg-bq-photo-border);
279 }
280
281 /* Photo shapes */
282 .bkbg-bq-photo-wrap[data-shape="circle"] {
283 border-radius: 50%;
284 }
285 .bkbg-bq-photo-wrap[data-shape="circle"] .bkbg-bq-photo {
286 border-radius: 50%;
287 }
288 .bkbg-bq-photo-wrap[data-shape="rounded"] {
289 border-radius: 12px;
290 }
291 .bkbg-bq-photo-wrap[data-shape="rounded"] .bkbg-bq-photo {
292 border-radius: 12px;
293 }
294 .bkbg-bq-photo-wrap[data-shape="square"] {
295 border-radius: 0;
296 }
297
298 /* ── Photo placeholder (editor only) ──────────────────────────────────────── */
299 .bkbg-bq-photo-placeholder {
300 display: flex;
301 align-items: center;
302 justify-content: center;
303 width: 100%;
304 height: 100%;
305 background: #e5e7eb;
306 border: 2px dashed #9ca3af;
307 border-radius: inherit;
308 color: #6b7280;
309 font-size: 11px;
310 font-weight: 600;
311 user-select: none;
312 }
313
314 /* ── Editor adjustments ────────────────────────────────────────────────────── */
315 .editor-styles-wrapper .bkbg-bq-wrap {
316 display: block !important;
317 }
318
319 .editor-styles-wrapper .bkbg-bq-wrap[data-mark-pos="float"],
320 .editor-styles-wrapper .bkbg-bq-wrap[data-mark-pos="right"] {
321 display: flex !important;
322 }
323
324 /* Prevent figure default margin in editor */
325 .editor-styles-wrapper .bkbg-bq-wrap {
326 margin-block: 0;
327 }
328
329 /* Prevent theme blockquote styles leaking in */
330 .bkbg-bq-text {
331 quotes: none;
332 }
333 .bkbg-bq-text::before,
334 .bkbg-bq-text::after {
335 content: none;
336 }
337
338 /* In editor, RichText does not need the dash either */
339
340 /* Vertical layout: photo placeholder full-width is wrong — cap it */
341 .bkbg-bq-author[data-layout="vertical"] .bkbg-bq-photo-wrap {
342 width: var(--bkbg-bq-photo-size);
343 }
344