PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.49
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.49
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 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Interactive_Image_Sheen / style.css

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

540 lines 14.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Interactive Image Sheen Widget Styles.
3 *
4 * Premium sheen effect overlay with presets and animations.
5 *
6 * @package King_Addons
7 */
8
9 /* ==========================================================================
10 CSS Custom Properties
11 ========================================================================== */
12
13 .kng-iis {
14 --kng-iis-angle: 25deg;
15 --kng-iis-intensity: 60;
16 --kng-iis-duration: 600ms;
17 --kng-iis-sheen-color: #ffffff;
18 --kng-iis-sheen-opacity: 0.6;
19 --kng-iis-softness: 30%;
20 --kng-iis-sheen-width: 50%;
21 --kng-iis-layer2-width: 80%;
22 --kng-iis-layer3-width: 120%;
23 --kng-iis-static-pos: 30%;
24 position: relative;
25 display: inline-block;
26 overflow: hidden;
27 }
28
29 /* ==========================================================================
30 Media Container
31 ========================================================================== */
32
33 .kng-iis__media {
34 position: relative;
35 display: block;
36 overflow: hidden;
37 transition: transform 0.3s ease;
38 }
39
40 .kng-iis__image {
41 display: block;
42 width: 100%;
43 height: 100%;
44 object-fit: cover;
45 }
46
47 .kng-iis__link {
48 display: block;
49 text-decoration: none;
50 }
51
52 /* ==========================================================================
53 Sheen Overlay
54 ========================================================================== */
55
56 .kng-iis__sheen {
57 position: absolute;
58 inset: 0;
59 z-index: 2;
60 pointer-events: none;
61 opacity: 0;
62 transform: translateX(-150%);
63 transition: opacity 0.2s ease;
64 will-change: transform, opacity;
65 }
66
67 /* Calculate opacity based on intensity */
68 .kng-iis__sheen {
69 --computed-opacity: calc(var(--kng-iis-sheen-opacity) * var(--kng-iis-intensity) / 100);
70 }
71
72 /* ==========================================================================
73 Preset: Silk Soft (Wide & Subtle)
74 ========================================================================== */
75
76 .kng-iis--preset-silk-soft .kng-iis__sheen {
77 background: linear-gradient(
78 calc(90deg + var(--kng-iis-angle)),
79 transparent 0%,
80 transparent calc(50% - var(--kng-iis-sheen-width) / 2 - var(--kng-iis-softness)),
81 rgba(var(--kng-iis-sheen-color-rgb, 255, 255, 255), calc(var(--computed-opacity) * 0.3)) calc(50% - var(--kng-iis-sheen-width) / 2),
82 rgba(var(--kng-iis-sheen-color-rgb, 255, 255, 255), var(--computed-opacity)) 50%,
83 rgba(var(--kng-iis-sheen-color-rgb, 255, 255, 255), calc(var(--computed-opacity) * 0.3)) calc(50% + var(--kng-iis-sheen-width) / 2),
84 transparent calc(50% + var(--kng-iis-sheen-width) / 2 + var(--kng-iis-softness)),
85 transparent 100%
86 );
87 }
88
89 /* Fallback using simple linear gradient */
90 .kng-iis--preset-silk-soft .kng-iis__sheen {
91 background: linear-gradient(
92 calc(90deg + var(--kng-iis-angle)),
93 transparent 0%,
94 transparent 20%,
95 var(--kng-iis-sheen-color) 50%,
96 transparent 80%,
97 transparent 100%
98 );
99 opacity: 0;
100 }
101
102 /* ==========================================================================
103 Preset: Gloss Sharp (Narrow & Bright)
104 ========================================================================== */
105
106 .kng-iis--preset-gloss-sharp .kng-iis__sheen {
107 background: linear-gradient(
108 calc(90deg + var(--kng-iis-angle)),
109 transparent 0%,
110 transparent 40%,
111 var(--kng-iis-sheen-color) 48%,
112 var(--kng-iis-sheen-color) 52%,
113 transparent 60%,
114 transparent 100%
115 );
116 }
117
118 /* ==========================================================================
119 Preset: Dual Streak (Two Lines)
120 ========================================================================== */
121
122 .kng-iis--preset-dual-streak .kng-iis__sheen {
123 background: linear-gradient(
124 calc(90deg + var(--kng-iis-angle)),
125 transparent 0%,
126 transparent 25%,
127 var(--kng-iis-sheen-color) 30%,
128 transparent 35%,
129 transparent 65%,
130 var(--kng-iis-sheen-color) 70%,
131 transparent 75%,
132 transparent 100%
133 );
134 }
135
136 /* ==========================================================================
137 Animation Keyframes
138 ========================================================================== */
139
140 /* Left to Right (default) */
141 @keyframes kng-iis-sheen-pass {
142 0% {
143 transform: translateX(-150%);
144 opacity: var(--computed-opacity, 0.5);
145 }
146 100% {
147 transform: translateX(150%);
148 opacity: var(--computed-opacity, 0.5);
149 }
150 }
151
152 /* Right to Left */
153 @keyframes kng-iis-sheen-pass-rtl {
154 0% {
155 transform: translateX(150%);
156 opacity: var(--computed-opacity, 0.5);
157 }
158 100% {
159 transform: translateX(-150%);
160 opacity: var(--computed-opacity, 0.5);
161 }
162 }
163
164 /* Top to Bottom */
165 @keyframes kng-iis-sheen-pass-ttb {
166 0% {
167 transform: translateY(-150%);
168 opacity: var(--computed-opacity, 0.5);
169 }
170 100% {
171 transform: translateY(150%);
172 opacity: var(--computed-opacity, 0.5);
173 }
174 }
175
176 /* Bottom to Top */
177 @keyframes kng-iis-sheen-pass-btt {
178 0% {
179 transform: translateY(150%);
180 opacity: var(--computed-opacity, 0.5);
181 }
182 100% {
183 transform: translateY(-150%);
184 opacity: var(--computed-opacity, 0.5);
185 }
186 }
187
188 @keyframes kng-iis-sheen-pass-loop {
189 0% {
190 transform: translateX(-150%);
191 opacity: var(--computed-opacity, 0.5);
192 }
193 50% {
194 transform: translateX(150%);
195 opacity: var(--computed-opacity, 0.5);
196 }
197 50.01% {
198 transform: translateX(-150%);
199 opacity: 0;
200 }
201 100% {
202 transform: translateX(-150%);
203 opacity: 0;
204 }
205 }
206
207 /* ==========================================================================
208 Animation Directions
209 ========================================================================== */
210
211 /* Default: Left to Right */
212 .kng-iis--direction-left-right .kng-iis__sheen {
213 transform: translateX(-150%);
214 }
215
216 /* Right to Left */
217 .kng-iis--direction-right-left .kng-iis__sheen {
218 transform: translateX(150%);
219 }
220
221 /* Top to Bottom */
222 .kng-iis--direction-top-bottom .kng-iis__sheen {
223 transform: translateY(-150%);
224 }
225
226 /* Bottom to Top */
227 .kng-iis--direction-bottom-top .kng-iis__sheen {
228 transform: translateY(150%);
229 }
230
231 /* ==========================================================================
232 Hover Trigger
233 ========================================================================== */
234
235 /* Play once on hover - Left to Right (default) */
236 .kng-iis--trigger-hover.kng-iis--repeat-once:hover .kng-iis__sheen,
237 .kng-iis--direction-left-right.kng-iis--trigger-hover.kng-iis--repeat-once:hover .kng-iis__sheen {
238 animation: kng-iis-sheen-pass var(--kng-iis-duration) forwards;
239 }
240
241 /* Play once on hover - Right to Left */
242 .kng-iis--direction-right-left.kng-iis--trigger-hover.kng-iis--repeat-once:hover .kng-iis__sheen {
243 animation: kng-iis-sheen-pass-rtl var(--kng-iis-duration) forwards;
244 }
245
246 /* Play once on hover - Top to Bottom */
247 .kng-iis--direction-top-bottom.kng-iis--trigger-hover.kng-iis--repeat-once:hover .kng-iis__sheen {
248 animation: kng-iis-sheen-pass-ttb var(--kng-iis-duration) forwards;
249 }
250
251 /* Play once on hover - Bottom to Top */
252 .kng-iis--direction-bottom-top.kng-iis--trigger-hover.kng-iis--repeat-once:hover .kng-iis__sheen {
253 animation: kng-iis-sheen-pass-btt var(--kng-iis-duration) forwards;
254 }
255
256 /* Loop while hovering */
257 .kng-iis--trigger-hover.kng-iis--repeat-loop:hover .kng-iis__sheen,
258 .kng-iis--direction-left-right.kng-iis--trigger-hover.kng-iis--repeat-loop:hover .kng-iis__sheen {
259 animation: kng-iis-sheen-pass var(--kng-iis-duration) infinite;
260 }
261
262 .kng-iis--direction-right-left.kng-iis--trigger-hover.kng-iis--repeat-loop:hover .kng-iis__sheen {
263 animation: kng-iis-sheen-pass-rtl var(--kng-iis-duration) infinite;
264 }
265
266 .kng-iis--direction-top-bottom.kng-iis--trigger-hover.kng-iis--repeat-loop:hover .kng-iis__sheen {
267 animation: kng-iis-sheen-pass-ttb var(--kng-iis-duration) infinite;
268 }
269
270 .kng-iis--direction-bottom-top.kng-iis--trigger-hover.kng-iis--repeat-loop:hover .kng-iis__sheen {
271 animation: kng-iis-sheen-pass-btt var(--kng-iis-duration) infinite;
272 }
273
274 /* Always playing */
275 .kng-iis--trigger-always .kng-iis__sheen,
276 .kng-iis--direction-left-right.kng-iis--trigger-always .kng-iis__sheen {
277 animation: kng-iis-sheen-pass calc(var(--kng-iis-duration) * 3) infinite;
278 }
279
280 .kng-iis--direction-right-left.kng-iis--trigger-always .kng-iis__sheen {
281 animation: kng-iis-sheen-pass-rtl calc(var(--kng-iis-duration) * 3) infinite;
282 }
283
284 .kng-iis--direction-top-bottom.kng-iis--trigger-always .kng-iis__sheen {
285 animation: kng-iis-sheen-pass-ttb calc(var(--kng-iis-duration) * 3) infinite;
286 }
287
288 .kng-iis--direction-bottom-top.kng-iis--trigger-always .kng-iis__sheen {
289 animation: kng-iis-sheen-pass-btt calc(var(--kng-iis-duration) * 3) infinite;
290 }
291
292 /* ==========================================================================
293 Layered Sheen (Pro)
294 ========================================================================== */
295
296 .kng-iis__sheen--layer2 {
297 z-index: 3;
298 }
299
300 .kng-iis__sheen--layer3 {
301 z-index: 4;
302 }
303
304 /* Layer styles */
305 .kng-iis__sheen--soft {
306 background: linear-gradient(
307 calc(90deg + var(--kng-iis-angle)),
308 transparent 0%,
309 transparent 20%,
310 var(--kng-iis-sheen-color) 50%,
311 transparent 80%,
312 transparent 100%
313 );
314 }
315
316 .kng-iis__sheen--sharp {
317 background: linear-gradient(
318 calc(90deg + var(--kng-iis-angle)),
319 transparent 0%,
320 transparent 45%,
321 var(--kng-iis-sheen-color) 50%,
322 transparent 55%,
323 transparent 100%
324 );
325 }
326
327 /* Layer widths via CSS variables */
328 .kng-iis--layers-2 .kng-iis__sheen--layer2,
329 .kng-iis--layers-3 .kng-iis__sheen--layer2 {
330 width: var(--kng-iis-layer2-width);
331 left: calc((100% - var(--kng-iis-layer2-width)) / 2);
332 }
333
334 .kng-iis--layers-3 .kng-iis__sheen--layer3 {
335 width: var(--kng-iis-layer3-width);
336 left: calc((100% - var(--kng-iis-layer3-width)) / 2);
337 }
338
339 /* ==========================================================================
340 Follow Cursor Mode (Pro)
341 ========================================================================== */
342
343 .kng-iis--follow .kng-iis__sheen {
344 animation: none;
345 transform: translateX(-50%) translateY(-50%);
346 opacity: 0;
347 transition: opacity 0.3s ease, transform 0.1s ease-out;
348 }
349
350 .kng-iis--follow:hover .kng-iis__sheen,
351 .kng-iis--follow.kng-iis--following .kng-iis__sheen {
352 opacity: var(--computed-opacity, 0.5);
353 }
354
355 /* Radial gradient for follow mode */
356 .kng-iis--follow .kng-iis__sheen {
357 background: radial-gradient(
358 ellipse 30% 100% at center,
359 var(--kng-iis-sheen-color) 0%,
360 transparent 100%
361 );
362 }
363
364 /* ==========================================================================
365 Mask Shapes (Pro)
366 ========================================================================== */
367
368 .kng-iis--mask-circle {
369 border-radius: 50%;
370 }
371
372 .kng-iis--mask-circle .kng-iis__media {
373 border-radius: 50%;
374 }
375
376 /* Rounded handled via selectors in PHP */
377
378 /* ==========================================================================
379 Mobile Fallback (Pro)
380 ========================================================================== */
381
382 @media (hover: none) and (pointer: coarse) {
383 /* Disable sheen */
384 .kng-iis--mobile-disable .kng-iis__sheen {
385 display: none;
386 }
387
388 /* Static highlight */
389 .kng-iis--mobile-static .kng-iis__sheen {
390 animation: none;
391 transform: translateX(calc(var(--kng-iis-static-pos) - 50%));
392 opacity: 0.2;
393 }
394
395 /* Reveal on scroll - handled by JS with IntersectionObserver */
396 .kng-iis--mobile-reveal .kng-iis__sheen {
397 animation: none;
398 transform: translateX(-150%);
399 opacity: 0;
400 }
401
402 .kng-iis--mobile-reveal.kng-iis--in-view .kng-iis__sheen {
403 animation: kng-iis-sheen-pass var(--kng-iis-duration) ease-out forwards;
404 }
405 }
406
407 /* ==========================================================================
408 Reduced Motion
409 ========================================================================== */
410
411 @media (prefers-reduced-motion: reduce) {
412 .kng-iis--reduced-disable .kng-iis__sheen {
413 animation: none;
414 display: none;
415 }
416
417 .kng-iis--reduced-static .kng-iis__sheen {
418 animation: none;
419 transform: translateX(0);
420 opacity: 0.15;
421 }
422 }
423
424 /* ==========================================================================
425 Focus Trigger (Pro)
426 ========================================================================== */
427
428 .kng-iis:focus-within .kng-iis__sheen {
429 animation: kng-iis-sheen-pass var(--kng-iis-duration) ease-out forwards;
430 }
431
432 /* ==========================================================================
433 Card Mode
434 ========================================================================== */
435
436 .kng-iis--mode-card {
437 display: flex;
438 flex-direction: column;
439 }
440
441 .kng-iis__content {
442 padding: 16px;
443 }
444
445 .kng-iis__content--overlay {
446 position: absolute;
447 left: 0;
448 right: 0;
449 z-index: 5;
450 background: linear-gradient(to top, rgba(0, 0, 0, 0.7), transparent);
451 padding: 24px 16px 16px;
452 color: #ffffff;
453 }
454
455 .kng-iis__content--top {
456 top: 0;
457 bottom: auto;
458 background: linear-gradient(to bottom, rgba(0, 0, 0, 0.7), transparent);
459 padding: 16px 16px 24px;
460 }
461
462 .kng-iis__content--center {
463 top: 50%;
464 bottom: auto;
465 transform: translateY(-50%);
466 background: rgba(0, 0, 0, 0.5);
467 }
468
469 .kng-iis__content--bottom {
470 bottom: 0;
471 top: auto;
472 }
473
474 .kng-iis__title {
475 margin: 0 0 8px;
476 font-size: 1.25rem;
477 font-weight: 600;
478 line-height: 1.3;
479 }
480
481 .kng-iis__description {
482 margin: 0 0 12px;
483 font-size: 0.9rem;
484 line-height: 1.5;
485 opacity: 0.9;
486 }
487
488 .kng-iis__button {
489 display: inline-block;
490 padding: 10px 20px;
491 font-size: 0.875rem;
492 font-weight: 500;
493 color: #ffffff;
494 background-color: #3b82f6;
495 border: none;
496 border-radius: 6px;
497 text-decoration: none;
498 cursor: pointer;
499 transition: background-color 0.2s ease, transform 0.15s ease;
500 }
501
502 .kng-iis__button:hover {
503 background-color: #2563eb;
504 transform: translateY(-1px);
505 }
506
507 .kng-iis__button:focus-visible {
508 outline: 2px solid #3b82f6;
509 outline-offset: 2px;
510 }
511
512 /* ==========================================================================
513 Editor Styles
514 ========================================================================== */
515
516 body.elementor-editor-active .kng-iis__sheen {
517 /* Show subtle preview in editor */
518 opacity: 0.1;
519 transform: translateX(0);
520 }
521
522 /* ==========================================================================
523 Responsive
524 ========================================================================== */
525
526 @media (max-width: 767px) {
527 .kng-iis__title {
528 font-size: 1.1rem;
529 }
530
531 .kng-iis__description {
532 font-size: 0.85rem;
533 }
534
535 .kng-iis__button {
536 padding: 8px 16px;
537 font-size: 0.8rem;
538 }
539 }
540