PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.79
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.79
51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 All 40 releases
king-addons / includes / widgets / Reveal_Swipe_Cards / style.css

style.css in King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder 51.1.79, at includes/widgets/Reveal_Swipe_Cards/style.css

477 lines 12.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Reveal Swipe Cards Widget Styles.
3 *
4 * CSS for wipe-reveal card animations using clip-path and transform fallback.
5 * Includes Pro styles for mask shapes, blur edge, and touch interactions.
6 *
7 * @package King_Addons
8 */
9
10 /* ==========================================================================
11 CSS Custom Properties (Design Tokens)
12 ========================================================================== */
13
14 .kng-rsc {
15 --kng-rsc-columns: 3;
16 --kng-rsc-gap: 24px;
17 --kng-rsc-min-height: 320px;
18 --kng-rsc-content-align: center;
19 --kng-rsc-text-align: center;
20 --kng-rsc-duration: 500ms;
21 --kng-rsc-easing: ease-out;
22 --kng-rsc-overlay-color: #2563eb;
23 --kng-rsc-overlay-opacity: 1;
24 --kng-rsc-blur-edge: 0px;
25 --kng-rsc-mask-shape: rect;
26 }
27
28 /* ==========================================================================
29 Grid Layout
30 ========================================================================== */
31
32 .kng-rsc__grid {
33 display: grid;
34 grid-template-columns: repeat(var(--kng-rsc-columns), 1fr);
35 gap: var(--kng-rsc-gap);
36 }
37
38 /* ==========================================================================
39 Card Base
40 ========================================================================== */
41
42 .kng-rsc-card {
43 position: relative;
44 min-height: var(--kng-rsc-min-height);
45 overflow: hidden;
46 border-radius: 12px;
47 transition: transform 0.3s ease, box-shadow 0.3s ease;
48 }
49
50 /* Hover Transform: Lift */
51 .kng-rsc--hover-lift .kng-rsc-card:hover {
52 transform: translateY(-8px);
53 }
54
55 /* Hover Transform: Scale */
56 .kng-rsc--hover-scale .kng-rsc-card:hover {
57 transform: scale(1.03);
58 }
59
60 /* Hover Transform: Tilt */
61 .kng-rsc--hover-tilt .kng-rsc-card:hover {
62 transform: perspective(1000px) rotateX(2deg) rotateY(-2deg);
63 }
64
65 .kng-rsc-card__content {
66 position: relative;
67 z-index: 1;
68 display: flex;
69 flex-direction: column;
70 justify-content: var(--kng-rsc-content-align);
71 min-height: var(--kng-rsc-min-height);
72 background: #ffffff;
73 }
74
75 .kng-rsc-card__inner {
76 padding: 32px 24px;
77 text-align: var(--kng-rsc-text-align);
78 }
79
80 /* ==========================================================================
81 Reveal Overlay (Mask Layer)
82 ========================================================================== */
83
84 .kng-rsc-card__overlay {
85 position: absolute;
86 top: 0;
87 left: 0;
88 right: 0;
89 bottom: 0;
90 z-index: 2;
91 display: flex;
92 align-items: center;
93 justify-content: center;
94 background-color: var(--kng-rsc-overlay-color);
95 opacity: var(--kng-rsc-overlay-opacity);
96 pointer-events: none;
97 transition: transform var(--kng-rsc-duration) var(--kng-rsc-easing);
98 will-change: transform;
99 }
100
101 /* Overlay content (icon or text) */
102 .kng-rsc-card__overlay-content {
103 display: inline-flex;
104 align-items: center;
105 justify-content: center;
106 color: #ffffff;
107 font-size: 32px;
108 transition: opacity 0.2s ease;
109 }
110
111 .kng-rsc-card.is-revealed .kng-rsc-card__overlay-content {
112 opacity: 0;
113 }
114
115 /* Direction: Left to Right */
116 .kng-rsc-card--direction-left .kng-rsc-card__overlay {
117 transform: translateX(0);
118 }
119
120 .kng-rsc-card--direction-left.is-revealed .kng-rsc-card__overlay {
121 transform: translateX(100%);
122 }
123
124 /* Direction: Right to Left */
125 .kng-rsc-card--direction-right .kng-rsc-card__overlay {
126 transform: translateX(0);
127 }
128
129 .kng-rsc-card--direction-right.is-revealed .kng-rsc-card__overlay {
130 transform: translateX(-100%);
131 }
132
133 /* Direction: Top to Bottom */
134 .kng-rsc-card--direction-top .kng-rsc-card__overlay {
135 transform: translateY(0);
136 }
137
138 .kng-rsc-card--direction-top.is-revealed .kng-rsc-card__overlay {
139 transform: translateY(100%);
140 }
141
142 /* Direction: Bottom to Top */
143 .kng-rsc-card--direction-bottom .kng-rsc-card__overlay {
144 transform: translateY(0);
145 }
146
147 .kng-rsc-card--direction-bottom.is-revealed .kng-rsc-card__overlay {
148 transform: translateY(-100%);
149 }
150
151 /* Instant reveal (no animation) */
152 .kng-rsc-card.is-instant .kng-rsc-card__overlay {
153 transition: none;
154 }
155
156 /* ==========================================================================
157 Pro: Blur Edge Effect
158 ========================================================================== */
159
160 .kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
161 content: "";
162 position: absolute;
163 pointer-events: none;
164 }
165
166 /* Blur edge for horizontal wipe */
167 .kng-rsc-card--direction-left.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after,
168 .kng-rsc-card--direction-right.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
169 top: 0;
170 bottom: 0;
171 width: calc(var(--kng-rsc-blur-edge) * 2);
172 background: linear-gradient(
173 to right,
174 transparent,
175 var(--kng-rsc-overlay-color) 50%
176 );
177 }
178
179 .kng-rsc-card--direction-left.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
180 left: calc(var(--kng-rsc-blur-edge) * -2);
181 }
182
183 .kng-rsc-card--direction-right.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
184 right: calc(var(--kng-rsc-blur-edge) * -2);
185 background: linear-gradient(
186 to left,
187 transparent,
188 var(--kng-rsc-overlay-color) 50%
189 );
190 }
191
192 /* Blur edge for vertical wipe */
193 .kng-rsc-card--direction-top.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after,
194 .kng-rsc-card--direction-bottom.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
195 left: 0;
196 right: 0;
197 height: calc(var(--kng-rsc-blur-edge) * 2);
198 background: linear-gradient(
199 to bottom,
200 transparent,
201 var(--kng-rsc-overlay-color) 50%
202 );
203 }
204
205 .kng-rsc-card--direction-top.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
206 top: calc(var(--kng-rsc-blur-edge) * -2);
207 }
208
209 .kng-rsc-card--direction-bottom.kng-rsc-card--blur-edge .kng-rsc-card__overlay::after {
210 bottom: calc(var(--kng-rsc-blur-edge) * -2);
211 background: linear-gradient(
212 to top,
213 transparent,
214 var(--kng-rsc-overlay-color) 50%
215 );
216 }
217
218 /* ==========================================================================
219 Pro: Mask Shapes (clip-path based)
220 ========================================================================== */
221
222 /* Circle reveal from center */
223 .kng-rsc-card--mask-circle .kng-rsc-card__overlay {
224 transform: none;
225 clip-path: circle(150% at 50% 50%);
226 transition: clip-path var(--kng-rsc-duration) var(--kng-rsc-easing);
227 }
228
229 .kng-rsc-card--mask-circle.is-revealed .kng-rsc-card__overlay {
230 clip-path: circle(0% at 50% 50%);
231 }
232
233 /* Rounded rect reveal */
234 .kng-rsc-card--mask-rounded .kng-rsc-card__overlay {
235 border-radius: 0;
236 transition: transform var(--kng-rsc-duration) var(--kng-rsc-easing),
237 border-radius var(--kng-rsc-duration) var(--kng-rsc-easing);
238 }
239
240 .kng-rsc-card--mask-rounded.is-revealed .kng-rsc-card__overlay {
241 border-radius: 50%;
242 }
243
244 /* Diagonal wipe */
245 .kng-rsc-card--mask-diagonal .kng-rsc-card__overlay {
246 transform: none;
247 clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
248 transition: clip-path var(--kng-rsc-duration) var(--kng-rsc-easing);
249 }
250
251 .kng-rsc-card--mask-diagonal.is-revealed .kng-rsc-card__overlay {
252 clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
253 }
254
255 /* Wave wipe */
256 .kng-rsc-card--mask-wave .kng-rsc-card__overlay {
257 transform: none;
258 clip-path: polygon(
259 0% 0%,
260 100% 0%,
261 100% 100%,
262 0% 100%
263 );
264 transition: clip-path var(--kng-rsc-duration) var(--kng-rsc-easing);
265 }
266
267 .kng-rsc-card--mask-wave.is-revealed .kng-rsc-card__overlay {
268 clip-path: polygon(
269 100% 0%,
270 100% 0%,
271 100% 100%,
272 100% 100%
273 );
274 }
275
276 /* ==========================================================================
277 Card Content Elements
278 ========================================================================== */
279
280 .kng-rsc-card__media {
281 margin-bottom: 16px;
282 }
283
284 .kng-rsc-card__icon {
285 display: inline-flex;
286 align-items: center;
287 justify-content: center;
288 font-size: 48px;
289 color: var(--kng-rsc-overlay-color);
290 }
291
292 .kng-rsc-card__icon svg {
293 width: 48px;
294 height: 48px;
295 fill: currentColor;
296 }
297
298 .kng-rsc-card__image {
299 max-width: 100%;
300 height: auto;
301 border-radius: 8px;
302 }
303
304 .kng-rsc-card__title {
305 margin: 0 0 12px;
306 font-size: 20px;
307 font-weight: 600;
308 line-height: 1.3;
309 color: #111827;
310 }
311
312 .kng-rsc-card__description {
313 margin: 0 0 20px;
314 font-size: 15px;
315 line-height: 1.6;
316 color: #6b7280;
317 }
318
319 .kng-rsc-card__button {
320 display: inline-flex;
321 align-items: center;
322 justify-content: center;
323 padding: 10px 24px;
324 font-size: 14px;
325 font-weight: 600;
326 color: #ffffff;
327 background-color: var(--kng-rsc-overlay-color);
328 border: none;
329 border-radius: 8px;
330 text-decoration: none;
331 cursor: pointer;
332 transition: background-color 0.2s ease, transform 0.2s ease;
333 }
334
335 .kng-rsc-card__button:hover {
336 background-color: #1d4ed8;
337 transform: translateY(-2px);
338 }
339
340 .kng-rsc-card__button:focus-visible {
341 outline: 2px solid var(--kng-rsc-overlay-color);
342 outline-offset: 3px;
343 }
344
345 /* ==========================================================================
346 Badge
347 ========================================================================== */
348
349 .kng-rsc-card__badge {
350 position: absolute;
351 z-index: 3;
352 padding: 6px 12px;
353 font-size: 12px;
354 font-weight: 600;
355 color: #ffffff;
356 background-color: #ef4444;
357 border-radius: 4px;
358 text-transform: uppercase;
359 letter-spacing: 0.05em;
360 }
361
362 .kng-rsc-card__badge--top-left {
363 top: 16px;
364 left: 16px;
365 }
366
367 .kng-rsc-card__badge--top-right {
368 top: 16px;
369 right: 16px;
370 }
371
372 .kng-rsc-card__badge--bottom-left {
373 bottom: 16px;
374 left: 16px;
375 }
376
377 .kng-rsc-card__badge--bottom-right {
378 bottom: 16px;
379 right: 16px;
380 }
381
382 /* ==========================================================================
383 Touch Swipe State (Pro)
384 ========================================================================== */
385
386 .kng-rsc-card.is-dragging .kng-rsc-card__overlay {
387 transition: none;
388 }
389
390 /* ==========================================================================
391 Reduced Motion
392 ========================================================================== */
393
394 .kng-rsc--reduced-motion .kng-rsc-card__overlay {
395 transition-duration: 0.01ms !important;
396 }
397
398 @media (prefers-reduced-motion: reduce) {
399 .kng-rsc:not(.kng-rsc--reduced-motion-off) .kng-rsc-card__overlay {
400 transition-duration: 0.01ms !important;
401 }
402 }
403
404 /* ==========================================================================
405 Empty State (Editor)
406 ========================================================================== */
407
408 .kng-rsc-empty {
409 padding: 40px 24px;
410 border: 2px dashed #d1d5db;
411 border-radius: 12px;
412 text-align: center;
413 color: #6b7280;
414 font-size: 14px;
415 }
416
417 /* ==========================================================================
418 Responsive
419 ========================================================================== */
420
421 @media (max-width: 1024px) {
422 .kng-rsc {
423 --kng-rsc-columns: 2;
424 }
425 }
426
427 @media (max-width: 767px) {
428 .kng-rsc {
429 --kng-rsc-columns: 1;
430 }
431
432 .kng-rsc-card__inner {
433 padding: 24px 20px;
434 }
435
436 .kng-rsc-card__title {
437 font-size: 18px;
438 }
439
440 .kng-rsc-card__description {
441 font-size: 14px;
442 }
443 }
444
445 /* ==========================================================================
446 Editor Styles
447 ========================================================================== */
448
449 body.elementor-editor-active .kng-rsc-card__overlay {
450 pointer-events: none;
451 }
452
453 body.elementor-editor-active .kng-rsc-card:hover .kng-rsc-card__overlay {
454 transform: translateX(100%);
455 }
456
457 body.elementor-editor-active .kng-rsc-card--direction-right:hover .kng-rsc-card__overlay {
458 transform: translateX(-100%);
459 }
460
461 body.elementor-editor-active .kng-rsc-card--direction-top:hover .kng-rsc-card__overlay {
462 transform: translateY(100%);
463 }
464
465 body.elementor-editor-active .kng-rsc-card--direction-bottom:hover .kng-rsc-card__overlay {
466 transform: translateY(-100%);
467 }
468
469 body.elementor-editor-active .kng-rsc-card--mask-circle:hover .kng-rsc-card__overlay {
470 clip-path: circle(0% at 50% 50%);
471 }
472
473 body.elementor-editor-active .kng-rsc-card--mask-diagonal:hover .kng-rsc-card__overlay,
474 body.elementor-editor-active .kng-rsc-card--mask-wave:hover .kng-rsc-card__overlay {
475 clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
476 }
477