r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var n=e.placement.split('-')[0],r=e.offsets,p=r.popper,s=r.reference,d=-1!==['left','right'].indexOf(n),a=d?'height':'width',l=d?'Top':'Left',f=l.toLowerCase(),m=d?'left':'top',c=d?'bottom':'right',g=O(i)[a];s[c]-gp[c]&&(e.offsets.popper[f]+=s[f]+g-p[c]);var u=s[f]+s[a]/2-g/2,b=t(e.instance.popper,'margin'+l).replace('px',''),y=u-h(e.offsets.popper)[f]-b;return y=X(V(p[a]-g,y),0),e.arrowElement=i,e.offsets.arrow={},e.offsets.arrow[f]=Math.round(y),e.offsets.arrow[m]='',e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=w(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=L(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case fe.FLIP:p=[i,n];break;case fe.CLOCKWISE:p=K(i);break;case fe.COUNTERCLOCKWISE:p=K(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=L(i);var a=e.offsets.popper,l=e.offsets.reference,f=_,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)f(l.top)||'bottom'===i&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===i&&c||'right'===i&&h||'top'===i&&g||'bottom'===i&&u,y=-1!==['top','bottom'].indexOf(i),w=!!t.flipVariations&&(y&&'start'===r&&c||y&&'end'===r&&h||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),w&&(r=j(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=de({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=N(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=L(t),e.offsets.popper=h(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right
6 | * @copyright Author
7 | *
8 | * @version 2.5.0 (11/03/2018)
9 | */
10 | /**
11 | * Lightcase settings
12 | *
13 | * Note: Override default settings for your project without touching this source code by simply
14 | * defining those variables within a SASS map called '$lightcase-custom'.
15 | *
16 | * // Example usage
17 | * $lightcase-custom: (
18 | * 'breakpoint': 768px
19 | * );
20 | */
21 | @font-face {
22 | font-family: 'lightcase';
23 | src: url("../fonts/lightcase.eot?55356177");
24 | src: url("../fonts/lightcase.eot?55356177#iefix") format("embedded-opentype"), url("../fonts/lightcase.woff?55356177") format("woff"), url("../fonts/lightcase.ttf?55356177") format("truetype"), url("../fonts/lightcase.svg?55356177#lightcase") format("svg");
25 | font-weight: normal;
26 | font-style: normal;
27 | }
28 | /* line 12, ../scss/components/fonts/_font-lightcase.scss */
29 | [class*='lightcase-icon-']:before {
30 | font-family: 'lightcase', sans-serif;
31 | font-style: normal;
32 | font-weight: normal;
33 | speak: none;
34 | display: inline-block;
35 | text-decoration: inherit;
36 | width: 1em;
37 | text-align: center;
38 | /* For safety - reset parent styles, that can break glyph codes*/
39 | font-variant: normal;
40 | text-transform: none;
41 | /* fix buttons height, for twitter bootstrap */
42 | line-height: 1em;
43 | /* Uncomment for 3D effect */
44 | /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
45 | }
46 |
47 | /* Codes */
48 | /* line 35, ../scss/components/fonts/_font-lightcase.scss */
49 | .lightcase-icon-play:before {
50 | content: '\e800';
51 | }
52 |
53 | /* line 36, ../scss/components/fonts/_font-lightcase.scss */
54 | .lightcase-icon-pause:before {
55 | content: '\e801';
56 | }
57 |
58 | /* line 37, ../scss/components/fonts/_font-lightcase.scss */
59 | .lightcase-icon-close:before {
60 | content: '\e802';
61 | }
62 |
63 | /* line 38, ../scss/components/fonts/_font-lightcase.scss */
64 | .lightcase-icon-prev:before {
65 | content: '\e803';
66 | }
67 |
68 | /* line 39, ../scss/components/fonts/_font-lightcase.scss */
69 | .lightcase-icon-next:before {
70 | content: '\e804';
71 | }
72 |
73 | /* line 40, ../scss/components/fonts/_font-lightcase.scss */
74 | .lightcase-icon-spin:before {
75 | content: '\e805';
76 | }
77 |
78 | /**
79 | * Mixin providing icon defaults to be used on top of font-lightcase.
80 | *
81 | * Example usage:
82 | * @include icon(#e9e9e9)
83 | */
84 | /**
85 | * Mixin providing icon defaults including a hover status to be used
86 | * on top of font-lightcase.
87 | *
88 | * Example usage:
89 | * @include icon-hover(#e9e9e9, #fff)
90 | */
91 | /**
92 | * Provides natural content overflow behavior and scrolling support
93 | * even so for touch devices.
94 | *
95 | * Example usage:
96 | * @include overflow()
97 | */
98 | /**
99 | * Neutralizes/resets dimensions including width, height, position as well as margins,
100 | * paddings and styles. Used to enforce a neutral and unstyled look and behavoir!
101 | *
102 | * Example usage:
103 | * @include clear(true)
104 | *
105 | * @param boolean $important
106 | */
107 | @-webkit-keyframes lightcase-spin {
108 | 0% {
109 | -webkit-transform: rotate(0deg);
110 | -moz-transform: rotate(0deg);
111 | -o-transform: rotate(0deg);
112 | transform: rotate(0deg);
113 | }
114 | 100% {
115 | -webkit-transform: rotate(359deg);
116 | -moz-transform: rotate(359deg);
117 | -o-transform: rotate(359deg);
118 | transform: rotate(359deg);
119 | }
120 | }
121 | @-moz-keyframes lightcase-spin {
122 | 0% {
123 | -webkit-transform: rotate(0deg);
124 | -moz-transform: rotate(0deg);
125 | -o-transform: rotate(0deg);
126 | transform: rotate(0deg);
127 | }
128 | 100% {
129 | -webkit-transform: rotate(359deg);
130 | -moz-transform: rotate(359deg);
131 | -o-transform: rotate(359deg);
132 | transform: rotate(359deg);
133 | }
134 | }
135 | @-o-keyframes lightcase-spin {
136 | 0% {
137 | -webkit-transform: rotate(0deg);
138 | -moz-transform: rotate(0deg);
139 | -o-transform: rotate(0deg);
140 | transform: rotate(0deg);
141 | }
142 | 100% {
143 | -webkit-transform: rotate(359deg);
144 | -moz-transform: rotate(359deg);
145 | -o-transform: rotate(359deg);
146 | transform: rotate(359deg);
147 | }
148 | }
149 | @-ms-keyframes lightcase-spin {
150 | 0% {
151 | -webkit-transform: rotate(0deg);
152 | -moz-transform: rotate(0deg);
153 | -o-transform: rotate(0deg);
154 | transform: rotate(0deg);
155 | }
156 | 100% {
157 | -webkit-transform: rotate(359deg);
158 | -moz-transform: rotate(359deg);
159 | -o-transform: rotate(359deg);
160 | transform: rotate(359deg);
161 | }
162 | }
163 | @keyframes lightcase-spin {
164 | 0% {
165 | -webkit-transform: rotate(0deg);
166 | -moz-transform: rotate(0deg);
167 | -o-transform: rotate(0deg);
168 | transform: rotate(0deg);
169 | }
170 | 100% {
171 | -webkit-transform: rotate(359deg);
172 | -moz-transform: rotate(359deg);
173 | -o-transform: rotate(359deg);
174 | transform: rotate(359deg);
175 | }
176 | }
177 | /* line 1, ../scss/components/modules/_case.scss */
178 | #lightcase-case {
179 | display: none;
180 | position: fixed;
181 | z-index: 2002;
182 | top: 50%;
183 | left: 50%;
184 | font-family: arial, sans-serif;
185 | font-size: 13px;
186 | line-height: 1.5;
187 | text-align: left;
188 | text-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
189 | }
190 | @media screen and (max-width: 640px) {
191 | /* line 16, ../scss/components/modules/_case.scss */
192 | html[data-lc-type=inline] #lightcase-case, html[data-lc-type=ajax] #lightcase-case {
193 | position: fixed !important;
194 | top: 0 !important;
195 | left: 0 !important;
196 | right: 0 !important;
197 | bottom: 0 !important;
198 | margin: 0 !important;
199 | padding: 55px 0 70px 0;
200 | width: 100% !important;
201 | height: 100% !important;
202 | overflow: auto !important;
203 | }
204 | }
205 |
206 | @media screen and (min-width: 641px) {
207 | /* line 4, ../scss/components/modules/_content.scss */
208 | html:not([data-lc-type=error]) #lightcase-content {
209 | position: relative;
210 | z-index: 1;
211 | text-shadow: none;
212 | background-color: #fff;
213 | -webkit-box-shadow: 0 0 30px rgba(0, 0, 0, 0.5);
214 | -moz-box-shadow: 0 0 30px rgba(0, 0, 0, 0.5);
215 | -o-box-shadow: 0 0 30px rgba(0, 0, 0, 0.5);
216 | box-shadow: 0 0 30px rgba(0, 0, 0, 0.5);
217 | -webkit-backface-visibility: hidden;
218 | }
219 | }
220 | @media screen and (min-width: 641px) {
221 | /* line 23, ../scss/components/modules/_content.scss */
222 | html[data-lc-type=image] #lightcase-content, html[data-lc-type=video] #lightcase-content {
223 | background-color: #333;
224 | }
225 | }
226 | /* line 31, ../scss/components/modules/_content.scss */
227 | html[data-lc-type=inline] #lightcase-content, html[data-lc-type=ajax] #lightcase-content, html[data-lc-type=error] #lightcase-content {
228 | -webkit-box-shadow: none;
229 | -moz-box-shadow: none;
230 | -o-box-shadow: none;
231 | box-shadow: none;
232 | }
233 | @media screen and (max-width: 640px) {
234 | /* line 31, ../scss/components/modules/_content.scss */
235 | html[data-lc-type=inline] #lightcase-content, html[data-lc-type=ajax] #lightcase-content, html[data-lc-type=error] #lightcase-content {
236 | position: relative !important;
237 | top: auto !important;
238 | left: auto !important;
239 | width: auto !important;
240 | height: auto !important;
241 | margin: 0 !important;
242 | padding: 0 !important;
243 | border: none !important;
244 | background: none !important;
245 | }
246 | }
247 | /* line 43, ../scss/components/modules/_content.scss */
248 | html[data-lc-type=inline] #lightcase-content .lightcase-contentInner, html[data-lc-type=ajax] #lightcase-content .lightcase-contentInner, html[data-lc-type=error] #lightcase-content .lightcase-contentInner {
249 | -webkit-box-sizing: border-box;
250 | -moz-box-sizing: border-box;
251 | -o-box-sizing: border-box;
252 | box-sizing: border-box;
253 | }
254 | @media screen and (max-width: 640px) {
255 | /* line 43, ../scss/components/modules/_content.scss */
256 | html[data-lc-type=inline] #lightcase-content .lightcase-contentInner, html[data-lc-type=ajax] #lightcase-content .lightcase-contentInner, html[data-lc-type=error] #lightcase-content .lightcase-contentInner {
257 | padding: 15px;
258 | }
259 | /* line 52, ../scss/components/modules/_content.scss */
260 | html[data-lc-type=inline] #lightcase-content .lightcase-contentInner, html[data-lc-type=inline] #lightcase-content .lightcase-contentInner > *, html[data-lc-type=ajax] #lightcase-content .lightcase-contentInner, html[data-lc-type=ajax] #lightcase-content .lightcase-contentInner > *, html[data-lc-type=error] #lightcase-content .lightcase-contentInner, html[data-lc-type=error] #lightcase-content .lightcase-contentInner > * {
261 | width: 100% !important;
262 | max-width: none !important;
263 | }
264 | /* line 59, ../scss/components/modules/_content.scss */
265 | html[data-lc-type=inline] #lightcase-content .lightcase-contentInner > *:not(iframe), html[data-lc-type=ajax] #lightcase-content .lightcase-contentInner > *:not(iframe), html[data-lc-type=error] #lightcase-content .lightcase-contentInner > *:not(iframe) {
266 | height: auto !important;
267 | max-height: none !important;
268 | }
269 | }
270 | @media screen and (max-width: 640px) {
271 | /* line 70, ../scss/components/modules/_content.scss */
272 | html.lightcase-isMobileDevice[data-lc-type=iframe] #lightcase-content .lightcase-contentInner iframe {
273 | overflow: auto;
274 | -webkit-overflow-scrolling: touch;
275 | }
276 | }
277 | @media screen and (max-width: 640px) and (min-width: 641px) {
278 | /* line 74, ../scss/components/modules/_content.scss */
279 | html[data-lc-type=image] #lightcase-content .lightcase-contentInner, html[data-lc-type=video] #lightcase-content .lightcase-contentInner {
280 | line-height: 0.75;
281 | }
282 | }
283 |
284 | /* line 82, ../scss/components/modules/_content.scss */
285 | html[data-lc-type=image] #lightcase-content .lightcase-contentInner {
286 | position: relative;
287 | overflow: hidden !important;
288 | }
289 | @media screen and (max-width: 640px) {
290 | /* line 91, ../scss/components/modules/_content.scss */
291 | html[data-lc-type=inline] #lightcase-content .lightcase-contentInner .lightcase-inlineWrap, html[data-lc-type=ajax] #lightcase-content .lightcase-contentInner .lightcase-inlineWrap, html[data-lc-type=error] #lightcase-content .lightcase-contentInner .lightcase-inlineWrap {
292 | position: relative !important;
293 | top: auto !important;
294 | left: auto !important;
295 | width: auto !important;
296 | height: auto !important;
297 | margin: 0 !important;
298 | padding: 0 !important;
299 | border: none !important;
300 | background: none !important;
301 | }
302 | }
303 | @media screen and (min-width: 641px) {
304 | /* line 100, ../scss/components/modules/_content.scss */
305 | html:not([data-lc-type=error]) #lightcase-content .lightcase-contentInner .lightcase-inlineWrap {
306 | padding: 30px;
307 | overflow: auto;
308 | -webkit-box-sizing: border-box;
309 | -moz-box-sizing: border-box;
310 | -o-box-sizing: border-box;
311 | box-sizing: border-box;
312 | }
313 | }
314 | @media screen and (max-width: 640px) {
315 | /* line 117, ../scss/components/modules/_content.scss */
316 | #lightcase-content h1, #lightcase-content h2, #lightcase-content h3, #lightcase-content h4, #lightcase-content h5, #lightcase-content h6, #lightcase-content p {
317 | color: #aaa;
318 | }
319 | }
320 | @media screen and (min-width: 641px) {
321 | /* line 117, ../scss/components/modules/_content.scss */
322 | #lightcase-content h1, #lightcase-content h2, #lightcase-content h3, #lightcase-content h4, #lightcase-content h5, #lightcase-content h6, #lightcase-content p {
323 | color: #333;
324 | }
325 | }
326 |
327 | /* line 3, ../scss/components/modules/_error.scss */
328 | #lightcase-case p.lightcase-error {
329 | margin: 0;
330 | font-size: 17px;
331 | text-align: center;
332 | white-space: nowrap;
333 | overflow: hidden;
334 | text-overflow: ellipsis;
335 | color: #aaa;
336 | }
337 | @media screen and (max-width: 640px) {
338 | /* line 3, ../scss/components/modules/_error.scss */
339 | #lightcase-case p.lightcase-error {
340 | padding: 30px 0;
341 | }
342 | }
343 | @media screen and (min-width: 641px) {
344 | /* line 3, ../scss/components/modules/_error.scss */
345 | #lightcase-case p.lightcase-error {
346 | padding: 0;
347 | }
348 | }
349 |
350 | /* line 4, ../scss/components/modules/_global.scss */
351 | .lightcase-open body {
352 | overflow: hidden;
353 | }
354 | /* line 8, ../scss/components/modules/_global.scss */
355 | .lightcase-isMobileDevice .lightcase-open body {
356 | max-width: 100%;
357 | max-height: 100%;
358 | }
359 |
360 | /* line 1, ../scss/components/modules/_info.scss */
361 | #lightcase-info {
362 | position: absolute;
363 | padding-top: 15px;
364 | }
365 | /* line 9, ../scss/components/modules/_info.scss */
366 | #lightcase-info #lightcase-title,
367 | #lightcase-info #lightcase-caption {
368 | margin: 0;
369 | padding: 0;
370 | line-height: 1.5;
371 | font-weight: normal;
372 | text-overflow: ellipsis;
373 | }
374 | /* line 19, ../scss/components/modules/_info.scss */
375 | #lightcase-info #lightcase-title {
376 | font-size: 17px;
377 | color: #aaa;
378 | }
379 | @media screen and (max-width: 640px) {
380 | /* line 19, ../scss/components/modules/_info.scss */
381 | #lightcase-info #lightcase-title {
382 | position: fixed;
383 | top: 10px;
384 | left: 0;
385 | max-width: 87.5%;
386 | padding: 5px 15px;
387 | background: #333;
388 | }
389 | }
390 | /* line 33, ../scss/components/modules/_info.scss */
391 | #lightcase-info #lightcase-caption {
392 | clear: both;
393 | font-size: 13px;
394 | color: #aaa;
395 | }
396 | /* line 39, ../scss/components/modules/_info.scss */
397 | #lightcase-info #lightcase-sequenceInfo {
398 | font-size: 11px;
399 | color: #aaa;
400 | }
401 | @media screen and (max-width: 640px) {
402 | /* line 45, ../scss/components/modules/_info.scss */
403 | .lightcase-fullScreenMode #lightcase-info {
404 | padding-left: 15px;
405 | padding-right: 15px;
406 | }
407 | /* line 51, ../scss/components/modules/_info.scss */
408 | html:not([data-lc-type=image]):not([data-lc-type=video]):not([data-lc-type=flash]):not([data-lc-type=error]) #lightcase-info {
409 | position: static;
410 | }
411 | }
412 |
413 | /* line 1, ../scss/components/modules/_loading.scss */
414 | #lightcase-loading {
415 | position: fixed;
416 | z-index: 9999;
417 | width: 1.123em;
418 | height: auto;
419 | font-size: 38px;
420 | line-height: 1;
421 | text-align: center;
422 | text-shadow: none;
423 | position: fixed;
424 | z-index: 2001;
425 | top: 50%;
426 | left: 50%;
427 | margin-top: -0.5em;
428 | margin-left: -0.5em;
429 | opacity: 1;
430 | font-size: 32px;
431 | text-shadow: 0 0 15px #fff;
432 | -moz-transform-origin: 50% 53%;
433 | -webkit-animation: lightcase-spin 0.5s infinite linear;
434 | -moz-animation: lightcase-spin 0.5s infinite linear;
435 | -o-animation: lightcase-spin 0.5s infinite linear;
436 | animation: lightcase-spin 0.5s infinite linear;
437 | }
438 | /* line 20, ../scss/components/mixins/_presets.scss */
439 | #lightcase-loading, #lightcase-loading:focus {
440 | text-decoration: none;
441 | color: #fff;
442 | -webkit-tap-highlight-color: transparent;
443 | -webkit-transition: color, opacity, ease-in-out 0.25s;
444 | -moz-transition: color, opacity, ease-in-out 0.25s;
445 | -o-transition: color, opacity, ease-in-out 0.25s;
446 | transition: color, opacity, ease-in-out 0.25s;
447 | }
448 | /* line 32, ../scss/components/mixins/_presets.scss */
449 | #lightcase-loading > span {
450 | display: inline-block;
451 | text-indent: -9999px;
452 | }
453 |
454 | /* line 2, ../scss/components/modules/_navigation.scss */
455 | a[class*='lightcase-icon-'] {
456 | position: fixed;
457 | z-index: 9999;
458 | width: 1.123em;
459 | height: auto;
460 | font-size: 38px;
461 | line-height: 1;
462 | text-align: center;
463 | text-shadow: none;
464 | outline: none;
465 | cursor: pointer;
466 | }
467 | /* line 20, ../scss/components/mixins/_presets.scss */
468 | a[class*='lightcase-icon-'], a[class*='lightcase-icon-']:focus {
469 | text-decoration: none;
470 | color: rgba(255, 255, 255, 0.6);
471 | -webkit-tap-highlight-color: transparent;
472 | -webkit-transition: color, opacity, ease-in-out 0.25s;
473 | -moz-transition: color, opacity, ease-in-out 0.25s;
474 | -o-transition: color, opacity, ease-in-out 0.25s;
475 | transition: color, opacity, ease-in-out 0.25s;
476 | }
477 | /* line 32, ../scss/components/mixins/_presets.scss */
478 | a[class*='lightcase-icon-'] > span {
479 | display: inline-block;
480 | text-indent: -9999px;
481 | }
482 | /* line 49, ../scss/components/mixins/_presets.scss */
483 | a[class*='lightcase-icon-']:hover {
484 | color: white;
485 | text-shadow: 0 0 15px white;
486 | }
487 | /* line 10, ../scss/components/modules/_navigation.scss */
488 | .lightcase-isMobileDevice a[class*='lightcase-icon-']:hover {
489 | color: #aaa;
490 | text-shadow: none;
491 | }
492 | /* line 17, ../scss/components/modules/_navigation.scss */
493 | a[class*='lightcase-icon-'].lightcase-icon-close {
494 | position: fixed;
495 | top: 15px;
496 | right: 15px;
497 | bottom: auto;
498 | margin: 0;
499 | opacity: 0;
500 | outline: none;
501 | }
502 | /* line 28, ../scss/components/modules/_navigation.scss */
503 | a[class*='lightcase-icon-'].lightcase-icon-prev {
504 | left: 15px;
505 | }
506 | /* line 33, ../scss/components/modules/_navigation.scss */
507 | a[class*='lightcase-icon-'].lightcase-icon-next {
508 | right: 15px;
509 | }
510 | /* line 38, ../scss/components/modules/_navigation.scss */
511 | a[class*='lightcase-icon-'].lightcase-icon-pause, a[class*='lightcase-icon-'].lightcase-icon-play {
512 | left: 50%;
513 | margin-left: -0.5em;
514 | }
515 | @media screen and (min-width: 641px) {
516 | /* line 38, ../scss/components/modules/_navigation.scss */
517 | a[class*='lightcase-icon-'].lightcase-icon-pause, a[class*='lightcase-icon-'].lightcase-icon-play {
518 | opacity: 0;
519 | }
520 | }
521 | @media screen and (max-width: 640px) {
522 | /* line 2, ../scss/components/modules/_navigation.scss */
523 | a[class*='lightcase-icon-'] {
524 | bottom: 15px;
525 | font-size: 24px;
526 | }
527 | }
528 | @media screen and (min-width: 641px) {
529 | /* line 2, ../scss/components/modules/_navigation.scss */
530 | a[class*='lightcase-icon-'] {
531 | bottom: 50%;
532 | margin-bottom: -0.5em;
533 | }
534 | /* line 57, ../scss/components/modules/_navigation.scss */
535 | a[class*='lightcase-icon-']:hover, #lightcase-case:hover ~ a[class*='lightcase-icon-'] {
536 | opacity: 1;
537 | }
538 | }
539 |
540 | /* line 1, ../scss/components/modules/_overlay.scss */
541 | #lightcase-overlay {
542 | display: none;
543 | width: 100%;
544 | min-height: 100%;
545 | position: fixed;
546 | z-index: 2000;
547 | top: -9999px;
548 | bottom: -9999px;
549 | left: 0;
550 | background: #333;
551 | }
552 | @media screen and (max-width: 640px) {
553 | /* line 1, ../scss/components/modules/_overlay.scss */
554 | #lightcase-overlay {
555 | opacity: 1 !important;
556 | }
557 | }
558 |
--------------------------------------------------------------------------------
/css/style.min.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Roxy: Bootstrap template by GettTemplates.com
3 | * https://gettemplates.co/roxy
4 | */
5 | html, body {
6 | width: 100%;
7 | overflow-x: hidden; }
8 |
9 | body {
10 | font-family: 'Lato', sans-serif;
11 | font-weight: 300; }
12 |
13 | h1,
14 | h2,
15 | h3,
16 | h4,
17 | h5,
18 | h6,
19 | .h1,
20 | .h2,
21 | .h3,
22 | .h4,
23 | .h5,
24 | .h6 {
25 | font-family: 'Work Sans', sans-serif;
26 | margin-top: 0; }
27 |
28 | a {
29 | color: #ff00cc;
30 | transition: all .3s ease-in-out; }
31 |
32 | a:focus,
33 | button:focus {
34 | outline: none; }
35 |
36 | .btn:hover,
37 | a:hover {
38 | text-decoration: none;
39 | color: #333399; }
40 |
41 | img {
42 | max-width: 100%; }
43 |
44 | .bg-fixed {
45 | background-size: cover; }
46 |
47 | .bg-grey {
48 | background-color: #f7f8f9; }
49 |
50 | .fs-40 {
51 | font-size: 40px; }
52 |
53 | section {
54 | position: relative; }
55 |
56 | .section-content {
57 | padding-top: 80px;
58 | padding-bottom: 80px; }
59 |
60 | .title-wrap,
61 | .section-title {
62 | text-align: center; }
63 |
64 | .shadow {
65 | box-shadow: 0 10px 30px 0 rgba(67, 80, 98, 0.24), 0 2px 4px 0 rgba(67, 80, 98, 0.1) !important; }
66 |
67 | #header-navbar {
68 | position: absolute;
69 | top: 0;
70 | right: 0;
71 | left: 0;
72 | z-index: 11;
73 | transition: all 0.3s cubic-bezier(0.785, 0.135, 0.15, 0.86); }
74 |
75 | .navbar-brand {
76 | font-size: 40px;
77 | color: #000; }
78 |
79 | .navbar-nav .nav-link {
80 | color: #fff;
81 | transition: .3s ease; }
82 |
83 | .navbar-nav:hover li a {
84 | opacity: 0.5; }
85 | .navbar-nav:hover li a:hover {
86 | opacity: 1; }
87 |
88 | .navbar-toggler {
89 | font-size: 2rem;
90 | color: #fff; }
91 |
92 | .jumbotron {
93 | color: #fff;
94 | padding-top: 80px;
95 | padding-bottom: 80px;
96 | background-repeat: no-repeat;
97 | background-size: cover;
98 | background-position: 50% 50%;
99 | position: relative;
100 | border-radius: 0;
101 | margin-bottom: 0;
102 | overflow: hidden;
103 | min-height: 100vh; }
104 | @media (max-width: 767px) and (orientation: landscape) {
105 | .jumbotron {
106 | min-height: 500px; } }
107 | .jumbotron .container {
108 | position: relative;
109 | z-index: 1; }
110 | .jumbotron:before {
111 | position: absolute;
112 | display: block;
113 | content: "";
114 | opacity: 0.8;
115 | top: 0;
116 | bottom: 0;
117 | left: 0;
118 | right: 0;
119 | background: #ff00cc;
120 | /* fallback for old browsers */
121 | background: -webkit-linear-gradient(to right, #333399, #ff00cc);
122 | /* Chrome 10-25, Safari 5.1-6 */
123 | background: linear-gradient(to right, #333399, #ff00cc);
124 | /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ }
125 | .jumbotron h1 {
126 | line-height: .9;
127 | font-weight: bold;
128 | display: inline-block;
129 | border: 15px solid #fff;
130 | padding: 30px;
131 | font-size: 9rem;
132 | opacity: 0;
133 | animation: 1s fadeInFromTop cubic-bezier(0.785, 0.135, 0.15, 0.86) 1s forwards;
134 | animation-delay: .8s; }
135 |
136 | .jumbotron-single h1 {
137 | font-size: 3rem !important; }
138 |
139 | .overlay {
140 | color: #fff; }
141 | .overlay:before {
142 | position: absolute;
143 | display: block;
144 | content: "";
145 | opacity: 0.9;
146 | top: 0;
147 | bottom: 0;
148 | left: 0;
149 | right: 0;
150 | background: #ff00cc;
151 | /* fallback for old browsers */
152 | background: -webkit-linear-gradient(to right, #333399, #ff00cc);
153 | /* Chrome 10-25, Safari 5.1-6 */
154 | background: linear-gradient(to right, #333399, #ff00cc);
155 | /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ }
156 | .overlay.bg-white {
157 | color: #000; }
158 | .overlay.bg-white:before {
159 | background: #fff;
160 | opacity: .7; }
161 |
162 | .text-white {
163 | color: #fff; }
164 |
165 | /*==============================
166 | = BUTTON =
167 | ==============================*/
168 | .btn {
169 | font-size: 14px;
170 | font-weight: 600;
171 | border-radius: 30px;
172 | padding: 9px 25px;
173 | text-transform: capitalize;
174 | transition: all 0.3s ease 0s; }
175 |
176 | .btn-primary {
177 | display: inline-block;
178 | background-color: #ff00cc;
179 | border-color: #ff00cc;
180 | color: #fff; }
181 | .btn-primary:hover {
182 | background-color: #333399;
183 | border-color: #333399;
184 | color: #fff; }
185 |
186 | .btn-outline-primary {
187 | color: #fff;
188 | background-color: transparent;
189 | background-image: none;
190 | border-color: #fff; }
191 | .btn-outline-primary:hover {
192 | background-color: #333399;
193 | border-color: #333399;
194 | color: #fff; }
195 |
196 | .btn-shadow {
197 | box-shadow: -5px 8px 20px 0px rgba(229, 16, 2, 0.15); }
198 |
199 | .btn-icon {
200 | color: #000; }
201 |
202 | .btn-link {
203 | color: #ff00cc; }
204 |
205 | /*===== End of BUTTON ======*/
206 | /*==========================================
207 | = FORM RECTANGLE ETC =
208 | ==========================================*/
209 | .rectangle-1 {
210 | width: 2000px;
211 | height: 400px;
212 | background: #8E2DE2;
213 | background: -webkit-linear-gradient(to right, #4A00E0, #8E2DE2);
214 | background: linear-gradient(to right, #4A00E0, #8E2DE2);
215 | transform-origin: 50% 150% 0;
216 | position: absolute;
217 | left: 0;
218 | z-index: 0;
219 | transform: scale(1) rotate(-10deg); }
220 |
221 | .rectangle-2 {
222 | width: 2000px;
223 | height: 400px;
224 | background: #8E2DE2;
225 | background: -webkit-linear-gradient(to right, #4A00E0, #8E2DE2);
226 | background: linear-gradient(to right, #4A00E0, #8E2DE2);
227 | transform-origin: 65% 100% 0;
228 | position: absolute;
229 | right: 0;
230 | z-index: 0;
231 | transform: scale(1) rotate(50deg); }
232 |
233 | @keyframes fade-in-right {
234 | from {
235 | opacity: 0;
236 | transform: translateX(-100vw) rotate(-15deg); }
237 | to {
238 | opacity: 1;
239 | transform: translateX(0) rotate(-15deg); } }
240 |
241 | @keyframes grow1 {
242 | from {
243 | opacity: 0;
244 | transform: scale(2) rotate(-10deg); }
245 | to {
246 | opacity: 1;
247 | transform: scale(1) rotate(-10deg); } }
248 |
249 | @keyframes grow2 {
250 | from {
251 | opacity: 0;
252 | transform: scale(2) rotate(50deg); }
253 | to {
254 | opacity: 1;
255 | transform: scale(1) rotate(50deg); } }
256 |
257 | @keyframes fadeInFromTop {
258 | from {
259 | opacity: 0;
260 | transform: translateY(-20px); }
261 | to {
262 | opacity: 1;
263 | transform: translateY(0); } }
264 |
265 | .rectangle-1 {
266 | opacity: 0;
267 | animation: grow1 ease 1s forwards;
268 | box-shadow: 0px 20px 30px 0px rgba(9, 21, 54, 0.25) !important; }
269 |
270 | .rectangle-2 {
271 | opacity: 0;
272 | animation: grow2 ease 1s forwards;
273 | box-shadow: 0px 20px 30px 0px rgba(9, 21, 54, 0.25) !important; }
274 |
275 | .rectangle-transparent-1 {
276 | width: 500px;
277 | height: 500px;
278 | border: 15px solid rgba(255, 255, 255, 0.08);
279 | position: absolute;
280 | left: -5%;
281 | bottom: -10%;
282 | display: block;
283 | animation: floating-slow ease-in-out 12s infinite; }
284 |
285 | .rectangle-transparent-2 {
286 | width: 600px;
287 | height: 600px;
288 | border: 15px solid rgba(255, 255, 255, 0.08);
289 | position: absolute;
290 | right: -10%;
291 | top: 5%;
292 | display: block;
293 | animation: floating-slow ease-in-out 12s infinite; }
294 |
295 | .circle-1 {
296 | width: 50px;
297 | height: 50px;
298 | border: 2px solid #fff;
299 | position: absolute;
300 | display: block;
301 | border-radius: 50%;
302 | transform-origin: 50% 50%;
303 | left: 5%;
304 | top: 50%;
305 | animation: fadeInFromTop .5s linear forwards, floating ease 4s infinite; }
306 |
307 | .circle-2 {
308 | width: 70px;
309 | height: 70px;
310 | top: 20%;
311 | left: 83%;
312 | border: 2px solid #fff;
313 | position: absolute;
314 | display: block;
315 | border-radius: 50%;
316 | transform-origin: 50% 50%;
317 | animation: fadeInFromTop .5s linear forwards, floating ease-in-out 4s infinite; }
318 |
319 | .circle-3 {
320 | top: 80%;
321 | right: 25%;
322 | width: 40px;
323 | height: 40px;
324 | border: 2px solid #fff;
325 | position: absolute;
326 | display: block;
327 | border-radius: 50%;
328 | animation: fadeInFromTop .5s linear forwards, floating ease-in-out 4s infinite; }
329 |
330 | @keyframes floating {
331 | 0% {
332 | transform: translate(0%, 0%) rotate(25deg); }
333 | 25% {
334 | transform: translate(5%, 15%) rotate(25deg); }
335 | 50% {
336 | transform: translate(10%, 5%) rotate(25deg); }
337 | 75% {
338 | transform: translate(0%, 15%) rotate(25deg); }
339 | 100% {
340 | transform: translate(0%, 0%) rotate(25deg); } }
341 |
342 | @keyframes floating-slow {
343 | 0% {
344 | transform: translate(0%, 0%) rotate(25deg); }
345 | 25% {
346 | transform: translate(1%, 3%) rotate(25deg); }
347 | 50% {
348 | transform: translate(2%, 1%) rotate(25deg); }
349 | 75% {
350 | transform: translate(0%, 3%) rotate(25deg); }
351 | 100% {
352 | transform: translate(0%, 0%) rotate(25deg); } }
353 |
354 | .triangle {
355 | position: absolute; }
356 |
357 | .triangle-1 {
358 | right: 0;
359 | animation: fadeInFromTop .5s linear forwards, floating ease-in-out 6s infinite; }
360 | .triangle-1 img {
361 | height: 50px;
362 | width: 50px;
363 | transform: rotate(30deg); }
364 |
365 | .triangle-2 {
366 | top: 30%;
367 | left: 20%;
368 | animation: fadeInFromTop .5s linear forwards, floating ease-in-out 8s infinite; }
369 | .triangle-2 img {
370 | width: 75px;
371 | height: 75px;
372 | transform: rotate(15deg); }
373 |
374 | .triangle-3 {
375 | top: 80%;
376 | left: 15%;
377 | animation: fadeInFromTop .5s linear forwards, floating ease-in-out 10s infinite; }
378 | .triangle-3 img {
379 | width: 45px;
380 | height: 45px;
381 | transform: rotate(40deg); }
382 |
383 | .triangle-4 {
384 | top: 60%;
385 | right: 15%;
386 | animation: fadeInFromTop .5s linear forwards, floating ease-in-out 5s infinite; }
387 | .triangle-4 img {
388 | width: 45px;
389 | height: 45px;
390 | transform: rotate(-40deg); }
391 |
392 | /*===== End of FORM RECTANGLE ETC ======*/
393 | /*================================
394 | = FEATURES =
395 | ================================*/
396 | .feature-item {
397 | transition: all .2s ease-in-out 0s !important; }
398 | .feature-item:hover {
399 | transform: translateY(-13px); }
400 |
401 | .progress-bar {
402 | background-color: #ff00cc; }
403 |
404 | /*===== End of FEATURES ======*/
405 | /*=============================
406 | = TESTI =
407 | =============================*/
408 | .testi-img img {
409 | height: 60px;
410 | width: 60px !important;
411 | border-radius: 50%;
412 | display: inline-block !important; }
413 |
414 | .testi-details {
415 | text-align: left; }
416 |
417 | .testi-text {
418 | font-weight: 300;
419 | padding-top: 50px;
420 | padding-bottom: 50px; }
421 |
422 | .testi-icon {
423 | color: #ff00cc; }
424 |
425 | .testi-content {
426 | margin-top: 80px;
427 | padding-bottom: 80px; }
428 |
429 | .testi-item {
430 | margin-left: 15px;
431 | margin-right: 15px; }
432 |
433 | .owl-dot {
434 | position: relative;
435 | display: inline-block;
436 | margin: 0 5px;
437 | width: 12px;
438 | height: 12px;
439 | cursor: pointer; }
440 | .owl-dot span {
441 | top: 0;
442 | left: 0;
443 | width: 100%;
444 | height: 100%;
445 | outline: none;
446 | border-radius: 50%;
447 | background-color: rgba(255, 0, 204, 0.3);
448 | text-indent: -999em;
449 | cursor: pointer;
450 | position: absolute;
451 | box-shadow: 0 0 0 2px rgba(255, 255, 255, 0);
452 | -webkit-transition: box-shadow 0.3s ease, background-color 0.3s ease;
453 | transition: box-shadow 0.3s ease, background-color 0.3s ease; }
454 | .owl-dot.active > span {
455 | background-color: transparent;
456 | box-shadow: 0 0 0 2px #ff00cc; }
457 |
458 | .owl-dots {
459 | position: absolute;
460 | bottom: 0;
461 | display: block;
462 | text-align: center;
463 | left: 0;
464 | right: 0;
465 | clear: both;
466 | padding: 0;
467 | list-style: none;
468 | cursor: default;
469 | -webkit-touch-callout: none;
470 | -webkit-user-select: none;
471 | -khtml-user-select: none;
472 | -moz-user-select: none;
473 | -ms-user-select: none;
474 | user-select: none; }
475 |
476 | .heading-section {
477 | position: relative; }
478 |
479 | /*===== End of TESTI ======*/
480 | /*=================================
481 | = PORTFOLIO =
482 | =================================*/
483 | .filter-button-group {
484 | margin-bottom: 15px; }
485 | .filter-button-group a {
486 | margin: 5px;
487 | cursor: pointer; }
488 |
489 | .grid-link a {
490 | margin: 5px;
491 | font-size: 20px;
492 | color: #000; }
493 |
494 | .grid-portfolio {
495 | overflow: hidden; }
496 |
497 | .gutter-sizer {
498 | width: 2%; }
499 |
500 | .grid-sizer,
501 | .grid-item {
502 | width: 32%; }
503 |
504 | .grid-item {
505 | margin-bottom: 20px;
506 | border-radius: 5px;
507 | overflow: hidden; }
508 | .grid-item:hover .grid-info {
509 | top: 50%;
510 | opacity: 1; }
511 |
512 | .grid-item-wrapper:before {
513 | content: '';
514 | display: block;
515 | background: rgba(255, 255, 255, 0.7);
516 | position: absolute;
517 | top: 0;
518 | right: 0;
519 | bottom: 0;
520 | left: 0;
521 | transition: all .3s ease;
522 | opacity: 0; }
523 |
524 | .grid-item-wrapper:hover:before {
525 | opacity: 1; }
526 |
527 | .grid-info {
528 | position: absolute;
529 | top: 0;
530 | left: 50%;
531 | transform: translate(-50%, -50%);
532 | opacity: 0;
533 | transition: all .3s ease; }
534 |
535 | .lightcase-icon-close:before {
536 | content: '\e870';
537 | font-family: "Linearicons-Free"; }
538 |
539 | .grid-title {
540 | text-align: center; }
541 |
542 | /*===== End of PORTFOLIO ======*/
543 | /*===============================
544 | = SideNav =
545 | ===============================*/
546 | .sidenav {
547 | height: 100%;
548 | width: 0;
549 | position: fixed;
550 | z-index: 1002;
551 | top: 0;
552 | left: 0;
553 | background-color: #000;
554 | overflow-x: hidden;
555 | transition: 0.5s;
556 | padding-top: 60px;
557 | color: #fff; }
558 |
559 | .sidenav-content {
560 | padding: 8px 32px;
561 | transform: translateY(20px);
562 | opacity: 0;
563 | transition: transform 0.5s cubic-bezier(0.785, 0.135, 0.15, 0.86), opacity 0.5s cubic-bezier(0.785, 0.135, 0.15, 0.86); }
564 |
565 | .in .sidenav-content {
566 | transform: translateY(0);
567 | opacity: 1;
568 | transition: transform 0.5s cubic-bezier(0.785, 0.135, 0.15, 0.86) 0.5s, opacity 0.5s 0.5s; }
569 |
570 | .sidenav a {
571 | text-decoration: none;
572 | font-size: 25px;
573 | color: #818181;
574 | display: block;
575 | transition: 0.3s; }
576 |
577 | .sidenav a:hover {
578 | color: #f1f1f1; }
579 |
580 | .sidenav #side-nav-close,
581 | .sidenav #side-search-close {
582 | position: absolute;
583 | top: 0;
584 | right: 25px;
585 | font-size: 36px;
586 | margin-left: 50px; }
587 |
588 | @media screen and (max-height: 450px) {
589 | .sidenav {
590 | padding-top: 15px; }
591 | .sidenav a {
592 | font-size: 18px; } }
593 |
594 | #side-search .form-control {
595 | background-color: transparent; }
596 |
597 | #side-search .input-group-text {
598 | background: transparent;
599 | color: #fff; }
600 |
601 | /*==============================
602 | = SKILLS =
603 | ==============================*/
604 | .skill-item {
605 | width: 100%;
606 | position: relative;
607 | padding: 10px 0; }
608 | .skill-item p {
609 | font-size: 16px;
610 | text-transform: uppercase;
611 | display: inline-block;
612 | font-weight: 500; }
613 | .skill-item .text-muted {
614 | color: #939393; }
615 |
616 | .progress-bar, .progress {
617 | transition: all 4s; }
618 |
619 | /*===== End of SKILLS ======*/
620 | /*============================
621 | = BLOG =
622 | ============================*/
623 | .blog-item {
624 | transition: all 0.3s ease-in-out;
625 | background-color: #f7f8f9;
626 | border-radius: 3px;
627 | overflow: hidden; }
628 | .blog-item:hover {
629 | box-shadow: 0 5px 15px -5px #333;
630 | transform: translateY(-6px);
631 | -webkit-transform: translateY(-6px);
632 | -moz-transform: translateY(-6px);
633 | transform: translateY(-6px);
634 | box-shadow: 0 7px 10px rgba(0, 0, 0, 0.15);
635 | -moz-box-shadow: 0 7px 10px rgba(0, 0, 0, 0.15);
636 | -webkit-box-shadow: 0 7px 10px rgba(0, 0, 0, 0.15); }
637 |
638 | .bg-grey .blog-item {
639 | background-color: #fff; }
640 |
641 | .blog-item-wrapper {
642 | margin-bottom: 30px; }
643 |
644 | .blog-img img {
645 | width: 100%;
646 | height: 250px;
647 | object-fit: cover; }
648 |
649 | .blog-title h4 {
650 | color: #000; }
651 |
652 | .blog-text {
653 | padding: 15px; }
654 |
655 | .blog-tag {
656 | color: #000;
657 | letter-spacing: 1.1px;
658 | text-transform: uppercase; }
659 |
660 | .blog-meta {
661 | color: #939393; }
662 | .blog-meta p {
663 | display: inline-block;
664 | font-size: 14px; }
665 | .blog-meta a {
666 | color: #939393; }
667 |
668 | .blog-author {
669 | display: inline-block;
670 | color: #939393; }
671 | .blog-author p {
672 | font-size: 14px;
673 | margin-bottom: 0; }
674 |
675 | .blog-share-wrapper {
676 | float: right;
677 | display: inline-block;
678 | margin: 0 -5px; }
679 | .blog-share-wrapper .blog-share {
680 | padding: 0 5px;
681 | cursor: pointer; }
682 |
683 | .blog-content img.float-left {
684 | margin: 15px 15px 15px 0; }
685 |
686 | .blog-content .img.float-right {
687 | margin: 15px 0 15px 15px; }
688 |
689 | /*===== End of BLOG ======*/
690 | /*====================================
691 | = FORM CONTROL =
692 | ====================================*/
693 | .form-control:focus {
694 | border-color: #ff00cc;
695 | box-shadow: 0 0 0 0.2rem rgba(253, 101, 90, 0.25); }
696 |
697 | .form-control::-webkit-input-placeholder {
698 | opacity: .5; }
699 |
700 | .form-control::-moz-placeholder {
701 | opacity: .5; }
702 |
703 | .form-control:-ms-input-placeholder {
704 | opacity: .5; }
705 |
706 | .form-control::-ms-input-placeholder {
707 | opacity: .5; }
708 |
709 | .form-control::placeholder {
710 | opacity: .5; }
711 |
712 | /*===== End of FORM CONTROL ======*/
713 | /*==============================
714 | = CLIENT =
715 | ==============================*/
716 | .client-slider .owl-nav {
717 | display: none; }
718 |
719 | .client-slider .client-item {
720 | padding: 0 40px; }
721 |
722 | /*===== End of CLIENT ======*/
723 | /*==================================
724 | = RESPONSIVE =
725 | ==================================*/
726 | @media (max-width: 992px) {
727 | .not-on-top #header-navbar {
728 | position: fixed;
729 | top: 0;
730 | height: auto;
731 | width: 100%;
732 | background: #ff00cc;
733 | /* fallback for old browsers */
734 | background: -webkit-linear-gradient(to right, #333399, #ff00cc);
735 | /* Chrome 10-25, Safari 5.1-6 */
736 | background: linear-gradient(to right, #333399, #ff00cc);
737 | /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
738 | z-index: 11; }
739 | #header-navbar {
740 | padding-top: 15px !important;
741 | padding-bottom: 15px !important; }
742 | .navbar-transparent .navbar-collapse {
743 | background: #ff00cc;
744 | /* fallback for old browsers */
745 | background: -webkit-linear-gradient(to right, #333399, #ff00cc);
746 | /* Chrome 10-25, Safari 5.1-6 */
747 | background: linear-gradient(to right, #333399, #ff00cc);
748 | /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
749 | padding: 10px; } }
750 |
751 | @media (max-width: 767px) {
752 | .jumbotron h1 {
753 | font-size: 6rem; }
754 | .grid-item {
755 | width: 100%; }
756 | .progress {
757 | height: 30px;
758 | font-size: 16px; } }
759 |
760 | /*===== End of RESPONSIVE ======*/
761 |
--------------------------------------------------------------------------------
/vendor/stellar/jquery.stellar.js:
--------------------------------------------------------------------------------
1 | ;(function($, window, document, undefined) {
2 | 'use strict';
3 | var pluginName = 'stellar',
4 | defaults = {
5 | scrollProperty: 'scroll',
6 | positionProperty: 'position',
7 | horizontalScrolling: true,
8 | verticalScrolling: true,
9 | horizontalOffset: 0,
10 | verticalOffset: 0,
11 | responsive: false,
12 | parallaxBackgrounds: true,
13 | parallaxElements: true,
14 | hideDistantElements: true,
15 | hideElement: function($elem) { $elem.hide(); },
16 | showElement: function($elem) { $elem.show(); }
17 | },
18 |
19 | scrollProperty = {
20 | scroll: {
21 | getLeft: function($elem) { return $elem.scrollLeft(); },
22 | setLeft: function($elem, val) { $elem.scrollLeft(val); },
23 |
24 | getTop: function($elem) { return $elem.scrollTop(); },
25 | setTop: function($elem, val) { $elem.scrollTop(val); }
26 | },
27 | position: {
28 | getLeft: function($elem) { return parseInt($elem.css('left'), 10) * -1; },
29 | getTop: function($elem) { return parseInt($elem.css('top'), 10) * -1; }
30 | },
31 | margin: {
32 | getLeft: function($elem) { return parseInt($elem.css('margin-left'), 10) * -1; },
33 | getTop: function($elem) { return parseInt($elem.css('margin-top'), 10) * -1; }
34 | },
35 | transform: {
36 | getLeft: function($elem) {
37 | var computedTransform = getComputedStyle($elem[0])[prefixedTransform];
38 | return (computedTransform !== 'none' ? parseInt(computedTransform.match(/(-?[0-9]+)/g)[4], 10) * -1 : 0);
39 | },
40 | getTop: function($elem) {
41 | var computedTransform = getComputedStyle($elem[0])[prefixedTransform];
42 | return (computedTransform !== 'none' ? parseInt(computedTransform.match(/(-?[0-9]+)/g)[5], 10) * -1 : 0);
43 | }
44 | }
45 | },
46 |
47 | positionProperty = {
48 | position: {
49 | setLeft: function($elem, left) { $elem.css('left', left); },
50 | setTop: function($elem, top) { $elem.css('top', top); }
51 | },
52 | transform: {
53 | setPosition: function($elem, left, startingLeft, top, startingTop) {
54 | $elem[0].style[prefixedTransform] = 'translate3d(' + (left - startingLeft) + 'px, ' + (top - startingTop) + 'px, 0)';
55 | }
56 | }
57 | },
58 |
59 | // Returns a function which adds a vendor prefix to any CSS property name
60 | vendorPrefix = (function() {
61 | var prefixes = /^(Moz|Webkit|Khtml|O|ms|Icab)(?=[A-Z])/,
62 | style = $('script')[0].style,
63 | prefix = '',
64 | prop;
65 |
66 | for (prop in style) {
67 | if (prefixes.test(prop)) {
68 | prefix = prop.match(prefixes)[0];
69 | break;
70 | }
71 | }
72 |
73 | if ('WebkitOpacity' in style) { prefix = 'Webkit'; }
74 | if ('KhtmlOpacity' in style) { prefix = 'Khtml'; }
75 |
76 | return function(property) {
77 | return prefix + (prefix.length > 0 ? property.charAt(0).toUpperCase() + property.slice(1) : property);
78 | };
79 | }()),
80 |
81 | prefixedTransform = vendorPrefix('transform'),
82 |
83 | supportsBackgroundPositionXY = $('', { style: 'background:#fff' }).css('background-position-x') !== undefined,
84 |
85 | setBackgroundPosition = (supportsBackgroundPositionXY ?
86 | function($elem, x, y) {
87 | $elem.css({
88 | 'background-position-x': x,
89 | 'background-position-y': y
90 | });
91 | } :
92 | function($elem, x, y) {
93 | $elem.css('background-position', x + ' ' + y);
94 | }
95 | ),
96 |
97 | getBackgroundPosition = (supportsBackgroundPositionXY ?
98 | function($elem) {
99 | return [
100 | $elem.css('background-position-x'),
101 | $elem.css('background-position-y')
102 | ];
103 | } :
104 | function($elem) {
105 | return $elem.css('background-position').split(' ');
106 | }
107 | ),
108 |
109 | requestAnimFrame = (
110 | window.requestAnimationFrame ||
111 | window.webkitRequestAnimationFrame ||
112 | window.mozRequestAnimationFrame ||
113 | window.oRequestAnimationFrame ||
114 | window.msRequestAnimationFrame ||
115 | function(callback) {
116 | setTimeout(callback, 1000 / 60);
117 | }
118 | );
119 |
120 | function Plugin(element, options) {
121 | this.element = element;
122 | this.options = $.extend({}, defaults, options);
123 |
124 | this._defaults = defaults;
125 | this._name = pluginName;
126 |
127 | this.init();
128 | }
129 |
130 | Plugin.prototype = {
131 | init: function() {
132 | this.options.name = pluginName + '_' + Math.floor(Math.random() * 1e9);
133 |
134 | this._defineElements();
135 | this._defineGetters();
136 | this._defineSetters();
137 | this._handleWindowLoadAndResize();
138 | this._detectViewport();
139 |
140 | this.refresh({ firstLoad: true });
141 |
142 | if (this.options.scrollProperty === 'scroll') {
143 | this._handleScrollEvent();
144 | } else {
145 | this._startAnimationLoop();
146 | }
147 | },
148 | _defineElements: function() {
149 | if (this.element === document.body) this.element = window;
150 | this.$scrollElement = $(this.element);
151 | this.$element = (this.element === window ? $('body') : this.$scrollElement);
152 | this.$viewportElement = (this.options.viewportElement !== undefined ? $(this.options.viewportElement) : (this.$scrollElement[0] === window || this.options.scrollProperty === 'scroll' ? this.$scrollElement : this.$scrollElement.parent()) );
153 | },
154 | _defineGetters: function() {
155 | var self = this,
156 | scrollPropertyAdapter = scrollProperty[self.options.scrollProperty];
157 |
158 | this._getScrollLeft = function() {
159 | return scrollPropertyAdapter.getLeft(self.$scrollElement);
160 | };
161 |
162 | this._getScrollTop = function() {
163 | return scrollPropertyAdapter.getTop(self.$scrollElement);
164 | };
165 | },
166 | _defineSetters: function() {
167 | var self = this,
168 | scrollPropertyAdapter = scrollProperty[self.options.scrollProperty],
169 | positionPropertyAdapter = positionProperty[self.options.positionProperty],
170 | setScrollLeft = scrollPropertyAdapter.setLeft,
171 | setScrollTop = scrollPropertyAdapter.setTop;
172 |
173 | this._setScrollLeft = (typeof setScrollLeft === 'function' ? function(val) {
174 | setScrollLeft(self.$scrollElement, val);
175 | } : $.noop);
176 |
177 | this._setScrollTop = (typeof setScrollTop === 'function' ? function(val) {
178 | setScrollTop(self.$scrollElement, val);
179 | } : $.noop);
180 |
181 | this._setPosition = positionPropertyAdapter.setPosition ||
182 | function($elem, left, startingLeft, top, startingTop) {
183 | if (self.options.horizontalScrolling) {
184 | positionPropertyAdapter.setLeft($elem, left, startingLeft);
185 | }
186 |
187 | if (self.options.verticalScrolling) {
188 | positionPropertyAdapter.setTop($elem, top, startingTop);
189 | }
190 | };
191 | },
192 | _handleWindowLoadAndResize: function() {
193 | var self = this,
194 | $window = $(window);
195 |
196 | if (self.options.responsive) {
197 | $window.bind('load.' + this.name, function() {
198 | self.refresh();
199 | });
200 | }
201 |
202 | $window.bind('resize.' + this.name, function() {
203 | self._detectViewport();
204 |
205 | if (self.options.responsive) {
206 | self.refresh();
207 | }
208 | });
209 | },
210 | refresh: function(options) {
211 | var self = this,
212 | oldLeft = self._getScrollLeft(),
213 | oldTop = self._getScrollTop();
214 |
215 | if (!options || !options.firstLoad) {
216 | this._reset();
217 | }
218 |
219 | this._setScrollLeft(0);
220 | this._setScrollTop(0);
221 |
222 | this._setOffsets();
223 | this._findParticles();
224 | this._findBackgrounds();
225 |
226 | // Fix for WebKit background rendering bug
227 | if (options && options.firstLoad && /WebKit/.test(navigator.userAgent)) {
228 | $(window).load(function() {
229 | var oldLeft = self._getScrollLeft(),
230 | oldTop = self._getScrollTop();
231 |
232 | self._setScrollLeft(oldLeft + 1);
233 | self._setScrollTop(oldTop + 1);
234 |
235 | self._setScrollLeft(oldLeft);
236 | self._setScrollTop(oldTop);
237 | });
238 | }
239 |
240 | this._setScrollLeft(oldLeft);
241 | this._setScrollTop(oldTop);
242 | },
243 | _detectViewport: function() {
244 | var viewportOffsets = this.$viewportElement.offset(),
245 | hasOffsets = viewportOffsets !== null && viewportOffsets !== undefined;
246 |
247 | this.viewportWidth = this.$viewportElement.width();
248 | this.viewportHeight = this.$viewportElement.height();
249 |
250 | this.viewportOffsetTop = (hasOffsets ? viewportOffsets.top : 0);
251 | this.viewportOffsetLeft = (hasOffsets ? viewportOffsets.left : 0);
252 | },
253 | _findParticles: function() {
254 | var self = this,
255 | scrollLeft = this._getScrollLeft(),
256 | scrollTop = this._getScrollTop();
257 |
258 | if (this.particles !== undefined) {
259 | for (var i = this.particles.length - 1; i >= 0; i--) {
260 | this.particles[i].$element.data('stellar-elementIsActive', undefined);
261 | }
262 | }
263 |
264 | this.particles = [];
265 |
266 | if (!this.options.parallaxElements) return;
267 |
268 | this.$element.find('[data-stellar-ratio]').each(function(i) {
269 | var $this = $(this),
270 | horizontalOffset,
271 | verticalOffset,
272 | positionLeft,
273 | positionTop,
274 | marginLeft,
275 | marginTop,
276 | $offsetParent,
277 | offsetLeft,
278 | offsetTop,
279 | parentOffsetLeft = 0,
280 | parentOffsetTop = 0,
281 | tempParentOffsetLeft = 0,
282 | tempParentOffsetTop = 0;
283 |
284 | // Ensure this element isn't already part of another scrolling element
285 | if (!$this.data('stellar-elementIsActive')) {
286 | $this.data('stellar-elementIsActive', this);
287 | } else if ($this.data('stellar-elementIsActive') !== this) {
288 | return;
289 | }
290 |
291 | self.options.showElement($this);
292 |
293 | // Save/restore the original top and left CSS values in case we refresh the particles or destroy the instance
294 | if (!$this.data('stellar-startingLeft')) {
295 | $this.data('stellar-startingLeft', $this.css('left'));
296 | $this.data('stellar-startingTop', $this.css('top'));
297 | } else {
298 | $this.css('left', $this.data('stellar-startingLeft'));
299 | $this.css('top', $this.data('stellar-startingTop'));
300 | }
301 |
302 | positionLeft = $this.position().left;
303 | positionTop = $this.position().top;
304 |
305 | // Catch-all for margin top/left properties (these evaluate to 'auto' in IE7 and IE8)
306 | marginLeft = ($this.css('margin-left') === 'auto') ? 0 : parseInt($this.css('margin-left'), 10);
307 | marginTop = ($this.css('margin-top') === 'auto') ? 0 : parseInt($this.css('margin-top'), 10);
308 |
309 | offsetLeft = $this.offset().left - marginLeft;
310 | offsetTop = $this.offset().top - marginTop;
311 |
312 | // Calculate the offset parent
313 | $this.parents().each(function() {
314 | var $this = $(this);
315 |
316 | if ($this.data('stellar-offset-parent') === true) {
317 | parentOffsetLeft = tempParentOffsetLeft;
318 | parentOffsetTop = tempParentOffsetTop;
319 | $offsetParent = $this;
320 |
321 | return false;
322 | } else {
323 | tempParentOffsetLeft += $this.position().left;
324 | tempParentOffsetTop += $this.position().top;
325 | }
326 | });
327 |
328 | // Detect the offsets
329 | horizontalOffset = ($this.data('stellar-horizontal-offset') !== undefined ? $this.data('stellar-horizontal-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-horizontal-offset') !== undefined ? $offsetParent.data('stellar-horizontal-offset') : self.horizontalOffset));
330 | verticalOffset = ($this.data('stellar-vertical-offset') !== undefined ? $this.data('stellar-vertical-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-vertical-offset') !== undefined ? $offsetParent.data('stellar-vertical-offset') : self.verticalOffset));
331 |
332 | // Add our object to the particles collection
333 | self.particles.push({
334 | $element: $this,
335 | $offsetParent: $offsetParent,
336 | isFixed: $this.css('position') === 'fixed',
337 | horizontalOffset: horizontalOffset,
338 | verticalOffset: verticalOffset,
339 | startingPositionLeft: positionLeft,
340 | startingPositionTop: positionTop,
341 | startingOffsetLeft: offsetLeft,
342 | startingOffsetTop: offsetTop,
343 | parentOffsetLeft: parentOffsetLeft,
344 | parentOffsetTop: parentOffsetTop,
345 | stellarRatio: ($this.data('stellar-ratio') !== undefined ? $this.data('stellar-ratio') : 1),
346 | width: $this.outerWidth(true),
347 | height: $this.outerHeight(true),
348 | isHidden: false
349 | });
350 | });
351 | },
352 | _findBackgrounds: function() {
353 | var self = this,
354 | scrollLeft = this._getScrollLeft(),
355 | scrollTop = this._getScrollTop(),
356 | $backgroundElements;
357 |
358 | this.backgrounds = [];
359 |
360 | if (!this.options.parallaxBackgrounds) return;
361 |
362 | $backgroundElements = this.$element.find('[data-stellar-background-ratio]');
363 |
364 | if (this.$element.data('stellar-background-ratio')) {
365 | $backgroundElements = $backgroundElements.add(this.$element);
366 | }
367 |
368 | $backgroundElements.each(function() {
369 | var $this = $(this),
370 | backgroundPosition = getBackgroundPosition($this),
371 | horizontalOffset,
372 | verticalOffset,
373 | positionLeft,
374 | positionTop,
375 | marginLeft,
376 | marginTop,
377 | offsetLeft,
378 | offsetTop,
379 | $offsetParent,
380 | parentOffsetLeft = 0,
381 | parentOffsetTop = 0,
382 | tempParentOffsetLeft = 0,
383 | tempParentOffsetTop = 0;
384 |
385 | // Ensure this element isn't already part of another scrolling element
386 | if (!$this.data('stellar-backgroundIsActive')) {
387 | $this.data('stellar-backgroundIsActive', this);
388 | } else if ($this.data('stellar-backgroundIsActive') !== this) {
389 | return;
390 | }
391 |
392 | // Save/restore the original top and left CSS values in case we destroy the instance
393 | if (!$this.data('stellar-backgroundStartingLeft')) {
394 | $this.data('stellar-backgroundStartingLeft', backgroundPosition[0]);
395 | $this.data('stellar-backgroundStartingTop', backgroundPosition[1]);
396 | } else {
397 | setBackgroundPosition($this, $this.data('stellar-backgroundStartingLeft'), $this.data('stellar-backgroundStartingTop'));
398 | }
399 |
400 | // Catch-all for margin top/left properties (these evaluate to 'auto' in IE7 and IE8)
401 | marginLeft = ($this.css('margin-left') === 'auto') ? 0 : parseInt($this.css('margin-left'), 10);
402 | marginTop = ($this.css('margin-top') === 'auto') ? 0 : parseInt($this.css('margin-top'), 10);
403 |
404 | offsetLeft = $this.offset().left - marginLeft - scrollLeft;
405 | offsetTop = $this.offset().top - marginTop - scrollTop;
406 |
407 | // Calculate the offset parent
408 | $this.parents().each(function() {
409 | var $this = $(this);
410 |
411 | if ($this.data('stellar-offset-parent') === true) {
412 | parentOffsetLeft = tempParentOffsetLeft;
413 | parentOffsetTop = tempParentOffsetTop;
414 | $offsetParent = $this;
415 |
416 | return false;
417 | } else {
418 | tempParentOffsetLeft += $this.position().left;
419 | tempParentOffsetTop += $this.position().top;
420 | }
421 | });
422 |
423 | // Detect the offsets
424 | horizontalOffset = ($this.data('stellar-horizontal-offset') !== undefined ? $this.data('stellar-horizontal-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-horizontal-offset') !== undefined ? $offsetParent.data('stellar-horizontal-offset') : self.horizontalOffset));
425 | verticalOffset = ($this.data('stellar-vertical-offset') !== undefined ? $this.data('stellar-vertical-offset') : ($offsetParent !== undefined && $offsetParent.data('stellar-vertical-offset') !== undefined ? $offsetParent.data('stellar-vertical-offset') : self.verticalOffset));
426 |
427 | self.backgrounds.push({
428 | $element: $this,
429 | $offsetParent: $offsetParent,
430 | isFixed: $this.css('background-attachment') === 'fixed',
431 | horizontalOffset: horizontalOffset,
432 | verticalOffset: verticalOffset,
433 | startingValueLeft: backgroundPosition[0],
434 | startingValueTop: backgroundPosition[1],
435 | startingBackgroundPositionLeft: (isNaN(parseInt(backgroundPosition[0], 10)) ? 0 : parseInt(backgroundPosition[0], 10)),
436 | startingBackgroundPositionTop: (isNaN(parseInt(backgroundPosition[1], 10)) ? 0 : parseInt(backgroundPosition[1], 10)),
437 | startingPositionLeft: $this.position().left,
438 | startingPositionTop: $this.position().top,
439 | startingOffsetLeft: offsetLeft,
440 | startingOffsetTop: offsetTop,
441 | parentOffsetLeft: parentOffsetLeft,
442 | parentOffsetTop: parentOffsetTop,
443 | stellarRatio: ($this.data('stellar-background-ratio') === undefined ? 1 : $this.data('stellar-background-ratio'))
444 | });
445 | });
446 | },
447 | _reset: function() {
448 | var particle,
449 | startingPositionLeft,
450 | startingPositionTop,
451 | background,
452 | i;
453 |
454 | for (i = this.particles.length - 1; i >= 0; i--) {
455 | particle = this.particles[i];
456 | startingPositionLeft = particle.$element.data('stellar-startingLeft');
457 | startingPositionTop = particle.$element.data('stellar-startingTop');
458 |
459 | this._setPosition(particle.$element, startingPositionLeft, startingPositionLeft, startingPositionTop, startingPositionTop);
460 |
461 | this.options.showElement(particle.$element);
462 |
463 | particle.$element.data('stellar-startingLeft', null).data('stellar-elementIsActive', null).data('stellar-backgroundIsActive', null);
464 | }
465 |
466 | for (i = this.backgrounds.length - 1; i >= 0; i--) {
467 | background = this.backgrounds[i];
468 |
469 | background.$element.data('stellar-backgroundStartingLeft', null).data('stellar-backgroundStartingTop', null);
470 |
471 | setBackgroundPosition(background.$element, background.startingValueLeft, background.startingValueTop);
472 | }
473 | },
474 | destroy: function() {
475 | this._reset();
476 |
477 | this.$scrollElement.unbind('resize.' + this.name).unbind('scroll.' + this.name);
478 | this._animationLoop = $.noop;
479 |
480 | $(window).unbind('load.' + this.name).unbind('resize.' + this.name);
481 | },
482 | _setOffsets: function() {
483 | var self = this,
484 | $window = $(window);
485 |
486 | $window.unbind('resize.horizontal-' + this.name).unbind('resize.vertical-' + this.name);
487 |
488 | if (typeof this.options.horizontalOffset === 'function') {
489 | this.horizontalOffset = this.options.horizontalOffset();
490 | $window.bind('resize.horizontal-' + this.name, function() {
491 | self.horizontalOffset = self.options.horizontalOffset();
492 | });
493 | } else {
494 | this.horizontalOffset = this.options.horizontalOffset;
495 | }
496 |
497 | if (typeof this.options.verticalOffset === 'function') {
498 | this.verticalOffset = this.options.verticalOffset();
499 | $window.bind('resize.vertical-' + this.name, function() {
500 | self.verticalOffset = self.options.verticalOffset();
501 | });
502 | } else {
503 | this.verticalOffset = this.options.verticalOffset;
504 | }
505 | },
506 | _repositionElements: function() {
507 | var scrollLeft = this._getScrollLeft(),
508 | scrollTop = this._getScrollTop(),
509 | horizontalOffset,
510 | verticalOffset,
511 | particle,
512 | fixedRatioOffset,
513 | background,
514 | bgLeft,
515 | bgTop,
516 | isVisibleVertical = true,
517 | isVisibleHorizontal = true,
518 | newPositionLeft,
519 | newPositionTop,
520 | newOffsetLeft,
521 | newOffsetTop,
522 | i;
523 |
524 | // First check that the scroll position or container size has changed
525 | if (this.currentScrollLeft === scrollLeft && this.currentScrollTop === scrollTop && this.currentWidth === this.viewportWidth && this.currentHeight === this.viewportHeight) {
526 | return;
527 | } else {
528 | this.currentScrollLeft = scrollLeft;
529 | this.currentScrollTop = scrollTop;
530 | this.currentWidth = this.viewportWidth;
531 | this.currentHeight = this.viewportHeight;
532 | }
533 |
534 | // Reposition elements
535 | for (i = this.particles.length - 1; i >= 0; i--) {
536 | particle = this.particles[i];
537 |
538 | fixedRatioOffset = (particle.isFixed ? 1 : 0);
539 |
540 | // Calculate position, then calculate what the particle's new offset will be (for visibility check)
541 | if (this.options.horizontalScrolling) {
542 | newPositionLeft = (scrollLeft + particle.horizontalOffset + this.viewportOffsetLeft + particle.startingPositionLeft - particle.startingOffsetLeft + particle.parentOffsetLeft) * -(particle.stellarRatio + fixedRatioOffset - 1) + particle.startingPositionLeft;
543 | newOffsetLeft = newPositionLeft - particle.startingPositionLeft + particle.startingOffsetLeft;
544 | } else {
545 | newPositionLeft = particle.startingPositionLeft;
546 | newOffsetLeft = particle.startingOffsetLeft;
547 | }
548 |
549 | if (this.options.verticalScrolling) {
550 | newPositionTop = (scrollTop + particle.verticalOffset + this.viewportOffsetTop + particle.startingPositionTop - particle.startingOffsetTop + particle.parentOffsetTop) * -(particle.stellarRatio + fixedRatioOffset - 1) + particle.startingPositionTop;
551 | newOffsetTop = newPositionTop - particle.startingPositionTop + particle.startingOffsetTop;
552 | } else {
553 | newPositionTop = particle.startingPositionTop;
554 | newOffsetTop = particle.startingOffsetTop;
555 | }
556 |
557 | // Check visibility
558 | if (this.options.hideDistantElements) {
559 | isVisibleHorizontal = !this.options.horizontalScrolling || newOffsetLeft + particle.width > (particle.isFixed ? 0 : scrollLeft) && newOffsetLeft < (particle.isFixed ? 0 : scrollLeft) + this.viewportWidth + this.viewportOffsetLeft;
560 | isVisibleVertical = !this.options.verticalScrolling || newOffsetTop + particle.height > (particle.isFixed ? 0 : scrollTop) && newOffsetTop < (particle.isFixed ? 0 : scrollTop) + this.viewportHeight + this.viewportOffsetTop;
561 | }
562 |
563 | if (isVisibleHorizontal && isVisibleVertical) {
564 | if (particle.isHidden) {
565 | this.options.showElement(particle.$element);
566 | particle.isHidden = false;
567 | }
568 |
569 | this._setPosition(particle.$element, newPositionLeft, particle.startingPositionLeft, newPositionTop, particle.startingPositionTop);
570 | } else {
571 | if (!particle.isHidden) {
572 | this.options.hideElement(particle.$element);
573 | particle.isHidden = true;
574 | }
575 | }
576 | }
577 |
578 | // Reposition backgrounds
579 | for (i = this.backgrounds.length - 1; i >= 0; i--) {
580 | background = this.backgrounds[i];
581 |
582 | fixedRatioOffset = (background.isFixed ? 0 : 1);
583 | bgLeft = (this.options.horizontalScrolling ? (scrollLeft + background.horizontalOffset - this.viewportOffsetLeft - background.startingOffsetLeft + background.parentOffsetLeft - background.startingBackgroundPositionLeft) * (fixedRatioOffset - background.stellarRatio) + 'px' : background.startingValueLeft);
584 | bgTop = (this.options.verticalScrolling ? (scrollTop + background.verticalOffset - this.viewportOffsetTop - background.startingOffsetTop + background.parentOffsetTop - background.startingBackgroundPositionTop) * (fixedRatioOffset - background.stellarRatio) + 'px' : background.startingValueTop);
585 |
586 | setBackgroundPosition(background.$element, bgLeft, bgTop);
587 | }
588 | },
589 | _handleScrollEvent: function() {
590 | var self = this,
591 | ticking = false;
592 |
593 | var update = function() {
594 | self._repositionElements();
595 | ticking = false;
596 | };
597 |
598 | var requestTick = function() {
599 | if (!ticking) {
600 | requestAnimFrame(update);
601 | ticking = true;
602 | }
603 | };
604 |
605 | this.$scrollElement.bind('scroll.' + this.name, requestTick);
606 | requestTick();
607 | },
608 | _startAnimationLoop: function() {
609 | var self = this;
610 |
611 | this._animationLoop = function() {
612 | requestAnimFrame(self._animationLoop);
613 | self._repositionElements();
614 | };
615 | this._animationLoop();
616 | }
617 | };
618 |
619 | $.fn[pluginName] = function (options) {
620 | var args = arguments;
621 | if (options === undefined || typeof options === 'object') {
622 | return this.each(function () {
623 | if (!$.data(this, 'plugin_' + pluginName)) {
624 | $.data(this, 'plugin_' + pluginName, new Plugin(this, options));
625 | }
626 | });
627 | } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {
628 | return this.each(function () {
629 | var instance = $.data(this, 'plugin_' + pluginName);
630 | if (instance instanceof Plugin && typeof instance[options] === 'function') {
631 | instance[options].apply(instance, Array.prototype.slice.call(args, 1));
632 | }
633 | if (options === 'destroy') {
634 | $.data(this, 'plugin_' + pluginName, null);
635 | }
636 | });
637 | }
638 | };
639 |
640 | $[pluginName] = function(options) {
641 | var $window = $(window);
642 | return $window.stellar.apply($window, Array.prototype.slice.call(arguments, 0));
643 | };
644 |
645 | // Expose the scroll and position property function hashes so they can be extended
646 | $[pluginName].scrollProperty = scrollProperty;
647 | $[pluginName].positionProperty = positionProperty;
648 |
649 | // Expose the plugin class so it can be modified
650 | window.Stellar = Plugin;
651 | }(jQuery, this, document));
--------------------------------------------------------------------------------
/vendor/isotope/isotope.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Isotope PACKAGED v3.0.6
3 | *
4 | * Licensed GPLv3 for open source use
5 | * or Isotope Commercial License for commercial use
6 | *
7 | * https://isotope.metafizzy.co
8 | * Copyright 2010-2018 Metafizzy
9 | */
10 |
11 | !function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function u(t,e,o){var n,s="$()."+i+'("'+e+'")';return t.each(function(t,u){var h=a.data(u,i);if(!h)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var d=h[e];if(!d||"_"==e.charAt(0))return void r(s+" is not a valid method");var l=d.apply(h,o);n=void 0===n?l:n}),void 0!==n?n:t}function h(t,e){t.each(function(t,o){var n=a.data(o,i);n?(n.option(e),n._init()):(n=new s(o,e),a.data(o,i,n))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=n.call(arguments,1);return u(this,t,e)}return h(this,t),this},o(a))}function o(t){!t||t&&t.bridget||(t.bridget=i)}var n=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return o(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},o=i[t]=i[t]||[];return o.indexOf(e)==-1&&o.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},o=i[t]=i[t]||{};return o[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var o=i.indexOf(e);return o!=-1&&i.splice(o,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var o=this._onceEvents&&this._onceEvents[t],n=0;n1&&i+t>this.cols;i=o?0:i;var n=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=n?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},o._manageStamp=function(t){var i=e(t),o=this._getElementOffset(t),n=this._getOption("originLeft"),s=n?o.left:o.right,r=s+i.outerWidth,a=Math.floor(s/this.columnWidth);a=Math.max(0,a);var u=Math.floor(r/this.columnWidth);u-=r%this.columnWidth?0:1,u=Math.min(this.cols-1,u);for(var h=this._getOption("originTop"),d=(h?o.top:o.bottom)+i.outerHeight,l=a;l<=u;l++)this.colYs[l]=Math.max(d,this.colYs[l])},o._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},o._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},o.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope-layout/js/layout-modes/masonry",["../layout-mode","masonry-layout/masonry"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode"),require("masonry-layout")):e(t.Isotope.LayoutMode,t.Masonry)}(window,function(t,e){"use strict";var i=t.create("masonry"),o=i.prototype,n={_getElementOffset:!0,layout:!0,_getMeasurement:!0};for(var s in e.prototype)n[s]||(o[s]=e.prototype[s]);var r=o.measureColumns;o.measureColumns=function(){this.items=this.isotope.filteredItems,r.call(this)};var a=o._getOption;return o._getOption=function(t){return"fitWidth"==t?void 0!==this.options.isFitWidth?this.options.isFitWidth:this.options.fitWidth:a.apply(this.isotope,arguments)},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope-layout/js/layout-modes/fit-rows",["../layout-mode"],e):"object"==typeof exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("fitRows"),i=e.prototype;return i._resetLayout=function(){this.x=0,this.y=0,this.maxY=0,this._getMeasurement("gutter","outerWidth")},i._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth+this.gutter,i=this.isotope.size.innerWidth+this.gutter;0!==this.x&&e+this.x>i&&(this.x=0,this.y=this.maxY);var o={x:this.x,y:this.y};return this.maxY=Math.max(this.maxY,this.y+t.size.outerHeight),this.x+=e,o},i._getContainerSize=function(){return{height:this.maxY}},e}),function(t,e){"function"==typeof define&&define.amd?define("isotope-layout/js/layout-modes/vertical",["../layout-mode"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("vertical",{horizontalAlignment:0}),i=e.prototype;return i._resetLayout=function(){this.y=0},i._getItemLayoutPosition=function(t){t.getSize();var e=(this.isotope.size.innerWidth-t.size.outerWidth)*this.options.horizontalAlignment,i=this.y;return this.y+=t.size.outerHeight,{x:e,y:i}},i._getContainerSize=function(){return{height:this.y}},e}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","desandro-matches-selector/matches-selector","fizzy-ui-utils/utils","isotope-layout/js/item","isotope-layout/js/layout-mode","isotope-layout/js/layout-modes/masonry","isotope-layout/js/layout-modes/fit-rows","isotope-layout/js/layout-modes/vertical"],function(i,o,n,s,r,a){return e(t,i,o,n,s,r,a)}):"object"==typeof module&&module.exports?module.exports=e(t,require("outlayer"),require("get-size"),require("desandro-matches-selector"),require("fizzy-ui-utils"),require("isotope-layout/js/item"),require("isotope-layout/js/layout-mode"),require("isotope-layout/js/layout-modes/masonry"),require("isotope-layout/js/layout-modes/fit-rows"),require("isotope-layout/js/layout-modes/vertical")):t.Isotope=e(t,t.Outlayer,t.getSize,t.matchesSelector,t.fizzyUIUtils,t.Isotope.Item,t.Isotope.LayoutMode)}(window,function(t,e,i,o,n,s,r){function a(t,e){return function(i,o){for(var n=0;na||ra?1:-1)*h}}return 0}}var u=t.jQuery,h=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/g,"")},d=e.create("isotope",{layoutMode:"masonry",isJQueryFiltering:!0,sortAscending:!0});d.Item=s,d.LayoutMode=r;var l=d.prototype;l._create=function(){this.itemGUID=0,this._sorters={},this._getSorters(),e.prototype._create.call(this),this.modes={},this.filteredItems=this.items,this.sortHistory=["original-order"];for(var t in r.modes)this._initLayoutMode(t)},l.reloadItems=function(){this.itemGUID=0,e.prototype.reloadItems.call(this)},l._itemize=function(){for(var t=e.prototype._itemize.apply(this,arguments),i=0;i