FooGallery – Image Gallery WordPress Plugin - Version 1.8.11

Version Description

  • New : Added advanced gallery settings for custom settings and custom attributes
  • Fix : Rewrite of Simple Portfolio to incorrect thumb heights
  • Fix : Lazy-load issues for certain themes
  • Update : FooGallery client side 1.3.3
Download this release

Release Info

Developer bradvin
Plugin Icon 128x128 FooGallery – Image Gallery WordPress Plugin
Version 1.8.11
Comparing to
See all releases

Code changes from version 1.8.8 to 1.8.11

README.txt CHANGED
@@ -1,5 +1,5 @@
1
=== FooGallery - Image Gallery WordPress Plugin ===
2
- Contributors: bradvin, steveush, fooplugins
3
Donate link: http://fooplugins.com
4
Tags: gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified gallery, video gallery, photography, youtube gallery
5
Requires at least: 3.9
@@ -145,6 +145,12 @@ Update now to get all the latest features, bug fixes and improvements!
145
146
== Changelog ==
147
148
= 1.8.8 =
149
* New : Implemented the Datasource architecture within the plugin
150
* Fix : PHP Warnings when previewing galleries
1
=== FooGallery - Image Gallery WordPress Plugin ===
2
+ Contributors: bradvin, steveush, fooplugins, freemius
3
Donate link: http://fooplugins.com
4
Tags: gallery, image gallery, photo gallery, responsive, album, media gallery, masonry gallery, portfolio, justified gallery, video gallery, photography, youtube gallery
5
Requires at least: 3.9
145
146
== Changelog ==
147
148
+ = 1.8.11 =
149
+ * New : Added advanced gallery settings for custom settings and custom attributes
150
+ * Fix : Rewrite of Simple Portfolio to incorrect thumb heights
151
+ * Fix : Lazy-load issues for certain themes
152
+ * Update : FooGallery client side 1.3.3
153
+
154
= 1.8.8 =
155
* New : Implemented the Datasource architecture within the plugin
156
* Fix : PHP Warnings when previewing galleries
extensions/default-templates/shared/css/foogallery.css CHANGED
@@ -1764,168 +1764,145 @@ only screen and (min-resolution: 2.25dppx) {
1764
top: 50%;
1765
transform: translateY(-50%);
1766
}
1767
- /* Base Styles */
1768
.fg-simple_portfolio {
1769
- box-sizing: border-box;
1770
- position: relative;
1771
- font-size: 16px;
1772
- margin: 0 auto;
1773
- padding: 0;
1774
- /* The foogallery-portfolio container must have a width set and it is recommended to make the min-width the same as the item width. */
1775
- width: 100%;
1776
}
1777
.fg-simple_portfolio .fg-item {
1778
- position: absolute;
1779
- display: inline-block;
1780
- margin: 0;
1781
- padding: 0;
1782
- outline: none;
1783
- }
1784
- .fg-simple_portfolio .fg-item-inner,
1785
- .fg-simple_portfolio .fg-thumb,
1786
- .fg-simple_portfolio .fg-image {
1787
- display: block;
1788
- margin: 0;
1789
- padding: 0;
1790
- outline: none;
1791
}
1792
.fg-simple_portfolio .fg-item-inner {
1793
- position: relative;
1794
- width: 100%;
1795
- height: 100%;
1796
- }
1797
- .fg-simple_portfolio .fg-thumb {
1798
- box-sizing: border-box;
1799
- display: block;
1800
- margin: 0;
1801
- padding: 0;
1802
- border: none;
1803
- outline: none;
1804
- position: relative;
1805
- overflow: hidden;
1806
}
1807
- .fg-simple_portfolio .fg-item.fg-positioned .fg-image {
1808
- width: 100%;
1809
- height: auto;
1810
}
1811
.fg-simple_portfolio .fg-image {
1812
- z-index: 1;
1813
}
1814
1815
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption {
1816
- visibility: visible;
1817
- opacity: 1;
1818
- font-size: 13px;
1819
- position: relative;
1820
- display: block;
1821
- top: auto;
1822
- bottom: auto;
1823
- left: auto;
1824
- right: auto;
1825
- width: auto;
1826
- height: auto;
1827
- text-transform: none;
1828
- transform: none;
1829
- transition: none;
1830
- background-color: transparent;
1831
- border-style: solid;
1832
- border-color: transparent;
1833
}
1834
.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption {
1835
- transform: none;
1836
- transition: none;
1837
}
1838
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner {
1839
- display: block;
1840
- top: auto;
1841
- bottom: auto;
1842
- left: auto;
1843
- right: auto;
1844
- width: auto;
1845
- height: auto;
1846
- border: none;
1847
- transform: none;
1848
- transition: none;
1849
}
1850
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before {
1851
- display: none;
1852
}
1853
.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before {
1854
- display: block;
1855
}
1856
.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption {
1857
- visibility: visible;
1858
- opacity: 1;
1859
}
1860
1861
.fg-simple_portfolio .fg-caption-title {
1862
- text-align: left;
1863
}
1864
.fg-simple_portfolio .fg-caption-desc {
1865
- text-align: left;
1866
}
1867
.fg-simple_portfolio.fg-light .fg-caption,
1868
.fg-simple_portfolio.fg-dark .fg-caption {
1869
- color: #828282;
1870
}
1871
.fg-simple_portfolio.fg-light .fg-caption a,
1872
.fg-simple_portfolio.fg-dark .fg-caption a {
1873
- color: #828282;
1874
- border-bottom: 1px solid #828282;
1875
}
1876
.fg-simple_portfolio.fg-light .fg-caption a:hover,
1877
.fg-simple_portfolio.fg-dark .fg-caption a:hover {
1878
- border-bottom: none;
1879
}
1880
.fg-simple_portfolio.fg-light .fg-caption-title,
1881
.fg-simple_portfolio.fg-light .fg-caption-title a {
1882
- color: #222;
1883
}
1884
.fg-simple_portfolio.fg-dark .fg-caption-title,
1885
.fg-simple_portfolio.fg-dark .fg-caption-title a {
1886
- color: #FFF;
1887
}
1888
.fg-simple_portfolio.fg-light .fg-caption-title a {
1889
- border-bottom: 1px solid #222;
1890
}
1891
.fg-simple_portfolio.fg-dark .fg-caption-title a {
1892
- border-bottom: 1px solid #FFF;
1893
- }
1894
-
1895
- .fg-simple_portfolio.fg-captions-top .fg-item.fg-positioned .fg-thumb {
1896
- position: absolute;
1897
- bottom: 0;
1898
- left: 0;
1899
}
1900
1901
/* Handle Border Sizing */
1902
.fg-simple_portfolio .fg-caption {
1903
- border-width: 0;
1904
}
1905
.fg-simple_portfolio .fg-caption-title+.fg-caption-desc {
1906
- margin-top: 4px;
1907
}
1908
.fg-simple_portfolio.fg-border-thin .fg-caption {
1909
- border-width: 10px 4px 4px 4px;
1910
}
1911
.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption {
1912
- border-width: 4px 4px 10px 4px;
1913
}
1914
.fg-simple_portfolio.fg-border-medium .fg-caption {
1915
- border-width: 10px 0 0 0;
1916
}
1917
.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption {
1918
- border-width: 0 0 10px 0;
1919
}
1920
.fg-simple_portfolio.fg-border-thick .fg-caption {
1921
- border-width: 16px 0 0 0;
1922
}
1923
.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption {
1924
- border-width: 0 0 16px 0;
1925
}
1926
.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc {
1927
- margin-top: 10px;
1928
}
1929
/* Polaroid */
1930
.foogallery.fg-preset.fg-polaroid .fg-item {
1931
-webkit-backface-visibility: hidden;
1764
top: 50%;
1765
transform: translateY(-50%);
1766
}
1767
.fg-simple_portfolio {
1768
+ display: flex;
1769
+ flex-wrap: wrap;
1770
+ justify-content: center;
1771
+ align-items: stretch;
1772
+ align-content: center;
1773
}
1774
.fg-simple_portfolio .fg-item {
1775
+ position: relative;
1776
+ flex: 1;
1777
+ margin: 10px;
1778
+ min-width: 250px;
1779
+ max-width: 250px;
1780
}
1781
.fg-simple_portfolio .fg-item-inner {
1782
+ display: flex;
1783
+ flex-direction: column;
1784
+ margin: 0;
1785
+ height: 100%;
1786
}
1787
+ .fg-simple_portfolio.fg-captions-top .fg-item-inner {
1788
+ flex-direction: column-reverse;
1789
}
1790
.fg-simple_portfolio .fg-image {
1791
+ height: auto;
1792
+ width: 100%;
1793
}
1794
1795
+ /* Reset captions for the portfolio */
1796
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption {
1797
+ visibility: visible;
1798
+ opacity: 1;
1799
+ font-size: 13px;
1800
+ position: relative;
1801
+ display: block;
1802
+ top: auto;
1803
+ bottom: auto;
1804
+ left: auto;
1805
+ right: auto;
1806
+ width: 100%;
1807
+ height: 100%;
1808
+ text-transform: none;
1809
+ transform: none;
1810
+ transition: none;
1811
+ background-color: transparent;
1812
+ border-style: solid;
1813
+ border-color: transparent;
1814
}
1815
.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption {
1816
+ transform: none;
1817
+ transition: none;
1818
}
1819
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner {
1820
+ display: block;
1821
+ top: auto;
1822
+ bottom: auto;
1823
+ left: auto;
1824
+ right: auto;
1825
+ width: auto;
1826
+ height: auto;
1827
+ border: none;
1828
+ transform: none;
1829
+ transition: none;
1830
}
1831
.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before {
1832
+ display: none;
1833
}
1834
.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before {
1835
+ display: block;
1836
}
1837
.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption {
1838
+ visibility: visible;
1839
+ opacity: 1;
1840
}
1841
1842
.fg-simple_portfolio .fg-caption-title {
1843
+ text-align: left;
1844
}
1845
.fg-simple_portfolio .fg-caption-desc {
1846
+ text-align: left;
1847
}
1848
.fg-simple_portfolio.fg-light .fg-caption,
1849
.fg-simple_portfolio.fg-dark .fg-caption {
1850
+ color: #828282;
1851
}
1852
.fg-simple_portfolio.fg-light .fg-caption a,
1853
.fg-simple_portfolio.fg-dark .fg-caption a {
1854
+ color: #828282;
1855
+ border-bottom: 1px solid #828282;
1856
}
1857
.fg-simple_portfolio.fg-light .fg-caption a:hover,
1858
.fg-simple_portfolio.fg-dark .fg-caption a:hover {
1859
+ border-bottom: none;
1860
}
1861
.fg-simple_portfolio.fg-light .fg-caption-title,
1862
.fg-simple_portfolio.fg-light .fg-caption-title a {
1863
+ color: #222;
1864
}
1865
.fg-simple_portfolio.fg-dark .fg-caption-title,
1866
.fg-simple_portfolio.fg-dark .fg-caption-title a {
1867
+ color: #FFF;
1868
}
1869
.fg-simple_portfolio.fg-light .fg-caption-title a {
1870
+ border-bottom: 1px solid #222;
1871
}
1872
.fg-simple_portfolio.fg-dark .fg-caption-title a {
1873
+ border-bottom: 1px solid #FFF;
1874
}
1875
1876
/* Handle Border Sizing */
1877
.fg-simple_portfolio .fg-caption {
1878
+ border-width: 0;
1879
}
1880
.fg-simple_portfolio .fg-caption-title+.fg-caption-desc {
1881
+ margin-top: 4px;
1882
}
1883
.fg-simple_portfolio.fg-border-thin .fg-caption {
1884
+ border-width: 10px 4px 4px 4px;
1885
}
1886
.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption {
1887
+ border-width: 4px 4px 10px 4px;
1888
}
1889
.fg-simple_portfolio.fg-border-medium .fg-caption {
1890
+ border-width: 10px 0 0 0;
1891
}
1892
.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption {
1893
+ border-width: 0 0 10px 0;
1894
}
1895
.fg-simple_portfolio.fg-border-thick .fg-caption {
1896
+ border-width: 16px 0 0 0;
1897
}
1898
.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption {
1899
+ border-width: 0 0 16px 0;
1900
}
1901
.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc {
1902
+ margin-top: 10px;
1903
}
1904
+
1905
+
1906
/* Polaroid */
1907
.foogallery.fg-preset.fg-polaroid .fg-item {
1908
-webkit-backface-visibility: hidden;
extensions/default-templates/shared/css/foogallery.min.css CHANGED
@@ -1 +1 @@
1
- .foogallery,.foogallery *{box-sizing:border-box}.foogallery{display:block;z-index:1;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;position:relative;line-height:0;font-size:0;width:100%;max-width:100%}.foogallery .fg-item{display:inline-block;position:relative;background-color:transparent;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.foogallery .fg-item-inner{display:block;position:relative;visibility:hidden;overflow:hidden;opacity:0;z-index:3;margin:0;border:solid 0 transparent}.foogallery .fg-item.fg-error,.foogallery .fg-item.fg-loading{background:no-repeat center}.foogallery .fg-item.fg-error{background-image:url(../img/image.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@3x.png)}}.foogallery .fg-item.fg-loaded{z-index:4}.foogallery .fg-loaded .fg-item-inner{visibility:visible;opacity:1;z-index:5}.foogallery .fg-error .fg-item-inner{pointer-events:none;cursor:default}.foogallery .fg-thumb{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:4;box-shadow:none}.foogallery .fg-thumb:focus,.foogallery .fg-thumb:hover{border:none;outline:0;text-decoration:none;box-shadow:none}.foogallery .fg-image-wrap{display:block;position:relative}.foogallery .fg-image{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:5;max-width:none;height:auto;margin:0}.foogallery .fg-loaded .fg-thumb{z-index:6}.foogallery .fg-loaded .fg-image{z-index:7}.foogallery.fg-light .fg-item-inner{background-color:#fff;color:#333;border-color:#fff}.foogallery.fg-dark .fg-item-inner{background-color:#333;color:#fff;border-color:#333}.foogallery.fg-light .fg-item.fg-error,.foogallery.fg-light .fg-item.fg-idle,.foogallery.fg-light .fg-item.fg-loading{background-color:#eee;box-shadow:inset 0 0 0 1px #ddd}.foogallery.fg-dark .fg-item.fg-error,.foogallery.fg-dark .fg-item.fg-idle,.foogallery.fg-dark .fg-item.fg-loading{background-color:#444;box-shadow:inset 0 0 0 1px #333}.foogallery.fg-border-thin .fg-item-inner{border-width:4px}.foogallery.fg-border-medium .fg-item-inner{border-width:10px}.foogallery.fg-border-thick .fg-item-inner{border-width:16px}.foogallery.fg-light.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-dark.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-light.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-light.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-light.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-shadow-inset-small .fg-thumb:after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:7}.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%}.foogallery.fg-round-small .fg-item,.foogallery.fg-round-small .fg-item-inner{border-radius:5px}.foogallery.fg-round-medium .fg-item,.foogallery.fg-round-medium .fg-item-inner{border-radius:10px}.foogallery.fg-round-large .fg-item,.foogallery.fg-round-large .fg-item-inner{border-radius:15px}.foogallery.fg-round-full .fg-item,.foogallery.fg-round-full .fg-item-inner{border-radius:50%}.foogallery .fg-loader{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:1em;height:1em;font-size:5px;visibility:hidden;opacity:0}.foogallery .fg-loading .fg-loader{visibility:visible;opacity:1}.fg-loading-default .fg-loader{border-radius:50%;text-indent:-9999em;-webkit-animation:loading-default 1.1s infinite ease;animation:loading-default 1.1s infinite ease}@-webkit-keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}@keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}.fg-loading-bars .fg-loader,.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{background:rgba(130,130,130,1);-webkit-animation:loading-bars 1s infinite ease-in-out;animation:loading-bars 1s infinite ease-in-out;width:1em;height:4em}.fg-loading-bars .fg-loader{color:rgba(130,130,130,1);text-indent:-9999em;font-size:4px;-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{position:absolute;top:0;content:''}.fg-loading-bars .fg-loader:before{left:-1.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-bars .fg-loader:after{left:1.5em}@-webkit-keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}@keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}.fg-loading-trail .fg-loader{color:#828282;font-size:20px;text-indent:-9999em;overflow:hidden;border-radius:50%;-webkit-animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease;animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease}@-webkit-keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@-webkit-keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.fg-loading-pulse .fg-loader,.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{border-radius:50%;width:2.5em;height:2.5em;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation:loading-pulse 1.8s infinite ease-in-out;animation:loading-pulse 1.8s infinite ease-in-out}.fg-loading-pulse .fg-loader{color:#828282;font-size:4px;text-indent:-9999em;transform:translateX(-50%) translateY(-150%);-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{content:'';position:absolute;top:0}.fg-loading-pulse .fg-loader:before{left:-3.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-pulse .fg-loader:after{left:3.5em}@-webkit-keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}.fg-loading-dots .fg-loader{color:#828282;font-size:5px;border-radius:50%;text-indent:-9999em;-webkit-animation:loading-dots 1.3s infinite linear;animation:loading-dots 1.3s infinite linear}@-webkit-keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}.fg-loading-partial .fg-loader,.fg-loading-partial .fg-loader:after{border-radius:50%;width:10em;height:10em}.fg-loading-partial .fg-loader{font-size:4px;text-indent:-9999em;border-top:1.1em solid rgba(130,130,130,.2);border-right:1.1em solid rgba(130,130,130,.2);border-bottom:1.1em solid rgba(130,130,130,.2);border-left:1.1em solid #828282;-webkit-animation:loading-partial 1.1s infinite linear;animation:loading-partial 1.1s infinite linear}@-webkit-keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.foogallery.fg-loaded-drop .fg-item,.foogallery.fg-loaded-fade-in .fg-item,.foogallery.fg-loaded-flip .fg-item,.foogallery.fg-loaded-fly .fg-item,.foogallery.fg-loaded-scale-up .fg-item,.foogallery.fg-loaded-slide-down .fg-item,.foogallery.fg-loaded-slide-left .fg-item,.foogallery.fg-loaded-slide-right .fg-item,.foogallery.fg-loaded-slide-up .fg-item,.foogallery.fg-loaded-swing-down .fg-item{transition-timing-function:ease;transition-duration:650ms;transition-property:background-color,transform}.foogallery.fg-loaded-drop .fg-item-inner,.foogallery.fg-loaded-fade-in .fg-item-inner,.foogallery.fg-loaded-flip .fg-item-inner,.foogallery.fg-loaded-fly .fg-item-inner,.foogallery.fg-loaded-scale-up .fg-item-inner,.foogallery.fg-loaded-slide-down .fg-item-inner,.foogallery.fg-loaded-slide-left .fg-item-inner,.foogallery.fg-loaded-slide-right .fg-item-inner,.foogallery.fg-loaded-slide-up .fg-item-inner,.foogallery.fg-loaded-swing-down .fg-item-inner{transition-timing-function:ease;transition-duration:650ms}.foogallery.fg-loaded-drop .fg-item.fg-loaded,.foogallery.fg-loaded-flip .fg-item.fg-loaded,.foogallery.fg-loaded-fly .fg-item.fg-loaded,.foogallery.fg-loaded-swing-down .fg-item.fg-loaded{perspective:1300px}.foogallery.fg-loaded-fade-in .fg-item-inner{transition-property:visibility,opacity}.foogallery .fg-caption{visibility:hidden;opacity:0;background-color:rgba(0,0,0,.6);color:#fff;position:absolute;z-index:8;width:100%;max-height:100%;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3;border:none;text-align:center;cursor:pointer}.foogallery .fg-caption a{text-decoration:none;color:#fff;border-bottom:1px solid #fff}.foogallery .fg-caption a:hover{border-bottom:none}.foogallery .fg-caption-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:400;padding:5px}.foogallery .fg-caption-desc{padding:5px}.foogallery .fg-caption-title+.fg-caption-desc{padding-top:0}.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before{display:none}.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption{left:0;bottom:0;transition-timing-function:ease;transition-duration:.3s;transition-property:visibility,opacity;visibility:visible;opacity:1;text-align:left}.foogallery.fg-caption-hover .fg-caption .fg-caption-inner{width:100%;max-height:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-thumb:before{display:none}.foogallery.fg-hover-circle-plus .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{content:"";display:block;position:absolute;visibility:hidden;opacity:0;top:0;bottom:0;left:0;right:0;z-index:8;background:rgba(0,0,0,.5) no-repeat center center;background-size:32px 32px}.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-circle-plus .fg-thumb:focus:before,.foogallery.fg-hover-external .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:focus:before,.foogallery.fg-hover-eye .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:focus:before,.foogallery.fg-hover-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:focus:before,.foogallery.fg-hover-tint .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:focus:before,.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:focus:before,.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:focus:before,.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:focus:before{visibility:visible;opacity:1}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-tint .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-caption-inner:before{content:"";display:inline-block;position:relative;width:32px;height:32px;margin:10px 0 5px 0;background:transparent no-repeat center center;background-size:32px 32px;vertical-align:middle}.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@2x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@2x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@2x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@2x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@2x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@2x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@3x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@3x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@3x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@3x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@3x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@3x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@3x.png)}}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,.foogallery.fg-caption-hover.fg-hover-push .fg-caption,.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,.foogallery.fg-hover-colorize .fg-image,.foogallery.fg-hover-colorize .fg-thumb:before,.foogallery.fg-hover-fade .fg-thumb:before,.foogallery.fg-hover-grayscale .fg-image,.foogallery.fg-hover-grayscale .fg-thumb:before,.foogallery.fg-hover-instant .fg-thumb:before,.foogallery.fg-hover-push .fg-thumb,.foogallery.fg-hover-scale .fg-item,.foogallery.fg-hover-scale .fg-thumb:before,.foogallery.fg-hover-slide-down .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-thumb:before{transition-timing-function:ease;transition-duration:.3s}.foogallery.fg-hover-colorize .fg-image{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image{-webkit-filter:none;filter:none}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-hover-colorize .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-hover-grayscale .fg-image{-webkit-filter:none;filter:none;-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);filter:gray;opacity:1}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-hover-grayscale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:none}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transform:translateX(100%);visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb{transition-property:transform}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption{transform:translateY(0)}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb{transform:translateX(-100%)}.foogallery.fg-hover-scale .fg-item{transition-property:transform;z-index:4}.foogallery.fg-hover-scale .fg-item:hover{transform:scale(1.048);z-index:10}.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-hover-scale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-scale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:transform,background-color,opacity,visibility;visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-thumb:before{transform:translateY(0) translateX(0)}.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{transform:translateY(100%)}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before{transform:translateY(-100%)}.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before{transform:translateX(100%)}.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before{transform:translateX(-100%)}.fg-paging-container,.fg-paging-container *,.fg-paging-container :after,.fg-paging-container :before{box-sizing:border-box}.fg-paging-container{display:block;padding:15px;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.fg-paging-container .fg-dot-item,.fg-paging-container .fg-dots{display:inline-block;margin:0;padding:0;outline:0;list-style:none}.fg-paging-container .fg-dot-item .fg-dot-link{display:inline-block;margin:3px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;background-image:none;text-decoration:none;border:1px solid transparent;position:relative;border-radius:50%;padding:0;font-size:0;outline:0;color:transparent;box-shadow:none}.fg-paging-container .fg-dot-item .fg-dot-link:before{content:"";background-color:transparent;border:1px solid transparent;display:block;border-radius:50%;width:9px;height:9px;padding:0;margin:2px}.fg-paging-container .fg-dot-item .fg-dot-link:active,.fg-paging-container .fg-dot-item .fg-dot-link:focus,.fg-paging-container .fg-dot-item .fg-dot-link:hover{text-decoration:none;box-shadow:none;outline:0}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link{cursor:not-allowed;pointer-events:none}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link{cursor:not-allowed;pointer-events:none;outline:0}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link{background-color:#eee;border-color:#9d9d9d}.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link{border-color:#888}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#666;border-color:#888}.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#eee;border-color:#9d9d9d;opacity:.5}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link{background-color:#666;border-color:#333}.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link{border-color:#444}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#333;border-color:#444}.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#666;border-color:#333;opacity:.5}.fg-default:after{content:'';display:block;clear:both}.fg-default .fg-item,.fg-default .fg-item-inner,.fg-default .fg-thumb{display:inline-block;vertical-align:top;max-width:100%}.fg-default .fg-image{border-radius:0;display:block;max-width:100%;height:auto;margin:0;padding:0}.fg-default .fg-image{vertical-align:top}.fg-default.fg-left{text-align:left}.fg-default.fg-center{text-align:center}.fg-default.fg-right{text-align:right}.fg-default.fg-gutter-5{padding-left:5px;margin-bottom:-5px}.fg-default.fg-gutter-5 .fg-item{margin-right:5px;margin-bottom:5px}.fg-default.fg-gutter-10{padding-left:10px;margin-bottom:-10px}.fg-default.fg-gutter-10 .fg-item{margin-right:10px;margin-bottom:10px}.fg-default.fg-gutter-15{padding-left:15px;margin-bottom:-15px}.fg-default.fg-gutter-15 .fg-item{margin-right:15px;margin-bottom:15px}.fg-default.fg-gutter-20{padding-left:20px;margin-bottom:-20px}.fg-default.fg-gutter-20 .fg-item{margin-right:20px;margin-bottom:20px}.fg-default.fg-gutter-25{padding-left:25px;margin-bottom:-25px}.fg-default.fg-gutter-25 .fg-item{margin-right:25px;margin-bottom:25px}.fg-masonry *{box-sizing:border-box}.foogallery.fg-masonry.fg-center{margin:0 auto}.fg-masonry .fg-thumb{display:block}.fg-masonry.fg-masonry-fixed .fg-thumb{display:inline-block}.fg-masonry.fg-masonry-fixed .fg-image{max-width:100%}.fg-masonry .fg-column-width{display:inline-block;visibility:hidden;height:0;border:solid 0 transparent}.fg-masonry.fg-masonry-2col .fg-image,.fg-masonry.fg-masonry-3col .fg-image,.fg-masonry.fg-masonry-4col .fg-image,.fg-masonry.fg-masonry-5col .fg-image{width:100%;height:auto;max-width:100%}.fg-masonry .fg-item{line-height:0;font-size:0}.fg-masonry.fg-masonry-fixed .fg-column-width,.fg-masonry.fg-masonry-fixed .fg-item{max-width:100%}.fg-masonry.fg-masonry-2col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-2col .fg-column-width{width:49%}.fg-masonry.fg-masonry-2col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-3col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-3col .fg-column-width{width:32%}.fg-masonry.fg-masonry-3col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-4col .fg-item{margin-bottom:1%;width:24%}.fg-masonry.fg-masonry-4col .fg-column-width{width:24%}.fg-masonry.fg-masonry-4col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item{margin-bottom:0;width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width{width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item{margin-bottom:3%;width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width{width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:19%}.fg-masonry.fg-masonry-5col .fg-column-width{width:19%}.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}@media screen and (max-width:720px){.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:32%}.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:480px){.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:49%}.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:320px){.fg-masonry.fg-masonry-2col .fg-item,.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:100%}.fg-masonry.fg-masonry-2col .fg-column-width,.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col .fg-gutter-width,.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:0}}.foogallery.fg-border-thin .fg-column-width{border-width:4px}.foogallery.fg-border-medium .fg-column-width{border-width:10px}.foogallery.fg-border-thick .fg-column-width{border-width:16px}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner{display:block;position:relative;max-height:none;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-masonry.fg-captions-bottom .fg-caption-desc,.fg-masonry.fg-captions-bottom .fg-caption-title{text-align:left}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption,.fg-masonry.fg-captions-bottom.fg-light .fg-caption{color:#828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a:hover,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{color:#222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{color:#fff}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-masonry.fg-captions-bottom .fg-caption{border-width:10px}.fg-masonry.fg-captions-bottom .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-masonry.fg-captions-bottom.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-masonry.fg-captions-bottom.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-justified{box-sizing:border-box;position:relative}.foogallery.fg-justified .fg-image,.foogallery.fg-justified .fg-item,.foogallery.fg-justified .fg-item-inner,.foogallery.fg-justified .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0}.fg-justified .fg-item{visibility:visible;position:absolute}.fg-justified .fg-item-inner{position:relative;width:100%;height:100%}.fg-justified .fg-thumb{position:relative;overflow:hidden}.fg-justified .fg-image{z-index:1}.fg-justified .fg-item.fg-positioned .fg-image-wrap,.fg-justified .fg-item.fg-positioned .fg-thumb{width:100%;height:100%}.fg-justified .fg-item.fg-positioned .fg-image{width:100%;height:auto;min-height:100%;top:50%;transform:translateY(-50%)}.fg-simple_portfolio{box-sizing:border-box;position:relative;font-size:16px;margin:0 auto;padding:0;width:100%}.fg-simple_portfolio .fg-item{position:absolute;display:inline-block;margin:0;padding:0;outline:0}.fg-simple_portfolio .fg-image,.fg-simple_portfolio .fg-item-inner,.fg-simple_portfolio .fg-thumb{display:block;margin:0;padding:0;outline:0}.fg-simple_portfolio .fg-item-inner{position:relative;width:100%;height:100%}.fg-simple_portfolio .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0;border:none;outline:0;position:relative;overflow:hidden}.fg-simple_portfolio .fg-item.fg-positioned .fg-image{width:100%;height:auto}.fg-simple_portfolio .fg-image{z-index:1}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner{display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-simple_portfolio .fg-caption-title{text-align:left}.fg-simple_portfolio .fg-caption-desc{text-align:left}.fg-simple_portfolio.fg-dark .fg-caption,.fg-simple_portfolio.fg-light .fg-caption{color:#828282}.fg-simple_portfolio.fg-dark .fg-caption a,.fg-simple_portfolio.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-simple_portfolio.fg-dark .fg-caption a:hover,.fg-simple_portfolio.fg-light .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-light .fg-caption-title,.fg-simple_portfolio.fg-light .fg-caption-title a{color:#222}.fg-simple_portfolio.fg-dark .fg-caption-title,.fg-simple_portfolio.fg-dark .fg-caption-title a{color:#fff}.fg-simple_portfolio.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-simple_portfolio.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-simple_portfolio.fg-captions-top .fg-item.fg-positioned .fg-thumb{position:absolute;bottom:0;left:0}.fg-simple_portfolio .fg-caption{border-width:0}.fg-simple_portfolio .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-simple_portfolio.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.fg-simple_portfolio.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.fg-simple_portfolio.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.foogallery.fg-preset.fg-polaroid .fg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .35s,background-color .65s}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1){-webkit-transform:rotate(3deg);transform:rotate(3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n){-webkit-transform:rotate(-3deg);transform:rotate(-3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n){-webkit-transform:rotate(1deg);transform:rotate(1deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n){-webkit-transform:rotate(-2deg);transform:rotate(-2deg)}.foogallery.fg-preset.fg-polaroid .fg-item:hover{-webkit-transform:rotate(0);transform:rotate(0)}.foogallery.fg-preset.fg-polaroid .fg-caption{position:relative;width:auto;font-family:"Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.foogallery.fg-preset.fg-polaroid .fg-caption-inner,.foogallery.fg-preset.fg-polaroid .fg-caption-title{position:relative;width:auto}.foogallery.fg-preset.fg-polaroid .fg-caption-title{text-align:center}.foogallery.fg-preset.fg-polaroid .fg-caption-desc{display:none}.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title,.foogallery.fg-preset.fg-polaroid .fg-caption-title{color:#333}.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title{color:#fff}.foogallery.fg-preset.fg-polaroid .fg-caption{border-style:solid;border-color:transparent;border-width:10px}.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc{margin-top:4px}.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption{border-width:10px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption{border-width:16px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-image-viewer{display:block;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif}.fg-image-viewer.fg-left{text-align:left}.fg-image-viewer.fg-center{text-align:center}.fg-image-viewer.fg-right{text-align:right}.fiv-inner{position:relative;display:inline-block;max-width:100%;overflow:hidden;z-index:6}.fiv-inner .fiv-inner-container{position:relative;overflow:hidden;max-width:100%;border-style:solid;border-width:0;border-bottom-width:4px;z-index:5}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited{position:relative;display:block;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item{position:absolute;visibility:visible;opacity:1;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item:first-of-type{position:relative}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img{display:block;max-width:100%;height:auto;border:none;outline:0;text-decoration:none}.fg-image-viewer .fiv-inner .fiv-ctrls{display:block;text-align:center;font-size:14px;border-style:solid;line-height:34px}.fg-image-viewer .fiv-inner .fiv-ctrls:after{content:'';display:block;clear:both}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count{display:inline-block;font-weight:400;margin:0}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;min-width:80px;position:relative;overflow:hidden;transition:background-color .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{display:block;position:absolute;font-size:24px;line-height:30px;top:0;left:0;width:100%;transform:translateY(0);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before{transform:translateY(-100%)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span{display:block;width:100%;transform:translateY(100%);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span{transform:translateY(0)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{float:left}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{content:'\2190'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next{float:right}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before{content:'\2192'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span{margin:0 4px}/*!* Theme - Default (Light) *!*//*!* Theme - Dark *!*/.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption{padding:0;border:none;background:#000;background:-moz-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:-webkit-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(to right,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%)}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc{padding:0 10px 10px 10px}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container{background-color:#fff;color:#333;border-color:#fff}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#f2f2f2}.fg-image-viewer.fg-light .fiv-next,.fg-image-viewer.fg-light .fiv-prev{box-shadow:inset 0 0 0 1px #ddd}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container{background-color:#333;color:#fff;border-color:#333}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#444}.fg-image-viewer.fg-dark .fiv-next,.fg-image-viewer.fg-dark .fiv-prev{box-shadow:inset 0 0 0 1px #222}.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner{border-width:0}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container{border-width:4px}.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container{border-width:10px}.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container{border-width:16px}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls{border-top-width:1px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-round-small .fiv-inner{border-radius:5px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-round-medium .fiv-inner{border-radius:10px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-round-large .fiv-inner{border-radius:15px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-full .fiv-inner,.foogallery.fg-image-viewer.fg-round-full .fiv-next,.foogallery.fg-image-viewer.fg-round-full .fiv-prev{border-radius:50%}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner{box-shadow:none}.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-thumbnail,.foogallery.fg-thumbnail.fg-center{text-align:center}.foogallery.fg-thumbnail.fg-left{text-align:left}.foogallery.fg-thumbnail.fg-right{text-align:right}.foogallery.fg-thumbnail.fg-float-left{float:left;width:auto}.foogallery.fg-thumbnail.fg-float-right{float:right;width:auto}.foogallery.fg-thumbnail .fg-item{display:inline-block;vertical-align:top;max-width:100%}.foogallery.fg-thumbnail .fg-image{max-width:100%}.foogallery.fg-thumbnail .fg-st-hidden{display:none}
1
+ .foogallery,.foogallery *{box-sizing:border-box}.foogallery{display:block;z-index:1;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;position:relative;line-height:0;font-size:0;width:100%;max-width:100%}.foogallery .fg-item{display:inline-block;position:relative;background-color:transparent;z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.foogallery .fg-item-inner{display:block;position:relative;visibility:hidden;overflow:hidden;opacity:0;z-index:3;margin:0;border:solid 0 transparent}.foogallery .fg-item.fg-error,.foogallery .fg-item.fg-loading{background:no-repeat center}.foogallery .fg-item.fg-error{background-image:url(../img/image.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery .fg-item.fg-error{background-image:url(../img/image@3x.png)}}.foogallery .fg-item.fg-loaded{z-index:4}.foogallery .fg-loaded .fg-item-inner{visibility:visible;opacity:1;z-index:5}.foogallery .fg-error .fg-item-inner{pointer-events:none;cursor:default}.foogallery .fg-thumb{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:4;box-shadow:none}.foogallery .fg-thumb:focus,.foogallery .fg-thumb:hover{border:none;outline:0;text-decoration:none;box-shadow:none}.foogallery .fg-image-wrap{display:block;position:relative}.foogallery .fg-image{display:block;position:relative;border:none;outline:0;text-decoration:none;z-index:5;max-width:none;height:auto;margin:0}.foogallery .fg-loaded .fg-thumb{z-index:6}.foogallery .fg-loaded .fg-image{z-index:7}.foogallery.fg-light .fg-item-inner{background-color:#fff;color:#333;border-color:#fff}.foogallery.fg-dark .fg-item-inner{background-color:#333;color:#fff;border-color:#333}.foogallery.fg-light .fg-item.fg-error,.foogallery.fg-light .fg-item.fg-idle,.foogallery.fg-light .fg-item.fg-loading{background-color:#eee;box-shadow:inset 0 0 0 1px #ddd}.foogallery.fg-dark .fg-item.fg-error,.foogallery.fg-dark .fg-item.fg-idle,.foogallery.fg-dark .fg-item.fg-loading{background-color:#444;box-shadow:inset 0 0 0 1px #333}.foogallery.fg-border-thin .fg-item-inner{border-width:4px}.foogallery.fg-border-medium .fg-item-inner{border-width:10px}.foogallery.fg-border-thick .fg-item-inner{border-width:16px}.foogallery.fg-light.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-dark.fg-shadow-outline .fg-item-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-light.fg-shadow-small .fg-item-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-light.fg-shadow-medium .fg-item-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-light.fg-shadow-large .fg-item-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-shadow-inset-small .fg-thumb:after{display:block;content:"";position:absolute;top:0;left:0;right:0;bottom:0;z-index:7}.foogallery.fg-dark.fg-shadow-inset-small .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-small .fg-thumb:after{box-shadow:inset 0 1px 4px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-medium .fg-thumb:after{box-shadow:inset 0 1px 10px 0 rgba(0,0,0,.3)}.foogallery.fg-dark.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-light.fg-shadow-inset-large .fg-thumb:after{box-shadow:inset 0 1px 16px 0 rgba(0,0,0,.3)}.foogallery.fg-round-full.fg-shadow-inset-large .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-medium .fg-thumb:after,.foogallery.fg-round-full.fg-shadow-inset-small .fg-thumb:after{border-radius:50%}.foogallery.fg-round-small .fg-item,.foogallery.fg-round-small .fg-item-inner{border-radius:5px}.foogallery.fg-round-medium .fg-item,.foogallery.fg-round-medium .fg-item-inner{border-radius:10px}.foogallery.fg-round-large .fg-item,.foogallery.fg-round-large .fg-item-inner{border-radius:15px}.foogallery.fg-round-full .fg-item,.foogallery.fg-round-full .fg-item-inner{border-radius:50%}.foogallery .fg-loader{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);width:1em;height:1em;font-size:5px;visibility:hidden;opacity:0}.foogallery .fg-loading .fg-loader{visibility:visible;opacity:1}.fg-loading-default .fg-loader{border-radius:50%;text-indent:-9999em;-webkit-animation:loading-default 1.1s infinite ease;animation:loading-default 1.1s infinite ease}@-webkit-keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}@keyframes loading-default{0%,100%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,1),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.5),-1.8em -1.8em 0 0 rgba(130,130,130,.7)}12.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.7),1.8em -1.8em 0 0 rgba(130,130,130,1),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.5)}25%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.5),1.8em -1.8em 0 0 rgba(130,130,130,.7),2.5em 0 0 0 rgba(130,130,130,1),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}37.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.5),2.5em 0 0 0 rgba(130,130,130,.7),1.75em 1.75em 0 0 rgba(130,130,130,1),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}50%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.5),1.75em 1.75em 0 0 rgba(130,130,130,.7),0 2.5em 0 0 rgba(130,130,130,1),-1.8em 1.8em 0 0 rgba(130,130,130,.2),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}62.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.5),0 2.5em 0 0 rgba(130,130,130,.7),-1.8em 1.8em 0 0 rgba(130,130,130,1),-2.6em 0 0 0 rgba(130,130,130,.2),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}75%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.5),-1.8em 1.8em 0 0 rgba(130,130,130,.7),-2.6em 0 0 0 rgba(130,130,130,1),-1.8em -1.8em 0 0 rgba(130,130,130,.2)}87.5%{box-shadow:0 -2.6em 0 0 rgba(130,130,130,.2),1.8em -1.8em 0 0 rgba(130,130,130,.2),2.5em 0 0 0 rgba(130,130,130,.2),1.75em 1.75em 0 0 rgba(130,130,130,.2),0 2.5em 0 0 rgba(130,130,130,.2),-1.8em 1.8em 0 0 rgba(130,130,130,.5),-2.6em 0 0 0 rgba(130,130,130,.7),-1.8em -1.8em 0 0 rgba(130,130,130,1)}}.fg-loading-bars .fg-loader,.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{background:rgba(130,130,130,1);-webkit-animation:loading-bars 1s infinite ease-in-out;animation:loading-bars 1s infinite ease-in-out;width:1em;height:4em}.fg-loading-bars .fg-loader{color:rgba(130,130,130,1);text-indent:-9999em;font-size:4px;-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-bars .fg-loader:after,.fg-loading-bars .fg-loader:before{position:absolute;top:0;content:''}.fg-loading-bars .fg-loader:before{left:-1.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-bars .fg-loader:after{left:1.5em}@-webkit-keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}@keyframes loading-bars{0%,100%,80%{box-shadow:0 0;height:4em}40%{box-shadow:0 -2em;height:5em}}.fg-loading-trail .fg-loader{color:#828282;font-size:20px;text-indent:-9999em;overflow:hidden;border-radius:50%;-webkit-animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease;animation:loading-trail-1 1.7s infinite ease,loading-trail-2 1.7s infinite ease}@-webkit-keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@keyframes loading-trail-1{0%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}5%,95%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}10%,59%{box-shadow:0 -.83em 0 -.4em,-.087em -.825em 0 -.42em,-.173em -.812em 0 -.44em,-.256em -.789em 0 -.46em,-.297em -.775em 0 -.477em}20%{box-shadow:0 -.83em 0 -.4em,-.338em -.758em 0 -.42em,-.555em -.617em 0 -.44em,-.671em -.488em 0 -.46em,-.749em -.34em 0 -.477em}38%{box-shadow:0 -.83em 0 -.4em,-.377em -.74em 0 -.42em,-.645em -.522em 0 -.44em,-.775em -.297em 0 -.46em,-.82em -.09em 0 -.477em}100%{box-shadow:0 -.83em 0 -.4em,0 -.83em 0 -.42em,0 -.83em 0 -.44em,0 -.83em 0 -.46em,0 -.83em 0 -.477em}}@-webkit-keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-trail-2{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.fg-loading-pulse .fg-loader,.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{border-radius:50%;width:2.5em;height:2.5em;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation:loading-pulse 1.8s infinite ease-in-out;animation:loading-pulse 1.8s infinite ease-in-out}.fg-loading-pulse .fg-loader{color:#828282;font-size:4px;text-indent:-9999em;transform:translateX(-50%) translateY(-150%);-webkit-animation-delay:-.16s;animation-delay:-.16s}.fg-loading-pulse .fg-loader:after,.fg-loading-pulse .fg-loader:before{content:'';position:absolute;top:0}.fg-loading-pulse .fg-loader:before{left:-3.5em;-webkit-animation-delay:-.32s;animation-delay:-.32s}.fg-loading-pulse .fg-loader:after{left:3.5em}@-webkit-keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}@keyframes loading-pulse{0%,100%,80%{box-shadow:0 2.5em 0 -1.3em}40%{box-shadow:0 2.5em 0 0}}.fg-loading-dots .fg-loader{color:#828282;font-size:5px;border-radius:50%;text-indent:-9999em;-webkit-animation:loading-dots 1.3s infinite linear;animation:loading-dots 1.3s infinite linear}@-webkit-keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}@keyframes loading-dots{0%,100%{box-shadow:0 -3em 0 .2em,2em -2em 0 0,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 0}12.5%{box-shadow:0 -3em 0 0,2em -2em 0 .2em,3em 0 0 0,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}25%{box-shadow:0 -3em 0 -.5em,2em -2em 0 0,3em 0 0 .2em,2em 2em 0 0,0 3em 0 -1em,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}37.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 0,2em 2em 0 .2em,0 3em 0 0,-2em 2em 0 -1em,-3em 0 0 -1em,-2em -2em 0 -1em}50%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 0,0 3em 0 .2em,-2em 2em 0 0,-3em 0 0 -1em,-2em -2em 0 -1em}62.5%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 0,-2em 2em 0 .2em,-3em 0 0 0,-2em -2em 0 -1em}75%{box-shadow:0 -3em 0 -1em,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 .2em,-2em -2em 0 0}87.5%{box-shadow:0 -3em 0 0,2em -2em 0 -1em,3em 0 0 -1em,2em 2em 0 -1em,0 3em 0 -1em,-2em 2em 0 0,-3em 0 0 0,-2em -2em 0 .2em}}.fg-loading-partial .fg-loader,.fg-loading-partial .fg-loader:after{border-radius:50%;width:10em;height:10em}.fg-loading-partial .fg-loader{font-size:4px;text-indent:-9999em;border-top:1.1em solid rgba(130,130,130,.2);border-right:1.1em solid rgba(130,130,130,.2);border-bottom:1.1em solid rgba(130,130,130,.2);border-left:1.1em solid #828282;-webkit-animation:loading-partial 1.1s infinite linear;animation:loading-partial 1.1s infinite linear}@-webkit-keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}@keyframes loading-partial{0%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(0);transform:translateX(-50%) translateY(-50%) rotate(0)}100%{-webkit-transform:translateX(-50%) translateY(-50%) rotate(360deg);transform:translateX(-50%) translateY(-50%) rotate(360deg)}}.foogallery.fg-loaded-drop .fg-item,.foogallery.fg-loaded-fade-in .fg-item,.foogallery.fg-loaded-flip .fg-item,.foogallery.fg-loaded-fly .fg-item,.foogallery.fg-loaded-scale-up .fg-item,.foogallery.fg-loaded-slide-down .fg-item,.foogallery.fg-loaded-slide-left .fg-item,.foogallery.fg-loaded-slide-right .fg-item,.foogallery.fg-loaded-slide-up .fg-item,.foogallery.fg-loaded-swing-down .fg-item{transition-timing-function:ease;transition-duration:650ms;transition-property:background-color,transform}.foogallery.fg-loaded-drop .fg-item-inner,.foogallery.fg-loaded-fade-in .fg-item-inner,.foogallery.fg-loaded-flip .fg-item-inner,.foogallery.fg-loaded-fly .fg-item-inner,.foogallery.fg-loaded-scale-up .fg-item-inner,.foogallery.fg-loaded-slide-down .fg-item-inner,.foogallery.fg-loaded-slide-left .fg-item-inner,.foogallery.fg-loaded-slide-right .fg-item-inner,.foogallery.fg-loaded-slide-up .fg-item-inner,.foogallery.fg-loaded-swing-down .fg-item-inner{transition-timing-function:ease;transition-duration:650ms}.foogallery.fg-loaded-drop .fg-item.fg-loaded,.foogallery.fg-loaded-flip .fg-item.fg-loaded,.foogallery.fg-loaded-fly .fg-item.fg-loaded,.foogallery.fg-loaded-swing-down .fg-item.fg-loaded{perspective:1300px}.foogallery.fg-loaded-fade-in .fg-item-inner{transition-property:visibility,opacity}.foogallery .fg-caption{visibility:hidden;opacity:0;background-color:rgba(0,0,0,.6);color:#fff;position:absolute;z-index:8;width:100%;max-height:100%;overflow:hidden;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.3;border:none;text-align:center;cursor:pointer}.foogallery .fg-caption a{text-decoration:none;color:#fff;border-bottom:1px solid #fff}.foogallery .fg-caption a:hover{border-bottom:none}.foogallery .fg-caption-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:16px;font-weight:400;padding:5px}.foogallery .fg-caption-desc{padding:5px}.foogallery .fg-caption-title+.fg-caption-desc{padding-top:0}.foogallery.fg-caption-always .fg-caption .fg-caption-inner:before{display:none}.foogallery.fg-caption-always .fg-item.fg-loaded .fg-caption{left:0;bottom:0;transition-timing-function:ease;transition-duration:.3s;transition-property:visibility,opacity;visibility:visible;opacity:1;text-align:left}.foogallery.fg-caption-hover .fg-caption .fg-caption-inner{width:100%;max-height:100%;position:absolute;top:50%;left:0;transform:translateY(-50%)}.foogallery.fg-caption-hover .fg-item.fg-loaded .fg-thumb:before{display:none}.foogallery.fg-hover-circle-plus .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{content:"";display:block;position:absolute;visibility:hidden;opacity:0;top:0;bottom:0;left:0;right:0;z-index:8;background:rgba(0,0,0,.5) no-repeat center center;background-size:32px 32px}.foogallery.fg-hover-circle-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-circle-plus .fg-thumb:focus:before,.foogallery.fg-hover-external .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-external .fg-thumb:focus:before,.foogallery.fg-hover-eye .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-eye .fg-thumb:focus:before,.foogallery.fg-hover-plus .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-plus .fg-thumb:focus:before,.foogallery.fg-hover-tint .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-tint .fg-thumb:focus:before,.foogallery.fg-hover-zoom .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom .fg-thumb:focus:before,.foogallery.fg-hover-zoom2 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom2 .fg-thumb:focus:before,.foogallery.fg-hover-zoom3 .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-zoom3 .fg-thumb:focus:before{visibility:visible;opacity:1}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-tint .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-caption-inner:before{content:"";display:inline-block;position:relative;width:32px;height:32px;margin:10px 0 5px 0;background:transparent no-repeat center center;background-size:32px 32px;vertical-align:middle}.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external.png)}@media only screen and (-o-min-device-pixel-ratio:5/4),only screen and (-webkit-min-device-pixel-ratio:1.25),only screen and (min-device-pixel-ratio:1.25),only screen and (min-resolution:1.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@2x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@2x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@2x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@2x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@2x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@2x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@2x.png)}}@media only screen and (-o-min-device-pixel-ratio:9/4),only screen and (-webkit-min-device-pixel-ratio:2.25),only screen and (min-device-pixel-ratio:2.25),only screen and (min-resolution:2.25dppx){.foogallery.fg-hover-zoom .fg-caption-inner:before,.foogallery.fg-hover-zoom .fg-thumb:before{background-image:url(../img/zoom@3x.png)}.foogallery.fg-hover-zoom2 .fg-caption-inner:before,.foogallery.fg-hover-zoom2 .fg-thumb:before{background-image:url(../img/zoom2@3x.png)}.foogallery.fg-hover-zoom3 .fg-caption-inner:before,.foogallery.fg-hover-zoom3 .fg-thumb:before{background-image:url(../img/zoom3@3x.png)}.foogallery.fg-hover-plus .fg-caption-inner:before,.foogallery.fg-hover-plus .fg-thumb:before{background-image:url(../img/plus@3x.png)}.foogallery.fg-hover-circle-plus .fg-caption-inner:before,.foogallery.fg-hover-circle-plus .fg-thumb:before{background-image:url(../img/circle-plus@3x.png)}.foogallery.fg-hover-eye .fg-caption-inner:before,.foogallery.fg-hover-eye .fg-thumb:before{background-image:url(../img/eye@3x.png)}.foogallery.fg-hover-external .fg-caption-inner:before,.foogallery.fg-hover-external .fg-thumb:before{background-image:url(../img/external@3x.png)}}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-caption-hover.fg-hover-fade .fg-caption,.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-caption-hover.fg-hover-instant .fg-caption,.foogallery.fg-caption-hover.fg-hover-push .fg-caption,.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-down .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-caption,.foogallery.fg-hover-colorize .fg-image,.foogallery.fg-hover-colorize .fg-thumb:before,.foogallery.fg-hover-fade .fg-thumb:before,.foogallery.fg-hover-grayscale .fg-image,.foogallery.fg-hover-grayscale .fg-thumb:before,.foogallery.fg-hover-instant .fg-thumb:before,.foogallery.fg-hover-push .fg-thumb,.foogallery.fg-hover-scale .fg-item,.foogallery.fg-hover-scale .fg-thumb:before,.foogallery.fg-hover-slide-down .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-thumb:before{transition-timing-function:ease;transition-duration:.3s}.foogallery.fg-hover-colorize .fg-image{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'saturate\' values=\'0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-image{-webkit-filter:none;filter:none}.foogallery.fg-caption-hover.fg-hover-colorize .fg-caption,.foogallery.fg-hover-colorize .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-colorize .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-colorize .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-fade .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-hover-grayscale .fg-image{-webkit-filter:none;filter:none;-webkit-transition-property:-webkit-filter;transition-property:filter}.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-image{-webkit-filter:grayscale(1);-webkit-filter:grayscale(100%);filter:grayscale(100%);filter:gray;opacity:1}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-caption,.foogallery.fg-hover-grayscale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-grayscale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-grayscale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:none}.foogallery.fg-caption-hover.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-instant .fg-loaded .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transform:translateX(100%);visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-caption,.foogallery.fg-hover-push .fg-loaded .fg-thumb{transition-property:transform}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-caption{transform:translateY(0)}.foogallery.fg-caption-hover.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb,.foogallery.fg-hover-push .fg-loaded .fg-item-inner:hover .fg-thumb{transform:translateX(-100%)}.foogallery.fg-hover-scale .fg-item{transition-property:transform;z-index:4}.foogallery.fg-hover-scale .fg-item:hover{transform:scale(1.048);z-index:10}.foogallery.fg-caption-hover.fg-hover-scale .fg-caption,.foogallery.fg-hover-scale .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:visibility,opacity,background-color}.foogallery.fg-caption-hover.fg-hover-scale .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-scale .fg-item-inner:hover .fg-thumb:before{visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{display:block;left:0;top:0;bottom:0;transition-property:transform,background-color,opacity,visibility;visibility:visible;opacity:1}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-left .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-right .fg-loaded .fg-item-inner:hover .fg-thumb:before,.foogallery.fg-hover-slide-up .fg-loaded .fg-item-inner:hover .fg-thumb:before{transform:translateY(0) translateX(0)}.foogallery.fg-caption-hover.fg-hover-slide-up .fg-loaded .fg-caption,.foogallery.fg-hover-slide-up .fg-loaded .fg-thumb:before{transform:translateY(100%)}.foogallery.fg-caption-hover.fg-hover-slide-down .fg-loaded .fg-caption,.foogallery.fg-hover-slide-down .fg-loaded .fg-thumb:before{transform:translateY(-100%)}.foogallery.fg-caption-hover.fg-hover-slide-left .fg-loaded .fg-caption,.foogallery.fg-hover-slide-left .fg-loaded .fg-thumb:before{transform:translateX(100%)}.foogallery.fg-caption-hover.fg-hover-slide-right .fg-loaded .fg-caption,.foogallery.fg-hover-slide-right .fg-loaded .fg-thumb:before{transform:translateX(-100%)}.fg-paging-container,.fg-paging-container *,.fg-paging-container :after,.fg-paging-container :before{box-sizing:border-box}.fg-paging-container{display:block;padding:15px;text-align:center;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fg-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.fg-paging-container .fg-dot-item,.fg-paging-container .fg-dots{display:inline-block;margin:0;padding:0;outline:0;list-style:none}.fg-paging-container .fg-dot-item .fg-dot-link{display:inline-block;margin:3px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;user-select:none;background-image:none;text-decoration:none;border:1px solid transparent;position:relative;border-radius:50%;padding:0;font-size:0;outline:0;color:transparent;box-shadow:none}.fg-paging-container .fg-dot-item .fg-dot-link:before{content:"";background-color:transparent;border:1px solid transparent;display:block;border-radius:50%;width:9px;height:9px;padding:0;margin:2px}.fg-paging-container .fg-dot-item .fg-dot-link:active,.fg-paging-container .fg-dot-item .fg-dot-link:focus,.fg-paging-container .fg-dot-item .fg-dot-link:hover{text-decoration:none;box-shadow:none;outline:0}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container .fg-dot-item.fg-selected .fg-dot-link{cursor:not-allowed;pointer-events:none}.fg-paging-container .fg-dot-item.fg-disabled .fg-dot-link{cursor:not-allowed;pointer-events:none;outline:0}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link{background-color:#eee;border-color:#9d9d9d}.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link{border-color:#888}.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-light .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-light .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#666;border-color:#888}.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-light .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#eee;border-color:#9d9d9d;opacity:.5}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:before{transition-timing-function:ease-out;transition-duration:.3s;transition-property:color,border-color,background-color}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link{background-color:#666;border-color:#333}.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link{border-color:#444}.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:focus:before,.fg-paging-container.fg-dark .fg-dot-item .fg-dot-link:hover:before,.fg-paging-container.fg-dark .fg-dot-item.fg-selected .fg-dot-link:before{background-color:#333;border-color:#444}.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:focus,.fg-paging-container.fg-dark .fg-dot-item.fg-disabled .fg-dot-link:hover{background-color:#666;border-color:#333;opacity:.5}.fg-default:after{content:'';display:block;clear:both}.fg-default .fg-item,.fg-default .fg-item-inner,.fg-default .fg-thumb{display:inline-block;vertical-align:top;max-width:100%}.fg-default .fg-image{border-radius:0;display:block;max-width:100%;height:auto;margin:0;padding:0}.fg-default .fg-image{vertical-align:top}.fg-default.fg-left{text-align:left}.fg-default.fg-center{text-align:center}.fg-default.fg-right{text-align:right}.fg-default.fg-gutter-5{padding-left:5px;margin-bottom:-5px}.fg-default.fg-gutter-5 .fg-item{margin-right:5px;margin-bottom:5px}.fg-default.fg-gutter-10{padding-left:10px;margin-bottom:-10px}.fg-default.fg-gutter-10 .fg-item{margin-right:10px;margin-bottom:10px}.fg-default.fg-gutter-15{padding-left:15px;margin-bottom:-15px}.fg-default.fg-gutter-15 .fg-item{margin-right:15px;margin-bottom:15px}.fg-default.fg-gutter-20{padding-left:20px;margin-bottom:-20px}.fg-default.fg-gutter-20 .fg-item{margin-right:20px;margin-bottom:20px}.fg-default.fg-gutter-25{padding-left:25px;margin-bottom:-25px}.fg-default.fg-gutter-25 .fg-item{margin-right:25px;margin-bottom:25px}.fg-masonry *{box-sizing:border-box}.foogallery.fg-masonry.fg-center{margin:0 auto}.fg-masonry .fg-thumb{display:block}.fg-masonry.fg-masonry-fixed .fg-thumb{display:inline-block}.fg-masonry.fg-masonry-fixed .fg-image{max-width:100%}.fg-masonry .fg-column-width{display:inline-block;visibility:hidden;height:0;border:solid 0 transparent}.fg-masonry.fg-masonry-2col .fg-image,.fg-masonry.fg-masonry-3col .fg-image,.fg-masonry.fg-masonry-4col .fg-image,.fg-masonry.fg-masonry-5col .fg-image{width:100%;height:auto;max-width:100%}.fg-masonry .fg-item{line-height:0;font-size:0}.fg-masonry.fg-masonry-fixed .fg-column-width,.fg-masonry.fg-masonry-fixed .fg-item{max-width:100%}.fg-masonry.fg-masonry-2col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-2col .fg-column-width{width:49%}.fg-masonry.fg-masonry-2col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-3col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-3col .fg-column-width{width:32%}.fg-masonry.fg-masonry-3col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-4col .fg-item{margin-bottom:1%;width:24%}.fg-masonry.fg-masonry-4col .fg-column-width{width:24%}.fg-masonry.fg-masonry-4col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item{margin-bottom:0;width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width{width:25%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item{margin-bottom:3%;width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width{width:22%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width{width:3%}.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:19%}.fg-masonry.fg-masonry-5col .fg-column-width{width:19%}.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:20%}.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:17%}.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}@media screen and (max-width:720px){.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:32%}.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:32%}.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:33%}.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:30%}.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:480px){.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:49%}.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:49%}.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:1%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:50%}.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:47%}.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:3%}}@media screen and (max-width:320px){.fg-masonry.fg-masonry-2col .fg-item,.fg-masonry.fg-masonry-3col .fg-item,.fg-masonry.fg-masonry-4col .fg-item,.fg-masonry.fg-masonry-5col .fg-item{margin-bottom:1%;width:100%}.fg-masonry.fg-masonry-2col .fg-column-width,.fg-masonry.fg-masonry-3col .fg-column-width,.fg-masonry.fg-masonry-4col .fg-column-width,.fg-masonry.fg-masonry-5col .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col .fg-gutter-width,.fg-masonry.fg-masonry-3col .fg-gutter-width,.fg-masonry.fg-masonry-4col .fg-gutter-width,.fg-masonry.fg-masonry-5col .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-item{margin-bottom:0;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-none .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-none .fg-gutter-width{width:0}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-item,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-item{margin-bottom:3%;width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-column-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-column-width{width:100%}.fg-masonry.fg-masonry-2col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-3col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-4col.fg-gutter-large .fg-gutter-width,.fg-masonry.fg-masonry-5col.fg-gutter-large .fg-gutter-width{width:0}}.foogallery.fg-border-thin .fg-column-width{border-width:4px}.foogallery.fg-border-medium .fg-column-width{border-width:10px}.foogallery.fg-border-thick .fg-column-width{border-width:16px}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner{display:block;position:relative;max-height:none;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-masonry.fg-captions-bottom .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-masonry.fg-captions-bottom.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-masonry.fg-captions-bottom .fg-caption-desc,.fg-masonry.fg-captions-bottom .fg-caption-title{text-align:left}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption,.fg-masonry.fg-captions-bottom.fg-light .fg-caption{color:#828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption a:hover,.fg-masonry.fg-captions-bottom.fg-light .fg-caption a:hover{border-bottom:none}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{color:#222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title,.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{color:#fff}.fg-masonry.fg-captions-bottom.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-masonry.fg-captions-bottom.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-masonry.fg-captions-bottom .fg-caption{border-width:10px}.fg-masonry.fg-captions-bottom .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-masonry.fg-captions-bottom.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-masonry.fg-captions-bottom.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-masonry.fg-captions-bottom.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-justified{box-sizing:border-box;position:relative}.foogallery.fg-justified .fg-image,.foogallery.fg-justified .fg-item,.foogallery.fg-justified .fg-item-inner,.foogallery.fg-justified .fg-thumb{box-sizing:border-box;display:block;margin:0;padding:0}.fg-justified .fg-item{visibility:visible;position:absolute}.fg-justified .fg-item-inner{position:relative;width:100%;height:100%}.fg-justified .fg-thumb{position:relative;overflow:hidden}.fg-justified .fg-image{z-index:1}.fg-justified .fg-item.fg-positioned .fg-image-wrap,.fg-justified .fg-item.fg-positioned .fg-thumb{width:100%;height:100%}.fg-justified .fg-item.fg-positioned .fg-image{width:100%;height:auto;min-height:100%;top:50%;transform:translateY(-50%)}.fg-simple_portfolio{display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;align-content:center}.fg-simple_portfolio .fg-item{position:relative;flex:1;margin:10px;min-width:250px;max-width:250px}.fg-simple_portfolio .fg-item-inner{display:flex;flex-direction:column;margin:0;height:100%}.fg-simple_portfolio.fg-captions-top .fg-item-inner{flex-direction:column-reverse}.fg-simple_portfolio .fg-image{height:auto;width:100%}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption{visibility:visible;opacity:1;font-size:13px;position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;width:100%;height:100%;text-transform:none;transform:none;transition:none;background-color:transparent;border-style:solid;border-color:transparent}.foogallery.fg-simple_portfolio .fg-item-inner:hover .fg-caption{transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner{display:block;top:auto;bottom:auto;left:auto;right:auto;width:auto;height:auto;border:none;transform:none;transition:none}.foogallery.fg-simple_portfolio .fg-item-inner .fg-caption-inner:before{display:none}.foogallery.fg-simple_portfolio.fg-caption-hover .fg-item-inner .fg-thumb:before{display:block}.foogallery.fg-simple_portfolio.fg-caption-always .fg-item-inner:hover .fg-caption{visibility:visible;opacity:1}.fg-simple_portfolio .fg-caption-title{text-align:left}.fg-simple_portfolio .fg-caption-desc{text-align:left}.fg-simple_portfolio.fg-dark .fg-caption,.fg-simple_portfolio.fg-light .fg-caption{color:#828282}.fg-simple_portfolio.fg-dark .fg-caption a,.fg-simple_portfolio.fg-light .fg-caption a{color:#828282;border-bottom:1px solid #828282}.fg-simple_portfolio.fg-dark .fg-caption a:hover,.fg-simple_portfolio.fg-light .fg-caption a:hover{border-bottom:none}.fg-simple_portfolio.fg-light .fg-caption-title,.fg-simple_portfolio.fg-light .fg-caption-title a{color:#222}.fg-simple_portfolio.fg-dark .fg-caption-title,.fg-simple_portfolio.fg-dark .fg-caption-title a{color:#fff}.fg-simple_portfolio.fg-light .fg-caption-title a{border-bottom:1px solid #222}.fg-simple_portfolio.fg-dark .fg-caption-title a{border-bottom:1px solid #fff}.fg-simple_portfolio .fg-caption{border-width:0}.fg-simple_portfolio .fg-caption-title+.fg-caption-desc{margin-top:4px}.fg-simple_portfolio.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.fg-simple_portfolio.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.fg-simple_portfolio.fg-border-medium .fg-caption{border-width:10px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.fg-simple_portfolio.fg-border-thick .fg-caption{border-width:16px 0 0 0}.fg-simple_portfolio.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.fg-simple_portfolio.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.foogallery.fg-preset.fg-polaroid .fg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .35s,background-color .65s}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n+1){-webkit-transform:rotate(3deg);transform:rotate(3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(2n){-webkit-transform:rotate(-3deg);transform:rotate(-3deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(3n){-webkit-transform:rotate(1deg);transform:rotate(1deg)}.foogallery.fg-preset.fg-polaroid .fg-item:nth-child(5n){-webkit-transform:rotate(-2deg);transform:rotate(-2deg)}.foogallery.fg-preset.fg-polaroid .fg-item:hover{-webkit-transform:rotate(0);transform:rotate(0)}.foogallery.fg-preset.fg-polaroid .fg-caption{position:relative;width:auto;font-family:"Segoe Print Regular",-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.foogallery.fg-preset.fg-polaroid .fg-caption-inner,.foogallery.fg-preset.fg-polaroid .fg-caption-title{position:relative;width:auto}.foogallery.fg-preset.fg-polaroid .fg-caption-title{text-align:center}.foogallery.fg-preset.fg-polaroid .fg-caption-desc{display:none}.foogallery.fg-light.fg-preset.fg-polaroid .fg-caption-title,.foogallery.fg-preset.fg-polaroid .fg-caption-title{color:#333}.foogallery.fg-dark.fg-preset.fg-polaroid .fg-caption-title{color:#fff}.foogallery.fg-preset.fg-polaroid .fg-caption{border-style:solid;border-color:transparent;border-width:10px}.foogallery.fg-preset.fg-polaroid .fg-caption-title+.fg-caption-desc{margin-top:4px}.foogallery.fg-preset.fg-polaroid.fg-border-thin .fg-caption{border-width:10px 4px 4px 4px}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thin .fg-caption{border-width:4px 4px 10px 4px}.foogallery.fg-preset.fg-polaroid.fg-border-medium .fg-caption{border-width:10px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-medium .fg-caption{border-width:0 0 10px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption{border-width:16px 0 0 0}.foogallery.fg-preset.fg-polaroid.fg-captions-top.fg-border-thick .fg-caption{border-width:0 0 16px 0}.foogallery.fg-preset.fg-polaroid.fg-border-thick .fg-caption-title+.fg-caption-desc{margin-top:10px}.fg-image-viewer{display:block;font-family:'Open Sans','Helvetica Neue',Arial,sans-serif}.fg-image-viewer.fg-left{text-align:left}.fg-image-viewer.fg-center{text-align:center}.fg-image-viewer.fg-right{text-align:right}.fiv-inner{position:relative;display:inline-block;max-width:100%;overflow:hidden;z-index:6}.fiv-inner .fiv-inner-container{position:relative;overflow:hidden;max-width:100%;border-style:solid;border-width:0;border-bottom-width:4px;z-index:5}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:active,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:hover,.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb:visited{position:relative;display:block;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item{position:absolute;visibility:visible;opacity:1;border:none;outline:0;text-decoration:none;box-shadow:none;max-width:100%}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item:first-of-type{position:relative}.fg-image-viewer .fiv-inner .fiv-inner-container .fg-item .fg-thumb img{display:block;max-width:100%;height:auto;border:none;outline:0;text-decoration:none}.fg-image-viewer .fiv-inner .fiv-ctrls{display:block;text-align:center;font-size:14px;border-style:solid;line-height:34px}.fg-image-viewer .fiv-inner .fiv-ctrls:after{content:'';display:block;clear:both}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count{display:inline-block;font-weight:400;margin:0}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:none;min-width:80px;position:relative;overflow:hidden;transition:background-color .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{display:block;position:absolute;font-size:24px;line-height:30px;top:0;left:0;width:100%;transform:translateY(0);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover:before,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover:before{transform:translateY(-100%)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev span{display:block;width:100%;transform:translateY(100%);transition:transform .3s}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:hover span,.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:hover span{transform:translateY(0)}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev{float:left}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-prev:before{content:'\2190'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next{float:right}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-next:before{content:'\2192'}.fg-image-viewer .fiv-inner .fiv-ctrls .fiv-count span{margin:0 4px}/*!* Theme - Default (Light) *!*//*!* Theme - Dark *!*/.foogallery.fg-image-viewer.fg-caption-always .fg-item-inner .fg-caption{padding:0;border:none;background:#000;background:-moz-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:-webkit-linear-gradient(left,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%);background:linear-gradient(to right,rgba(0,0,0,.8) 0,rgba(0,0,0,.8) 60%,rgba(0,0,0,0) 100%)}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-desc{padding:10px 10px 10px 10px}.foogallery.fg-image-viewer.fg-caption-always .fg-caption-title+.fg-caption-desc{padding:0 10px 10px 10px}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-light .fiv-inner .fiv-inner-container{background-color:#fff;color:#333;border-color:#fff}.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-light .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#f2f2f2}.fg-image-viewer.fg-light .fiv-next,.fg-image-viewer.fg-light .fiv-prev{box-shadow:inset 0 0 0 1px #ddd}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-count,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev,.fg-image-viewer.fg-dark .fiv-inner .fiv-inner-container{background-color:#333;color:#fff;border-color:#333}.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-next:hover,.fg-image-viewer.fg-dark .fiv-inner .fiv-ctrls .fiv-prev:hover{background-color:#444}.fg-image-viewer.fg-dark .fiv-next,.fg-image-viewer.fg-dark .fiv-prev{box-shadow:inset 0 0 0 1px #222}.foogallery.fg-image-viewer.fg-border-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin .fg-item-inner{border-width:0}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-inner-container{border-width:4px}.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-inner-container{border-width:10px}.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-inner-container{border-width:16px}.foogallery.fg-image-viewer .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-medium .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thick .fiv-ctrls,.foogallery.fg-image-viewer.fg-border-thin .fiv-ctrls{border-top-width:1px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-round-small .fiv-inner{border-radius:5px}.foogallery.fg-image-viewer.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-round-small .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-small .fiv-prev,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-small .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-round-medium .fiv-inner{border-radius:10px}.foogallery.fg-image-viewer.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-round-medium .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-medium .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-medium .fiv-prev,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-medium .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-round-large .fiv-inner{border-radius:15px}.foogallery.fg-image-viewer.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-round-large .fg-item-inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.foogallery.fg-image-viewer.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thin.fg-round-large .fiv-prev{border-radius:11px}.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-medium.fg-round-large .fiv-prev{border-radius:5px}.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fg-item-inner,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-next,.foogallery.fg-image-viewer.fg-border-thick.fg-round-large .fiv-prev{border-radius:3px}.foogallery.fg-image-viewer.fg-round-full .fiv-inner,.foogallery.fg-image-viewer.fg-round-full .fiv-next,.foogallery.fg-image-viewer.fg-round-full .fiv-prev{border-radius:50%}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fg-item-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fg-item-inner{box-shadow:none}.foogallery.fg-image-viewer.fg-light.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #ddd}.foogallery.fg-image-viewer.fg-dark.fg-shadow-outline .fiv-inner{box-shadow:0 0 0 1px #222}.foogallery.fg-image-viewer.fg-dark.fg-shadow-small .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-small .fiv-inner{box-shadow:0 1px 4px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-medium .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-medium .fiv-inner{box-shadow:0 1px 10px 0 rgba(0,0,0,.5)}.foogallery.fg-image-viewer.fg-dark.fg-shadow-large .fiv-inner,.foogallery.fg-image-viewer.fg-light.fg-shadow-large .fiv-inner{box-shadow:0 1px 16px 0 rgba(0,0,0,.5)}.foogallery.fg-thumbnail,.foogallery.fg-thumbnail.fg-center{text-align:center}.foogallery.fg-thumbnail.fg-left{text-align:left}.foogallery.fg-thumbnail.fg-right{text-align:right}.foogallery.fg-thumbnail.fg-float-left{float:left;width:auto}.foogallery.fg-thumbnail.fg-float-right{float:right;width:auto}.foogallery.fg-thumbnail .fg-item{display:inline-block;vertical-align:top;max-width:100%}.foogallery.fg-thumbnail .fg-image{max-width:100%}.foogallery.fg-thumbnail .fg-st-hidden{display:none}
extensions/default-templates/shared/js/foogallery.js CHANGED
@@ -58,9 +58,9 @@
58
);
59
/*!
60
* FooGallery.utils - Contains common utility methods and classes used in our plugins.
61
- * @version 0.0.8
62
* @link https://github.com/steveush/foo-utils#readme
63
- * @copyright Steve Usher 2018
64
* @license Released under the GPL-3.0 license.
65
*/
66
/**
@@ -111,7 +111,7 @@
111
* @name version
112
* @type {string}
113
*/
114
- version: '0.0.8',
115
};
116
117
/**
@@ -152,12 +152,12 @@
152
* @ignore
153
*/
154
function split(version){
155
- var res = version.split('.');
156
- for(var i = 0, len = res.length; i < len; i++){
157
- res[i] = parseInt(res[i]);
158
- if (isNaN(res[i])) res[i] = 0;
159
}
160
- return res;
161
}
162
163
// get the base numeric arrays for each version
@@ -170,12 +170,12 @@
170
171
// perform the actual comparison
172
for (var i = 0; i < v1parts.length; ++i) {
173
- if (v2parts.length == i) return 1;
174
- if (v1parts[i] == v2parts[i]) continue;
175
if (v1parts[i] > v2parts[i]) return 1;
176
else return -1;
177
}
178
- if (v1parts.length != v2parts.length) return -1;
179
return 0;
180
};
181
@@ -207,7 +207,7 @@
207
})(jQuery);
208
(function ($, _){
209
// only register methods if this version is the current version
210
- if (_.version !== '0.0.8') return;
211
212
/**
213
* @summary Contains common type checking utility methods.
@@ -276,7 +276,7 @@
276
_.is.element = function (value) {
277
return typeof HTMLElement === 'object'
278
? value instanceof HTMLElement
279
- : !!value && typeof value === 'object' && value !== null && value.nodeType === 1 && typeof value.nodeName === 'string';
280
};
281
282
/**
@@ -317,7 +317,7 @@
317
*/
318
_.is.empty = function(value){
319
if (_.is.undef(value) || value === null) return true;
320
- if (_.is.number(value) && value == 0) return true;
321
if (_.is.boolean(value) && value === false) return true;
322
if (_.is.string(value) && value.length === 0) return true;
323
if (_.is.array(value) && value.length === 0) return true;
@@ -513,7 +513,7 @@
513
*/
514
_.is.size = function(value){
515
if (!(_.is.string(value) && !_.is.empty(value)) && !_.is.number(value)) return false;
516
- return /^(auto|none|(?:[\d\.]*)+?(?:%|px|mm|q|cm|in|pt|pc|em|ex|ch|rem|vh|vw|vmin|vmax)?)#x2F;.test(value);
517
};
518
519
/**
@@ -561,7 +561,7 @@
561
);
562
(function($, _, _is){
563
// only register methods if this version is the current version
564
- if (_.version !== '0.0.8') return;
565
566
/**
567
* @memberof FooGallery.utils
@@ -724,6 +724,54 @@
724
return Array.prototype.slice.call(args);
725
};
726
727
/**
728
* @summary Checks the given `value` and ensures a function is returned.
729
* @memberof FooGallery.utils.fn
@@ -1096,7 +1144,7 @@
1096
);
1097
(function(_, _is){
1098
// only register methods if this version is the current version
1099
- if (_.version !== '0.0.8') return;
1100
1101
/**
1102
* @summary Contains common url utility methods.
@@ -1231,7 +1279,7 @@
1231
);
1232
(function (_, _is, _fn) {
1233
// only register methods if this version is the current version
1234
- if (_.version !== '0.0.8') return;
1235
1236
/**
1237
* @summary Contains common string utility methods.
@@ -1546,7 +1594,7 @@
1546
);
1547
(function($, _, _is, _fn, _str){
1548
// only register methods if this version is the current version
1549
- if (_.version !== '0.0.8') return;
1550
1551
/**
1552
* @summary Contains common object utility methods.
@@ -1878,7 +1926,7 @@
1878
);
1879
(function($, _, _is){
1880
// only register methods if this version is the current version
1881
- if (_.version !== '0.0.8') return;
1882
1883
// any methods that have dependencies but don't fall into a specific subset or namespace can be added here
1884
@@ -1969,6 +2017,188 @@
1969
}
1970
};
1971
1972
})(
1973
// dependencies
1974
FooGallery.utils.$,
@@ -1977,7 +2207,7 @@
1977
);
1978
(function($, _, _is){
1979
// only register methods if this version is the current version
1980
- if (_.version !== '0.0.8') return;
1981
1982
/**
1983
* @summary Contains common utility methods and members for the CSS transition property.
@@ -2150,12 +2380,11 @@
2150
);
2151
(function ($, _, _is, _obj, _fn) {
2152
// only register methods if this version is the current version
2153
- if (_.version !== '0.0.8') return;
2154
2155
/**
2156
* @summary A base class providing some helper methods for prototypal inheritance.
2157
- * @memberof FooGallery.utils
2158
- * @constructs Class
2159
* @description This is a base class for making prototypal inheritance simpler to work with. It provides an easy way to inherit from another class and exposes a `_super` method within the scope of any overriding methods that allows a simple way to execute the overridden function.
2160
*
2161
* Have a look at the {@link FooGallery.utils.Class.extend|extend} and {@link FooGallery.utils.Class.override|override} method examples to see some basic usage.
@@ -2288,15 +2517,189 @@
2288
FooGallery.utils.obj,
2289
FooGallery.utils.fn
2290
);
2291
(function($, _, _is){
2292
// only register methods if this version is the current version
2293
- if (_.version !== '0.0.8') return;
2294
2295
_.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds */{
2296
/**
2297
* @summary A simple bounding rectangle class.
2298
- * @memberof FooGallery.utils
2299
- * @constructs Bounds
2300
* @augments FooGallery.utils.Class
2301
* @borrows FooGallery.utils.Class.extend as extend
2302
* @borrows FooGallery.utils.Class.override as override
@@ -2392,13 +2795,12 @@
2392
);
2393
(function($, _, _is, _fn){
2394
// only register methods if this version is the current version
2395
- if (_.version !== '0.0.8') return;
2396
2397
_.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory */{
2398
/**
2399
* @summary A factory for classes allowing them to be registered and created using a friendly name.
2400
- * @memberof FooGallery.utils
2401
- * @constructs Factory
2402
* @description This class allows other classes to register themselves for use at a later time. Depending on how you intend to use the registered classes you can also specify a load and execution order through the `priority` parameter of the {@link FooGallery.utils.Factory#register|register} method.
2403
* @augments FooGallery.utils.Class
2404
* @borrows FooGallery.utils.Class.extend as extend
@@ -2716,7 +3118,7 @@
2716
);
2717
(function(_, _fn, _str){
2718
// only register methods if this version is the current version
2719
- if (_.version !== '0.0.8') return;
2720
2721
// this is done to handle Content Security in Chrome and other browsers blocking access to the localStorage object under certain configurations.
2722
// see: https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document
@@ -2727,8 +3129,7 @@
2727
_.Debugger = _.Class.extend(/** @lends FooGallery.utils.Debugger */{
2728
/**
2729
* @summary A debug utility class that can be enabled across sessions using the given `key` by storing its state in `localStorage`.
2730
- * @memberof FooGallery.utils
2731
- * @constructs Debugger
2732
* @param {string} key - The key to use to store the debug state in `localStorage`.
2733
* @description This class allows you to write additional debug info to the console within your code which by default is not actually output. You can then enable the debugger and it will start to output the results to the console.
2734
*
@@ -2821,152 +3222,10 @@
2821
FooGallery.utils.fn,
2822
FooGallery.utils.str
2823
);
2824
- (function($, _, _is){
2825
- // only register methods if this version is the current version
2826
- if (_.version !== '0.0.8') return;
2827
-
2828
- _.Throttle = _.Class.extend(/** @lends FooGallery.utils.Throttle */{
2829
- /**
2830
- * @summary A timer to throttle the execution of code.
2831
- * @memberof FooGallery.utils
2832
- * @constructs
2833
- * @param {number} [idle=0] - The idle time, in milliseconds, that must pass before executing the callback supplied to the {@link FooGallery.utils.Throttle#limit|limit} method.
2834
- * @augments FooGallery.utils.Class
2835
- * @borrows FooGallery.utils.Class.extend as extend
2836
- * @borrows FooGallery.utils.Class.override as override
2837
- * @description This class is basically a wrapper around the {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout|window.setTimeout} and {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout|window.clearTimeout} functions. It was created to help throttle the execution of code in event handlers that could be called multiple times per second such as the window resize event. It is meant to limit the execution of expensive code until the specified idle time has lapsed.
2838
- *
2839
- * Take a look at the examples for the {@link FooGallery.utils.Throttle#limit|limit} and {@link FooGallery.utils.Throttle#clear|clear} methods for basic usage.
2840
- * @example <caption>The below shows how you can use this class to prevent expensive code being executed with every call to your window resize handler. If you run this example resize your browser to see when the messages are logged.</caption>{@run true}
2841
- * var throttle = new FooGallery.utils.Throttle( 50 );
2842
- *
2843
- * $(window).on("resize", function(){
2844
- *
2845
- * throttle.limit(function(){
2846
- * console.log( "Only called when resizing has stopped for at least 50 milliseconds." );
2847
- * });
2848
- *
2849
- * });
2850
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout|WindowTimers.setTimeout() - Web APIs | MDN}
2851
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout|WindowTimers.clearTimeout() - Web APIs | MDN}
2852
- */
2853
- construct: function(idle){
2854
- /**
2855
- * @summary The id from the last call to {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout|window.setTimeout}.
2856
- * @type {?number}
2857
- * @readonly
2858
- * @default null
2859
- */
2860
- this.id = null;
2861
- /**
2862
- * @summary Whether or not there is an active timer.
2863
- * @type {boolean}
2864
- * @readonly
2865
- * @default false
2866
- */
2867
- this.active = false;
2868
- /**
2869
- * @summary The idle time, in milliseconds, the timer should wait before executing the callback supplied to the {@link FooGallery.utils.Throttle#limit|limit} method.
2870
- * @type {number}
2871
- * @readonly
2872
- * @default 0
2873
- */
2874
- this.idle = _is.number(idle) ? idle : 0;
2875
- },
2876
- /**
2877
- * @summary Starts a new timer clearing any previously set and executes the <code>callback</code> once it expires.
2878
- * @instance
2879
- * @param {function} callback - The function to call once the timer expires.
2880
- * @example <caption>In the below example the <code>callback</code> function will only be executed once despite the repeated calls to the {@link FooGallery.utils.Throttle#limit|limit} method as each call resets the idle timer.</caption>{@run true}
2881
- * // create a new throttle
2882
- * var throttle = new FooGallery.utils.Throttle( 50 );
2883
- *
2884
- * // this `for` loop represents something like the window resize event that could call your handler multiple times a second
2885
- * for (var i = 0, max = 5; i < max; i++){
2886
- *
2887
- * throttle.limit( function(){
2888
- * console.log( "Only called once, after the idle timer lapses" );
2889
- * } );
2890
- *
2891
- * }
2892
- */
2893
- limit: function(callback){
2894
- if (!_is.fn(callback)) return;
2895
- this.clear();
2896
- var self = this;
2897
- this.active = true;
2898
- this.id = setTimeout(function(){
2899
- self.active = false;
2900
- self.id = null;
2901
- callback();
2902
- }, this.idle);
2903
- },
2904
- /**
2905
- * @summary Clear any previously set timer and prevent the execution of its' callback.
2906
- * @instance
2907
- * @example <caption>The below shows how to cancel an active throttle and prevent the execution of it's callback.</caption>{@run true}
2908
- * // create a new throttle
2909
- * var throttle = new FooGallery.utils.Throttle( 50 );
2910
- *
2911
- * // this `for` loop represents something like the window resize event that could call your handler multiple times a second
2912
- * for (var i = 0, max = 5; i < max; i++){
2913
- *
2914
- * throttle.limit( function(){
2915
- * console.log( "I'm never called" );
2916
- * } );
2917
- *
2918
- * }
2919
- *
2920
- * // cancel the current throttle timer
2921
- * throttle.clear();
2922
- */
2923
- clear: function(){
2924
- if (_is.number(this.id)){
2925
- clearTimeout(this.id);
2926
- this.active = false;
2927
- this.id = null;
2928
- }
2929
- }
2930
- });
2931
-
2932
- })(
2933
- // dependencies
2934
- FooGallery.utils.$,
2935
- FooGallery.utils,
2936
- FooGallery.utils.is
2937
- );
2938
(function ($, _, _utils, _is, _fn) {
2939
2940
_.debug = new _utils.Debugger("__FooGallery__");
2941
2942
- /**
2943
- * @summary Simple utility method to convert space delimited strings of CSS class names into a CSS selector.
2944
- * @memberof FooGallery.utils
2945
- * @function selectify
2946
- * @param {(string|string[]|object)} classes - A single space delimited string of CSS class names to convert or an array of them with each item being included in the selector using the OR (`,`) syntax as a separator. If an object is supplied the result will be an object with the same property names but the values converted to selectors.
2947
- * @returns {(object|string)}
2948
- */
2949
- _utils.selectify = function (classes) {
2950
- if (_is.empty(classes)) return null;
2951
- if (_is.hash(classes)) {
2952
- var result = {}, selector;
2953
- for (var name in classes) {
2954
- if (!classes.hasOwnProperty(name)) continue;
2955
- if (selector = _utils.selectify(classes[name])) {
2956
- result[name] = selector;
2957
- }
2958
- }
2959
- return result;
2960
- }
2961
- if (_is.string(classes) || _is.array(classes)) {
2962
- if (_is.string(classes)) classes = [classes];
2963
- return $.map(classes, function (str) {
2964
- return _is.string(str) ? "." + str.split(/\s/g).join(".") : null;
2965
- }).join(",");
2966
- }
2967
- return null;
2968
- };
2969
-
2970
/**
2971
* @summary The url of an empty 1x1 pixel image used as the default value for the `placeholder` and `error` {@link FooGallery.defaults|options}.
2972
* @memberof FooGallery
@@ -3004,67 +3263,6 @@
3004
}).get());
3005
};
3006
3007
- _.parseSrc = function (src, srcWidth, srcHeight, srcset, renderWidth, renderHeight) {
3008
- if (!_is.string(src)) return null;
3009
- // if there is no srcset just return the src
3010
- if (!_is.string(srcset)) return src;
3011
-
3012
- // parse the srcset into objects containing the url, width, height and pixel density for each supplied source
3013
- var list = $.map(srcset.replace(/(\s[\d.]+[whx]),/g, '$1 @,@ ').split(' @,@ '), function (val) {
3014
- return {
3015
- url: /^\s*(\S*)/.exec(val)[1],
3016
- w: parseFloat((/\S\s+(\d+)w/.exec(val) || [0, Infinity])[1]),
3017
- h: parseFloat((/\S\s+(\d+)h/.exec(val) || [0, Infinity])[1]),
3018
- x: parseFloat((/\S\s+([\d.]+)x/.exec(val) || [0, 1])[1])
3019
- };
3020
- });
3021
-
3022
- // if there is no items parsed from the srcset then just return the src
3023
- if (!list.length) return src;
3024
-
3025
- // add the current src into the mix by inspecting the first parsed item to figure out how to handle it
3026
- list.unshift({
3027
- url: src,
3028
- w: list[0].w !== Infinity && list[0].h === Infinity ? srcWidth : Infinity,
3029
- h: list[0].h !== Infinity && list[0].w === Infinity ? srcHeight : Infinity,
3030
- x: 1
3031
- });
3032
-
3033
- // get the current viewport info and use it to determine the correct src to load
3034
- var dpr = window.devicePixelRatio || 1,
3035
- area = {w: renderWidth * dpr, h: renderHeight * dpr, x: dpr},
3036
- property;
3037
-
3038
- // first check each of the viewport properties against the max values of the same properties in our src array
3039
- // only src's with a property greater than the viewport or equal to the max are kept
3040
- for (property in area) {
3041
- if (!area.hasOwnProperty(property)) continue;
3042
- list = $.grep(list, (function (prop, limit) {
3043
- return function (item) {
3044
- return item[prop] >= area[prop] || item[prop] === limit;
3045
- };
3046
- })(property, Math.max.apply(null, $.map(list, function (item) {
3047
- return item[property];
3048
- }))));
3049
- }
3050
-
3051
- // next reduce our src array by comparing the viewport properties against the minimum values of the same properties of each src
3052
- // only src's with a property equal to the minimum are kept
3053
- for (property in area) {
3054
- if (!area.hasOwnProperty(property)) continue;
3055
- list = $.grep(list, (function (prop, limit) {
3056
- return function (item) {
3057
- return item[prop] === limit;
3058
- };
3059
- })(property, Math.min.apply(null, $.map(list, function (item) {
3060
- return item[property];
3061
- }))));
3062
- }
3063
-
3064
- // return the first url as it is the best match for the current viewport
3065
- return list[0].url;
3066
- };
3067
-
3068
/**
3069
* @summary Expose FooGallery as a jQuery plugin.
3070
* @memberof external:"jQuery.fn"#
@@ -3116,8 +3314,8 @@
3116
*/
3117
$.fn.foogallery = function (options, ready) {
3118
return this.each(function (i, element) {
3119
if (_is.string(options)) {
3120
- var template = $.data(element, _.dataTemplate);
3121
if (template instanceof _.Template) {
3122
switch (options) {
3123
case "layout":
@@ -3129,11 +3327,21 @@
3129
}
3130
}
3131
} else {
3132
- _.template.make(options, element).initialize().then(function (template) {
3133
- if (_is.fn(ready)) {
3134
- ready(template);
3135
- }
3136
- });
3137
}
3138
});
3139
};
@@ -3164,32 +3372,6 @@
3164
return complete;
3165
};
3166
3167
- /**
3168
- * @summary Gets the closest ancestor element that is scrollable.
3169
- * @see https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
3170
- * @param {(string|Element|jQuery)} element - The element to find the scrollable parent for.
3171
- * @param {boolean} [includeHidden=false] - Whether or not to include elements with overflow:hidden set on them.
3172
- * @returns {jQuery}
3173
- */
3174
- _.scrollParent = function(element, includeHidden){
3175
- var $elem = _is.jq(element) ? element : $(element),
3176
- position = $elem.css( "position" ),
3177
- excludeStaticParent = position === "absolute",
3178
- overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
3179
- scrollParent = $elem.parents().filter( function() {
3180
- var parent = $( this );
3181
- if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
3182
- return false;
3183
- }
3184
- return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
3185
- parent.css( "overflow-x" ) );
3186
- } ).eq( 0 );
3187
-
3188
- return position === "fixed" || !scrollParent.length || scrollParent.is( "html" ) ?
3189
- $( $elem[ 0 ].ownerDocument || document ) :
3190
- scrollParent;
3191
- };
3192
-
3193
})(
3194
FooGallery.$,
3195
FooGallery,
@@ -3839,9 +4021,9 @@
3839
* @summary The jQuery object for the template containers scroll parent.
3840
* @memberof FooGallery.Template#
3841
* @name $scrollParent
3842
- * @type {jQuery}
3843
*/
3844
- self.$scrollParent = $();
3845
/**
3846
* @summary The options for the template.
3847
* @memberof FooGallery.Template#
@@ -3922,7 +4104,7 @@
3922
self._initialize = null;
3923
self.initializing = false;
3924
self.initialized = false;
3925
- self.destroying = false;
3926
self.destroyed = false;
3927
self._undo = {
3928
classes: "",
@@ -3946,376 +4128,411 @@
3946
* @fires FooGallery.Template~"pre-init.foogallery"
3947
* @fires FooGallery.Template~"init.foogallery"
3948
* @fires FooGallery.Template~"post-init.foogallery"
3949
* @fires FooGallery.Template~"ready.foogallery"
3950
*/
3951
initialize: function (parent) {
3952
var self = this;
3953
if (_is.promise(self._initialize)) return self._initialize;
3954
- parent = _is.jq(parent) ? parent : $(parent);
3955
return self._initialize = $.Deferred(function (def) {
3956
- self.initializing = true;
3957
- if (parent.length === 0 && self.$el.parent().length === 0) {
3958
- def.reject("A parent element is required.");
3959
- return;
3960
- }
3961
- if (self.$el.length === 0) {
3962
- self.$el = self.create();
3963
- self._undo.create = true;
3964
- }
3965
- if (parent.length > 0) {
3966
- self.$el.appendTo(parent);
3967
- }
3968
- self.$scrollParent = _.scrollParent(self.$el);
3969
-
3970
- var queue = $.Deferred(), promise = queue.promise(), existing;
3971
- if (self.$el.length > 0 && (existing = self.$el.data(_.dataTemplate)) instanceof _.Template) {
3972
- promise = promise.then(function () {
3973
- return existing.destroy().then(function () {
3974
- self.$el.data(_.dataTemplate, self);
3975
- });
3976
- });
3977
} else {
3978
- self.$el.data(_.dataTemplate, self);
3979
}
3980
- promise.then(function () {
3981
- if (self.destroying) return _fn.rejectWith("destroy in progress");
3982
- // at this point we have our container element free of pre-existing instances so let's bind any event listeners supplied by the .on option
3983
- if (!_is.empty(self.opt.on)) {
3984
- self.$el.on(self.opt.on);
3985
- }
3986
- self._undo.classes = self.$el.attr("class");
3987
- self._undo.style = self.$el.attr("style");
3988
-
3989
- // ensure the container has it's required CSS classes
3990
- if (!self.$el.is(self.sel.container)) {
3991
- self.$el.addClass(self.cls.container);
3992
- }
3993
- var selector = _utils.selectify(self.opt.classes);
3994
- if (selector != null && !self.$el.is(selector)) {
3995
- self.$el.addClass(self.opt.classes);
3996
- }
3997
-
3998
- // if the container currently has no children make them
3999
- if (self.$el.children().not(self.sel.item.elem).length == 0) {
4000
- self.$el.append(self.createChildren());
4001
- self._undo.children = true;
4002
- }
4003
-
4004
- /**
4005
- * @summary Raised before the template is fully initialized.
4006
- * @event FooGallery.Template~"pre-init.foogallery"
4007
- * @type {jQuery.Event}
4008
- * @param {jQuery.Event} event - The jQuery.Event object for the current event.
4009
- * @param {FooGallery.Template} template - The template raising the event.
4010
- * @returns {Promise} Resolved once the pre-initialization work is complete, rejected if an error occurs or execution is prevented.
4011
- * @description At this point in the initialization chain the {@link FooGallery.Template#opt|opt} property has not undergone any additional parsing and is just the result of the {@link FooGallery.defaults|default options} being extended with any user supplied ones.
4012
- * @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4013
- * $(".foogallery").foogallery({
4014
- * on: {
4015
- * "pre-init.foogallery": function(event, template){
4016
- * // do something
4017
- * }
4018
- * }
4019
- * });
4020
- * @example {@caption Calling the `preventDefault` method on the `event` object will prevent the template being initialized.}
4021
- * $(".foogallery").foogallery({
4022
- * on: {
4023
- * "pre-init.foogallery": function(event, template){
4024
- * if ("some condition"){
4025
- * // stop the template being initialized
4026
- * event.preventDefault();
4027
- * }
4028
- * }
4029
- * }
4030
- * });
4031
- */
4032
- var e = self.raise("pre-init");
4033
- if (e.isDefaultPrevented()) return _fn.rejectWith("pre-init default prevented");
4034
- }).then(function () {
4035
- if (self.destroying) return _fn.rejectWith("destroy in progress");
4036
- // checks the delay option and if it is greater than 0 waits for that amount of time before continuing
4037
- if (self.opt.delay <= 0) return _fn.resolved;
4038
- return $.Deferred(function (wait) {
4039
- self._delay = setTimeout(function () {
4040
- self._delay = null;
4041
- wait.resolve();
4042
- }, self.opt.delay);
4043
- }).promise();
4044
- }).then(function () {
4045
- if (self.destroying) return _fn.rejectWith("destroy in progress");
4046
- /**
4047
- * @summary Raised before the template is initialized but after any pre-initialization work is complete.
4048
- * @event FooGallery.Template~"init.foogallery"
4049
- * @type {jQuery.Event}
4050
- * @param {jQuery.Event} event - The jQuery.Event object for the current event.
4051
- * @param {FooGallery.Template} template - The template raising the event.
4052
- * @returns {Promise} Resolved once the initialization work is complete, rejected if an error occurs or execution is prevented.
4053
- * @description At this point in the initialization chain all additional option parsing has been completed but the base components such as the items or state are not yet initialized.
4054
- * @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4055
- * $(".foogallery").foogallery({
4056
- * on: {
4057
- * "init.foogallery": function(event, template){
4058
- * // do something
4059
- * }
4060
- * }
4061
- * });
4062
- * @example {@caption Calling the `preventDefault` method on the `event` object will prevent the template being initialized.}
4063
- * $(".foogallery").foogallery({
4064
- * on: {
4065
- * "init.foogallery": function(event, template){
4066
- * if ("some condition"){
4067
- * // stop the template being initialized
4068
- * event.preventDefault();
4069
- * }
4070
- * }
4071
- * }
4072
- * });
4073
- * @example {@caption You can also prevent the default logic and replace it with your own by calling the `preventDefault` method on the `event` object and returning a promise.}
4074
- * $(".foogallery").foogallery({
4075
- * on: {
4076
- * "init.foogallery": function(event, template){
4077
- * // stop the default logic
4078
- * event.preventDefault();
4079
- * // you can execute the default logic by calling the handler directly yourself
4080
- * // var promise = template.onInit();
4081
- * // replace the default logic with your own
4082
- * return Promise;
4083
- * }
4084
- * }
4085
- * });
4086
- */
4087
- var e = self.raise("init");
4088
- if (e.isDefaultPrevented()) return _fn.rejectWith("init default prevented");
4089
- return self.items.fetch();
4090
- }).then(function () {
4091
- if (self.destroying) return _fn.rejectWith("destroy in progress");
4092
- /**
4093
- * @summary Raised after the template is initialized but before any post-initialization work is complete.
4094
- * @event FooGallery.Template~"post-init.foogallery"
4095
- * @type {jQuery.Event}
4096
- * @param {jQuery.Event} event - The jQuery.Event object for the current event.
4097
- * @param {FooGallery.Template} template - The template raising the event.
4098
- * @returns {Promise} Resolved once the post-initialization work is complete, rejected if an error occurs or execution is prevented.
4099
- * @description At this point in the initialization chain all options, objects and elements required by the template have been parsed or created however the initial state has not been set yet and no items have been loaded.
4100
- * @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4101
- * $(".foogallery").foogallery({
4102
- * on: {
4103
- * "post-init.foogallery": function(event, template){
4104
- * // do something
4105
- * }
4106
- * }
4107
- * });
4108
- * @example {@caption Calling the `preventDefault` method on the `event` object will prevent the template being initialized.}
4109
- * $(".foogallery").foogallery({
4110
- * on: {
4111
- * "post-init.foogallery": function(event, template){
4112
- * if ("some condition"){
4113
- * // stop the template being initialized
4114
- * event.preventDefault();
4115
- * }
4116
- * }
4117
- * }
4118
- * });
4119
- * @example {@caption You can also prevent the default logic and replace it with your own by calling the `preventDefault` method on the `event` object and returning a promise.}
4120
- * $(".foogallery").foogallery({
4121
- * on: {
4122
- * "post-init.foogallery": function(event, template){
4123
- * // stop the default logic
4124
- * event.preventDefault();
4125
- * // you can execute the default logic by calling the handler directly yourself
4126
- * // var promise = template.onPostInit();
4127
- * // replace the default logic with your own
4128
- * return Promise;
4129
- * }
4130
- * }
4131
- * });
4132
- */
4133
- var e = self.raise("post-init");
4134
- if (e.isDefaultPrevented()) return _fn.rejectWith("post-init default prevented");
4135
- var state = self.state.parse();
4136
- self.state.set(_is.empty(state) ? self.state.initial() : state);
4137
- self.$scrollParent.on("scroll" + self.namespace, {self: self}, self.throttle(self.onWindowScroll, self.opt.throttle));
4138
- $(window).on("popstate" + self.namespace, {self: self}, self.onWindowPopState);
4139
- }).then(function () {
4140
- if (self.destroying) return _fn.rejectWith("destroy in progress");
4141
- /**
4142
- * @summary Raised after the template is fully initialized but before the first load occurs.
4143
- * @event FooGallery.Template~"first-load.foogallery"
4144
- * @type {jQuery.Event}
4145
- * @param {jQuery.Event} event - The jQuery.Event object for the current event.
4146
- * @param {FooGallery.Template} template - The template raising the event.
4147
- * @description This event is raised after all post-initialization work such as setting the initial state is performed but before the first load of items takes place.
4148
- * @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4149
- * $(".foogallery").foogallery({
4150
- * on: {
4151
- * "first-load.foogallery": function(event, template){
4152
- * // do something
4153
- * }
4154
- * }
4155
- * });
4156
- */
4157
- self.raise("first-load");
4158
- return self.loadAvailable();
4159
- }).then(function () {
4160
- if (self.destroying) return _fn.rejectWith("destroy in progress");
4161
- self.initializing = false;
4162
- self.initialized = true;
4163
-
4164
- // performed purely to re-check if any items need to be loaded after content has possibly shifted
4165
- self._check(1000);
4166
- // self._check(3000);
4167
-
4168
- /**
4169
- * @summary Raised after the template is fully initialized and is ready to be interacted with.
4170
- * @event FooGallery.Template~"ready.foogallery"
4171
- * @type {jQuery.Event}
4172
- * @param {jQuery.Event} event - The jQuery.Event object for the current event.
4173
- * @param {FooGallery.Template} template - The template raising the event.
4174
- * @description This event is raised after all post-initialization work such as setting the initial state and performing the first load are completed.
4175
- * @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4176
- * $(".foogallery").foogallery({
4177
- * on: {
4178
- * "ready.foogallery": function(event, template){
4179
- * // do something
4180
- * }
4181
- * }
4182
- * });
4183
- */
4184
- self.raise("ready");
4185
- def.resolve(self);
4186
- }).fail(function (err) {
4187
- def.reject(err);
4188
- });
4189
- queue.resolve();
4190
- }).promise().fail(function (err) {
4191
console.log("initialize failed", self, err);
4192
self.destroy();
4193
- });
4194
},
4195
/**
4196
- * @summary Create a new container element for the template returning the jQuery object.
4197
* @memberof FooGallery.Template#
4198
- * @function create
4199
- * @returns {jQuery} A jQuery object to use as the container for the template.
4200
- * @description This method is called from within the {@link FooGallery.Template#initialize|initialize} method only if a container element is required.
4201
- * @example {@caption The below shows an example of what the returned jQuery objects' outer HTML would look like.}{@lang html}
4202
- * <div id="{options.id}" class="{options.cls.container} {options.classes}">
4203
- * </div>
4204
*/
4205
- create: function () {
4206
var self = this;
4207
- return $("<div/>", {"id": self.id, "class": self.cls.container}).addClass(self.opt.classes);
4208
},
4209
/**
4210
- * @summary Create any container child elements for the template returning the jQuery object.
4211
* @memberof FooGallery.Template#
4212
- * @function createChildren
4213
- * @returns {(jQuery|jQuery[]|HTMLElement|HTMLElement[])} A jQuery object to use as the container for the template.
4214
- * @description This method is called just prior to the {@link FooGallery.Template~"preinit.foogallery"|preinit} event if the container element has no children to allow templates to add any markup required.
4215
*/
4216
- createChildren: function () {
4217
- return $();
4218
},
4219
-
4220
- // #############
4221
- // ## Destroy ##
4222
- // #############
4223
-
4224
/**
4225
- * @summary Destroy the template.
4226
* @memberof FooGallery.Template#
4227
- * @function destroy
4228
- * @returns {Promise}
4229
- * @description Once this method is called it can not be stopped and the template will be destroyed.
4230
- * @fires FooGallery.Template~"destroy.foogallery"
4231
*/
4232
- destroy: function () {
4233
var self = this;
4234
- if (self.destroyed) return _fn.resolved;
4235
- self.destroying = true;
4236
- return $.Deferred(function (def) {
4237
- if (self.initializing && _is.promise(self._initialize)) {
4238
- self._initialize.always(function () {
4239
- self.destroying = false;
4240
- self._destroy();
4241
- def.resolve();
4242
- });
4243
- } else {
4244
- self.destroying = false;
4245
- self._destroy();
4246
- def.resolve();
4247
- }
4248
- }).promise();
4249
},
4250
/**
4251
- * @summary Destroy the template.
4252
* @memberof FooGallery.Template#
4253
- * @function _destroy
4254
- * @private
4255
*/
4256
- _destroy: function () {
4257
var self = this;
4258
- if (self.destroyed) return;
4259
/**
4260
- * @summary Raised before the template is destroyed.
4261
- * @event FooGallery.Template~"destroy.foogallery"
4262
* @type {jQuery.Event}
4263
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
4264
* @param {FooGallery.Template} template - The template raising the event.
4265
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4266
* $(".foogallery").foogallery({
4267
* on: {
4268
- * "destroy.foogallery": function(event, template){
4269
* // do something
4270
* }
4271
* }
4272
* });
4273
*/
4274
- self.raise("destroy");
4275
- self.$scrollParent.off(self.namespace);
4276
- $(window).off(self.namespace);
4277
- self.state.destroy();
4278
- if (self.filter) self.filter.destroy();
4279
- if (self.pages) self.pages.destroy();
4280
- self.items.destroy();
4281
- if (!_is.empty(self.opt.on)) {
4282
- self.$el.off(self.opt.on);
4283
- }
4284
/**
4285
- * @summary Raised after the template has been destroyed.
4286
- * @event FooGallery.Template~"destroyed.foogallery"
4287
* @type {jQuery.Event}
4288
* @param {jQuery.Event} event - The jQuery.Event object for the current event.
4289
* @param {FooGallery.Template} template - The template raising the event.
4290
* @example {@caption To listen for this event and perform some action when it occurs you would bind to it as follows.}
4291
* $(".foogallery").foogallery({
4292
* on: {
4293
- * "destroyed.foogallery": function(event, template){
4294
* // do something
4295
* }
4296
* }
4297
* });
4298
*/
4299
- self.raise("destroyed");
4300
- self.$el.removeData(_.dataTemplate);
4301
-
4302
- if (_is.empty(self._undo.classes)) self.$el.removeAttr("class");
4303
- else self.$el.attr("class", self._undo.classes);
4304
4305
- if (_is.empty(self._undo.style)) self.$el.removeAttr("style");
4306
- else self.$el.attr("style", self._undo.style);
4307
4308
- if (self._undo.children) {
4309
- self.destroyChildren();
4310
- }
4311
- if (self._undo.create) {
4312
- self.$el.remove();
4313
- }
4314
- self.$el = self.state = self.items = self.pages = null;
4315
- self.destroyed = true;
4316
- self.initializing = false;
4317
- self.initialized = false;
4318
- },
4319
/**
4320
* @summary If the {@link FooGallery.Template#createChildren|createChildren} method is used to generate custom elements for a template this method should also be overridden and used to destroy them.
4321
* @memberof FooGallery.Template#
@@ -4430,22 +4647,18 @@
4430
},
4431
4432
/**
4433
- * @summary Throttles the supplied function to only execute once every N milliseconds.
4434
* @memberof FooGallery.Template#
4435
- * @function throttle
4436
- * @param {Function} fn - The function to throttle.
4437
- * @param {number} wait - The number of milliseconds to wait before allowing execution.
4438
- * @returns {Function}
4439
*/
4440
- throttle: function (fn, wait) {
4441
- var time = Date.now();
4442
- return function () {
4443
- if ((time + wait - Date.now()) < 0) {
4444
- var args = _fn.arg2arr(arguments);
4445
- fn.apply(this, args);
4446
- time = Date.now();
4447
- }
4448
}
4449
},
4450
4451
// ###############
@@ -4465,17 +4678,6 @@
4465
self.state.set(state);
4466
self.loadAvailable();
4467
}
4468
- },
4469
- /**
4470
- * @summary Listens for the windows scroll event and performs any checks required by the template.
4471
- * @memberof FooGallery.Template#
4472
- * @function onWindowScroll
4473
- * @param {jQuery.Event} e - The jQuery.Event object for the event.
4474
- * @private
4475
- */
4476
- onWindowScroll: function (e) {
4477
- var self = e.data.self;
4478
- self.loadAvailable();
4479
}
4480
});
4481
@@ -4488,6 +4690,7 @@
4488
viewport: 200,
4489
items: [],
4490
fixLayout: true,
4491
delay: 0,
4492
throttle: 50,
4493
timeout: 60000,
@@ -4509,6 +4712,7 @@
4509
* @property {number} [viewport=200] - The number of pixels to inflate the viewport by when checking to lazy load items.
4510
* @property {(FooGallery.Item~Options[]|FooGallery.Item[]| string)} [items=[]] - An array of items to load when required. A url can be provided and the items will be fetched using an ajax call, the response should be a properly formatted JSON array of {@link FooGallery.Item~Options|item} object.
4511
* @property {boolean} [fixLayout=true] - Whether or not the items' size should be set with CSS until the image is loaded.
4512
* @property {number} [delay=0] - The number of milliseconds to delay the initialization of a template.
4513
* @property {number} [throttle=50] - The number of milliseconds to wait once scrolling has stopped before performing any work.
4514
* @property {number} [timeout=60000] - The number of milliseconds to wait before forcing a timeout when loading items.
@@ -5845,7 +6049,7 @@
5845
refresh = _is.boolean(refresh) ? refresh : false;
5846
var self = this;
5847
if (!refresh && _is.string(self._thumbUrl)) return self._thumbUrl;
5848
- return self._thumbUrl = _.parseSrc(self.src, self.width, self.height, self.srcset, self.$anchor.innerWidth(), self.$anchor.innerHeight());
5849
},
5850
/**
5851
* @summary Scroll the item into the center of the viewport.
@@ -7734,259 +7938,103 @@
7734
FooGallery,
7735
FooGallery.utils.is
7736
);
7737
- (function($, _, _utils, _is){
7738
7739
- _.Portfolio = _utils.Class.extend({
7740
- construct: function(tmpl, options){
7741
- this.tmpl = tmpl;
7742
- this.$el = tmpl.$el;
7743
- this.options = $.extend(true, {}, _.Portfolio.defaults, options);
7744
- this._items = [];
7745
- this._lastWidth = 0;
7746
},
7747
- init: function(){
7748
var self = this;
7749
- $(window).on("resize.portfolio", {self: self}, self.onWindowResize);
7750
},
7751
- destroy: function(){
7752
- $(window).off("resize.portfolio");
7753
- this.$el.removeAttr("style");
7754
},
7755
- parse: function(){
7756
- var self = this, borderSize = 0;
7757
- if (self.$el.hasClass("fg-border-thin")) borderSize = 4;
7758
- if (self.$el.hasClass("fg-border-medium")) borderSize = 10;
7759
- if (self.$el.hasClass("fg-border-thick")) borderSize = 16;
7760
- var border = borderSize * 2,
7761
- containerWidth = self.getContainerWidth(),
7762
- maxWidth = containerWidth - border,
7763
- $test = $('<div/>', {'class': self.$el.attr('class')}).css({
7764
- position: 'absolute',
7765
- top: -9999,
7766
- left: -9999,
7767
- visibility: 'hidden',
7768
- maxWidth: containerWidth
7769
- }).appendTo('body');
7770
-
7771
- self._items = $.map(self.tmpl.getItems(), function(item, i){
7772
- var $clone = item.$el.clone().css({width: '', height: '', top: '', left: '', position: 'relative'}).removeClass("fg-positioned")
7773
- .find(".fg-image,.fg-caption").css("width", item.width > maxWidth ? maxWidth : item.width).end()
7774
- .appendTo($test);
7775
- var width = $clone.outerWidth(), height = $clone.outerHeight();
7776
- $clone.remove();
7777
- return {
7778
- index: i,
7779
- width: width,
7780
- height: height,
7781
- top: 0,
7782
- left: 0,
7783
- $item: item.$el
7784
- };
7785
- });
7786
- $test.remove();
7787
- return self._items;
7788
},
7789
- round: function(value){
7790
- return Math.round(value*2) / 2;
7791
},
7792
- getContainerWidth: function(){
7793
- var self = this, visible = self.$el.is(':visible');
7794
- if (!visible){
7795
- return self.$el.parents(':visible:first').innerWidth();
7796
}
7797
- return self.$el.width();
7798
},
7799
- layout: function(refresh, autoCorrect){
7800
- refresh = _is.boolean(refresh) ? refresh : false;
7801
- autoCorrect = _is.boolean(autoCorrect) ? autoCorrect : true;
7802
-
7803
- var self = this,
7804
- containerWidth = self.getContainerWidth();
7805
-
7806
- if (self._lastWidth != 0 && Math.abs(containerWidth - self._lastWidth) > 0){
7807
- refresh = true;
7808
- self._lastWidth = containerWidth;
7809
- }
7810
-
7811
- if (refresh || self._items.length === 0){
7812
- self.parse();
7813
- }
7814
-
7815
- var rows = self.rows(containerWidth),
7816
- offsetTop = 0;
7817
7818
- for (var i = 0, l = rows.length, row; i < l; i++){
7819
- row = rows[i];
7820
- offsetTop = self.position(row, containerWidth, offsetTop, self.options.align);
7821
- self.render(row);
7822
- }
7823
- self.$el.height(offsetTop);
7824
- if (self._lastWidth == 0){
7825
- self._lastWidth = containerWidth;
7826
- }
7827
- // if our layout caused the container width to get smaller
7828
- // i.e. makes a scrollbar appear then layout again to account for it
7829
- if (autoCorrect && self.getContainerWidth() < containerWidth){
7830
- self.layout(false, false);
7831
- }
7832
- },
7833
- render: function(row){
7834
- for (var j = 0, jl = row.items.length, item; j < jl; j++){
7835
- item = row.items[j];
7836
- if (row.visible){
7837
- item.$item.css({
7838
- width: item.width,
7839
- height: row.height,
7840
- top: item.top,
7841
- left: item.left,
7842
- display: ""
7843
- }).addClass("fg-positioned");
7844
- } else {
7845
- item.$item.css("display", "none");
7846
- }
7847
- }
7848
- },
7849
- position: function(row, containerWidth, offsetTop, alignment){
7850
- var self = this, lastItem = row.items[row.items.length - 1], diff = containerWidth - (lastItem.left + lastItem.width);
7851
- if (row.index > 0) offsetTop += self.options.gutter;
7852
- row.top = offsetTop;
7853
- for (var i = 0, l = row.items.length, item; i < l; i++){
7854
- item = row.items[i];
7855
- item.top = offsetTop;
7856
- if (alignment === "center"){
7857
- item.left += diff / 2;
7858
- } else if (alignment === "right"){
7859
- item.left += diff;
7860
- }
7861
- }
7862
- return offsetTop + row.height;
7863
- },
7864
- items: function(){
7865
- return $.map(this._items, function(item){
7866
- return {
7867
- index: item.index,
7868
- width: item.width,
7869
- height: item.height,
7870
- $item: item.$item,
7871
- top: item.top,
7872
- left: item.left,
7873
- };
7874
- });
7875
- },
7876
- rows: function(containerWidth){
7877
- var self = this,
7878
- items = self.items(),
7879
- rows = [],
7880
- process = items.length > 0,
7881
- index = -1, offsetTop = 0;
7882
7883
- while (process){
7884
- index += 1;
7885
- if (index > 0) offsetTop += self.options.gutter;
7886
- var row = {
7887
- index: index,
7888
- visible: true,
7889
- top: offsetTop,
7890
- width: 0,
7891
- height: 0,
7892
- items: []
7893
- }, remove = [], left = 0, tmp;
7894
7895
- for (var i = 0, il = items.length, item, ratio; i < il; i++){
7896
- item = items[i];
7897
- tmp = row.width + item.width;
7898
- if (tmp > containerWidth && i > 0){
7899
- break;
7900
- } else if (tmp > containerWidth && i == 0){
7901
- tmp = containerWidth;
7902
- ratio = containerWidth / item.width;
7903
- item.width = self.round(item.width * ratio);
7904
- item.height = self.round(item.height * ratio);
7905
- row.height = item.height;
7906
- }
7907
- item.top = row.top;
7908
- if (i > 0){
7909
- left += self.options.gutter;
7910
- }
7911
- if (i !== il - 1){
7912
- tmp += self.options.gutter;
7913
- }
7914
- item.left = left;
7915
- left += item.width;
7916
- if (item.height > row.height) row.height = item.height;
7917
- row.width = tmp;
7918
- row.items.push(item);
7919
- remove.push(i);
7920
- }
7921
- // make sure we don't get stuck in a loop, there should always be items to be removed
7922
- if (remove.length === 0){
7923
- process = false;
7924
break;
7925
- }
7926
- remove.sort(function(a, b){ return b - a; });
7927
- for (var j = 0, jl = remove.length; j < jl; j++){
7928
- items.splice(remove[j], 1);
7929
- }
7930
- rows.push(row);
7931
- process = items.length > 0;
7932
}
7933
- return rows;
7934
- },
7935
- onWindowResize: function(e){
7936
- e.data.self.layout();
7937
- }
7938
- });
7939
-
7940
- _.Portfolio.defaults = {
7941
- gutter: 40,
7942
- align: "center"
7943
- };
7944
-
7945
- })(
7946
- FooGallery.$,
7947
- FooGallery,
7948
- FooGallery.utils,
7949
- FooGallery.utils.is
7950
- );
7951
- (function($, _, _utils){
7952
-
7953
- _.PortfolioTemplate = _.Template.extend({
7954
- construct: function(element, options){
7955
- this._super(element, options);
7956
-
7957
- this.portfolio = null;
7958
- },
7959
- onPreInit: function(event, self){
7960
- self.portfolio = new _.Portfolio( self, self.template );
7961
- },
7962
- onInit: function(event, self){
7963
- self.portfolio.init();
7964
- },
7965
- onFirstLoad: function(event, self){
7966
- self.portfolio.layout( true );
7967
- },
7968
- onReady: function(event, self){
7969
- self.portfolio.layout( true );
7970
- },
7971
- onDestroy: function(event, self){
7972
- self.portfolio.destroy();
7973
- },
7974
- onLayout: function(event, self){
7975
- self.portfolio.layout( true );
7976
- },
7977
- onAfterPageChange: function(event, self, current, prev, isFilter){
7978
- if (!isFilter){
7979
- self.portfolio.layout( true );
7980
}
7981
},
7982
- onAfterFilterChange: function(event, self){
7983
- self.portfolio.layout( true );
7984
}
7985
});
7986
7987
_.template.register("simple_portfolio", _.PortfolioTemplate, {
7988
template: {
7989
- gutter: 40
7990
}
7991
}, {
7992
container: "foogallery fg-simple_portfolio"
@@ -7995,7 +8043,9 @@
7995
})(
7996
FooGallery.$,
7997
FooGallery,
7998
- FooGallery.utils
7999
);
8000
(function ($, _, _utils, _obj) {
8001
58
);
59
/*!
60
* FooGallery.utils - Contains common utility methods and classes used in our plugins.
61
+ * @version 0.1.3
62
* @link https://github.com/steveush/foo-utils#readme
63
+ * @copyright Steve Usher 2019
64
* @license Released under the GPL-3.0 license.
65
*/
66
/**
111
* @name version
112
* @type {string}
113
*/
114
+ version: '0.1.3'
115
};
116
117
/**
152
* @ignore
153
*/
154
function split(version){
155
+ var parts = version.split('.'), result = [];
156
+ for(var i = 0, len = parts.length; i < len; i++){
157
+ result[i] = parseInt(parts[i]);
158
+ if (isNaN(result[i])) result[i] = 0;
159
}
160
+ return result;
161
}
162
163
// get the base numeric arrays for each version
170
171
// perform the actual comparison
172
for (var i = 0; i < v1parts.length; ++i) {
173
+ if (v2parts.length === i) return 1;
174
+ if (v1parts[i] === v2parts[i]) continue;
175
if (v1parts[i] > v2parts[i]) return 1;
176
else return -1;
177
}
178
+ if (v1parts.length !== v2parts.length) return -1;
179
return 0;
180
};
181
207
})(jQuery);
208
(function ($, _){
209
// only register methods if this version is the current version
210
+ if (_.version !== '0.1.3') return;
211
212
/**
213
* @summary Contains common type checking utility methods.
276
_.is.element = function (value) {
277
return typeof HTMLElement === 'object'
278
? value instanceof HTMLElement
279
+ : !!value && typeof value === 'object' && value.nodeType === 1 && typeof value.nodeName === 'string';
280
};
281
282
/**
317
*/
318
_.is.empty = function(value){
319
if (_.is.undef(value) || value === null) return true;
320
+ if (_.is.number(value) && value === 0) return true;
321
if (_.is.boolean(value) && value === false) return true;
322
if (_.is.string(value) && value.length === 0) return true;
323
if (_.is.array(value) && value.length === 0) return true;
513
*/
514
_.is.size = function(value){
515
if (!(_.is.string(value) && !_.is.empty(value)) && !_.is.number(value)) return false;
516
+ return /^(auto|none|(?:[\d.]*)+?(?:%|px|mm|q|cm|in|pt|pc|em|ex|ch|rem|vh|vw|vmin|vmax)?)#x2F;.test(value);
517
};
518
519
/**
561
);
562
(function($, _, _is){
563
// only register methods if this version is the current version
564
+ if (_.version !== '0.1.3') return;
565
566
/**
567
* @memberof FooGallery.utils
724
return Array.prototype.slice.call(args);
725
};
726
727
+ /**
728
+ * @summary Debounces the `fn` by the supplied `time`.
729
+ * @memberof FooGallery.utils.fn
730
+ * @function debounce
731
+ * @param {function} fn - The function to debounce.
732
+ * @param {number} time - The time in milliseconds to delay execution.
733
+ * @returns {function}
734
+ * @description This returns a wrapped version of the `fn` which delays its' execution by the supplied `time`. Additional calls to the function will extend the delay until the `time` expires.
735
+ */
736
+ _.fn.debounce = function (fn, time) {
737
+ var timeout;
738
+ return function () {
739
+ var ctx = this, args = _.fn.arg2arr(arguments);
740
+ clearTimeout(timeout);
741
+ timeout = setTimeout(function () {
742
+ fn.apply(ctx, args);
743
+ }, time);
744
+ };
745
+ };
746
+
747
+ /**
748
+ * @summary Throttles the `fn` by the supplied `time`.
749
+ * @memberof FooGallery.utils.fn
750
+ * @function throttle
751
+ * @param {function} fn - The function to throttle.
752
+ * @param {number} time - The time in milliseconds to delay execution.
753
+ * @returns {function}
754
+ * @description This returns a wrapped version of the `fn` which ensures it's executed only once every `time` milliseconds. The first call to the function will be executed, after that only the last of any additional calls will be executed once the `time` expires.
755
+ */
756
+ _.fn.throttle = function (fn, time) {
757
+ var last, timeout;
758
+ return function () {
759
+ var ctx = this, args = _.fn.arg2arr(arguments);
760
+ if (!last){
761
+ fn.apply(ctx, args);
762
+ last = Date.now();
763
+ } else {
764
+ clearTimeout(timeout);
765
+ timeout = setTimeout(function () {
766
+ if (Date.now() - last >= time) {
767
+ fn.apply(ctx, args);
768
+ last = Date.now();
769
+ }
770
+ }, time - (Date.now() - last));
771
+ }
772
+ }
773
+ };
774
+
775
/**
776
* @summary Checks the given `value` and ensures a function is returned.
777
* @memberof FooGallery.utils.fn
1144
);
1145
(function(_, _is){
1146
// only register methods if this version is the current version
1147
+ if (_.version !== '0.1.3') return;
1148
1149
/**
1150
* @summary Contains common url utility methods.
1279
);
1280
(function (_, _is, _fn) {
1281
// only register methods if this version is the current version
1282
+ if (_.version !== '0.1.3') return;
1283
1284
/**
1285
* @summary Contains common string utility methods.
1594
);
1595
(function($, _, _is, _fn, _str){
1596
// only register methods if this version is the current version
1597
+ if (_.version !== '0.1.3') return;
1598
1599
/**
1600
* @summary Contains common object utility methods.
1926
);
1927
(function($, _, _is){
1928
// only register methods if this version is the current version
1929
+ if (_.version !== '0.1.3') return;
1930
1931
// any methods that have dependencies but don't fall into a specific subset or namespace can be added here
1932
2017
}
2018
};
2019
2020
+ /**
2021
+ * @summary Convert CSS class names into CSS selectors.
2022
+ * @memberof FooGallery.utils
2023
+ * @function selectify
2024
+ * @param {(string|string[]|object)} classes - A space delimited string of CSS class names or an array of them with each item being included in the selector using the OR (`,`) syntax as a separator. If an object is supplied the result will be an object with the same property names but the values converted to selectors.
2025
+ * @returns {(object|string)}
2026
+ * @example {@caption Shows how the method can be used.}
2027
+ * // alias the FooGallery.utils namespace
2028
+ * var _ = FooGallery.utils;
2029
+ *
2030
+ * console.log( _.selectify("my-class") ); // => ".my-class"
2031
+ * console.log( _.selectify("my-class my-other-class") ); // => ".my-class.my-other-class"
2032
+ * console.log( _.selectify(["my-class", "my-other-class"]) ); // => ".my-class,.my-other-class"
2033
+ * console.log( _.selectify({
2034
+ * class1: "my-class",
2035
+ * class2: "my-class my-other-class",
2036
+ * class3: ["my-class", "my-other-class"]
2037
+ * }) ); // => { class1: ".my-class", class2: ".my-class.my-other-class", class3: ".my-class,.my-other-class" }
2038
+ */
2039
+ _.selectify = function (classes) {
2040
+ if (_is.empty(classes)) return null;
2041
+ if (_is.hash(classes)) {
2042
+ var result = {}, selector;
2043
+ for (var name in classes) {
2044
+ if (!classes.hasOwnProperty(name)) continue;
2045
+ selector = _.selectify(classes[name]);
2046
+ if (selector) {
2047
+ result[name] = selector;
2048
+ }
2049
+ }
2050
+ return result;
2051
+ }
2052
+ if (_is.string(classes) || _is.array(classes)) {
2053
+ if (_is.string(classes)) classes = [classes];
2054
+ return classes.map(function(str){
2055
+ return _is.string(str) ? "." + str.split(/\s/g).join(".") : null;
2056
+ }).join(",");
2057
+ }
2058
+ return null;
2059
+ };
2060
+
2061
+ /**
2062
+ * @summary Parses the supplied `src` and `srcset` values and returns the best matching URL for the supplied render size.
2063
+ * @memberof FooGallery.utils
2064
+ * @function src
2065
+ * @param {string} src - The default src for the image.
2066
+ * @param {string} srcset - The srcset containing additional image sizes.
2067
+ * @param {number} srcWidth - The width of the `src` image.
2068
+ * @param {number} srcHeight - The height of the `src` image.
2069
+ * @param {number} renderWidth - The rendered width of the image element.
2070
+ * @param {number} renderHeight - The rendered height of the image element.
2071
+ * @param {number} [devicePixelRatio] - The device pixel ratio to use while parsing. Defaults to the current device pixel ratio.
2072
+ * @returns {(string|null)} Returns the parsed responsive src or null if no src is provided.
2073
+ * @description This can be used to parse the correct src to use when loading an image through JavaScript.
2074
+ * @example {@caption The following shows using the method with the srcset w-descriptor.}{@run true}
2075
+ * var src = "test-240x120.jpg",
2076
+ * width = 240, // the naturalWidth of the 'src' image
2077
+ * height = 120, // the naturalHeight of the 'src' image
2078
+ * srcset = "test-480x240.jpg 480w, test-720x360.jpg 720w, test-960x480.jpg 960w";
2079
+ *
2080
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 240, 120, 1 ) ); // => "test-240x120.jpg"
2081
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 240, 120, 2 ) ); // => "test-480x240.jpg"
2082
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 480, 240, 1 ) ); // => "test-480x240.jpg"
2083
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 480, 240, 2 ) ); // => "test-960x480.jpg"
2084
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 720, 360, 1 ) ); // => "test-720x360.jpg"
2085
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 960, 480, 1 ) ); // => "test-960x480.jpg"
2086
+ * @example {@caption The following shows using the method with the srcset h-descriptor.}{@run true}
2087
+ * var src = "test-240x120.jpg",
2088
+ * width = 240, // the naturalWidth of the 'src' image
2089
+ * height = 120, // the naturalHeight of the 'src' image
2090
+ * srcset = "test-480x240.jpg 240h, test-720x360.jpg 360h, test-960x480.jpg 480h";
2091
+ *
2092
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 240, 120, 1 ) ); // => "test-240x120.jpg"
2093
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 240, 120, 2 ) ); // => "test-480x240.jpg"
2094
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 480, 240, 1 ) ); // => "test-480x240.jpg"
2095
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 480, 240, 2 ) ); // => "test-960x480.jpg"
2096
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 720, 360, 1 ) ); // => "test-720x360.jpg"
2097
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 960, 480, 1 ) ); // => "test-960x480.jpg"
2098
+ * @example {@caption The following shows using the method with the srcset x-descriptor.}{@run true}
2099
+ * var src = "test-240x120.jpg",
2100
+ * width = 240, // the naturalWidth of the 'src' image
2101
+ * height = 120, // the naturalHeight of the 'src' image
2102
+ * srcset = "test-480x240.jpg 2x, test-720x360.jpg 3x, test-960x480.jpg 4x";
2103
+ *
2104
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 240, 120, 1 ) ); // => "test-240x120.jpg"
2105
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 240, 120, 2 ) ); // => "test-480x240.jpg"
2106
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 480, 240, 1 ) ); // => "test-240x120.jpg"
2107
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 480, 240, 2 ) ); // => "test-480x240.jpg"
2108
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 720, 360, 1 ) ); // => "test-240x120.jpg"
2109
+ * console.log( FooGallery.utils.src( src, srcset, width, height, 960, 480, 1 ) ); // => "test-240x120.jpg"
2110
+ */
2111
+ _.src = function(src, srcset, srcWidth, srcHeight, renderWidth, renderHeight, devicePixelRatio){
2112
+ if (!_is.string(src)) return null;
2113
+ // if there is no srcset just return the src
2114
+ if (!_is.string(srcset)) return src;
2115
+
2116
+ // first split the srcset into its individual sources
2117
+ var sources = srcset.replace(/(\s[\d.]+[whx]),/g, '$1 @,@ ').split(' @,@ ');
2118
+ // then parse those sources into objects containing the url, width, height and pixel density
2119
+ var list = sources.map(function (val) {
2120
+ return {
2121
+ url: /^\s*(\S*)/.exec(val)[1],
2122
+ w: parseFloat((/\S\s+(\d+)w/.exec(val) || [0, Infinity])[1]),
2123
+ h: parseFloat((/\S\s+(\d+)h/.exec(val) || [0, Infinity])[1]),
2124
+ x: parseFloat((/\S\s+([\d.]+)x/.exec(val) || [0, 1])[1])
2125
+ };
2126
+ });
2127
+
2128
+ // if there is no items parsed from the srcset then just return the src
2129
+ if (!list.length) return src;
2130
+
2131
+ // add the current src into the mix by inspecting the first parsed item to figure out how to handle it
2132
+ list.unshift({
2133
+ url: src,
2134
+ w: list[0].w !== Infinity && list[0].h === Infinity ? srcWidth : Infinity,
2135
+ h: list[0].h !== Infinity && list[0].w === Infinity ? srcHeight : Infinity,
2136
+ x: 1
2137
+ });
2138
+
2139
+ // get the current viewport info and use it to determine the correct src to load
2140
+ var dpr = _is.number(devicePixelRatio) ? devicePixelRatio : (window.devicePixelRatio || 1),
2141
+ area = {w: renderWidth * dpr, h: renderHeight * dpr, x: dpr},
2142
+ props = ['w','h','x'];
2143
+
2144
+ // first check each of the viewport properties against the max values of the same properties in our src array
2145
+ // only src's with a property greater than the viewport or equal to the max are kept
2146
+ props.forEach(function (prop) {
2147
+ var max = Math.max.apply(null, list.map(function (item) {
2148
+ return item[prop];
2149
+ }));
2150
+ list = list.filter(function (item) {
2151
+ return item[prop] >= area[prop] || item[prop] === max;
2152
+ });
2153
+ });
2154
+
2155
+ // next reduce our src array by comparing the viewport properties against the minimum values of the same properties of each src
2156
+ // only src's with a property equal to the minimum are kept
2157
+ props.forEach(function (prop) {
2158
+ var min = Math.min.apply(null, list.map(function (item) {
2159
+ return item[prop];
2160
+ }));
2161
+ list = list.filter(function (item) {
2162
+ return item[prop] === min;
2163
+ });
2164
+ });
2165
+
2166
+ // return the first url as it is the best match for the current viewport
2167
+ return list[0].url;
2168
+ };
2169
+
2170
+ /**
2171
+ * @summary Get the scroll parent for the supplied element optionally filtering by axis.
2172
+ * @memberof FooGallery.utils
2173
+ * @function scrollParent
2174
+ * @param {(string|Element|jQuery)} element - The selector, element or jQuery element to find the scroll parent of.
2175
+ * @param {string} [axis="xy"] - The axis to check. By default this method will check both the X and Y axis.
2176
+ * @param {jQuery} [def] - The default jQuery element to return if no result was found. Defaults to the supplied elements document.
2177
+ * @returns {jQuery}
2178
+ */
2179
+ _.scrollParent = function(element, axis, def){
2180
+ element = _is.jq(element) ? element : $(element);
2181
+ axis = _is.string(axis) && /^(x|y|xy|yx)#x2F;i.test(axis) ? axis : "xy";
2182
+ var $doc = $(!!element.length && element[0].ownerDocument || document);
2183
+ def = _is.jq(def) ? def : $doc;
2184
+
2185
+ if (!element.length) return def;
2186
+
2187
+ var position = element.css("position"),
2188
+ excludeStaticParent = position === "absolute",
2189
+ scroll = /(auto|scroll)/i, axisX = /x/i, axisY = /y/i,
2190
+ $parent = element.parentsUntil(def).filter(function(i, el){
2191
+ var $el = $(this);
2192
+ if (excludeStaticParent && $el.css("position") === "static") return false;
2193
+ var scrollY = axisY.test(axis) && el.scrollHeight > el.clientHeight && scroll.test($el.css("overflow-y")),
2194
+ scrollX = axisX.test(axis) && el.scrollWidth > el.clientWidth && scroll.test($el.css("overflow-x"));
2195
+ return scrollY || scrollX;
2196
+ }).eq(0);
2197
+
2198
+ if ($parent.is("html")) $parent = $doc;
2199
+ return position === "fixed" || !$parent.length ? def : $parent;
2200
+ };
2201
+
2202
})(
2203
// dependencies
2204
FooGallery.utils.$,
2207
);
2208
(function($, _, _is){
2209
// only register methods if this version is the current version
2210
+ if (_.version !== '0.1.3') return;
2211
2212
/**
2213
* @summary Contains common utility methods and members for the CSS transition property.
2380
);
2381
(function ($, _, _is, _obj, _fn) {
2382
// only register methods if this version is the current version
2383
+ if (_.version !== '0.1.3') return;
2384
2385
/**
2386
* @summary A base class providing some helper methods for prototypal inheritance.
2387
+ * @constructs FooGallery.utils.Class
2388
* @description This is a base class for making prototypal inheritance simpler to work with. It provides an easy way to inherit from another class and exposes a `_super` method within the scope of any overriding methods that allows a simple way to execute the overridden function.
2389
*
2390
* Have a look at the {@link FooGallery.utils.Class.extend|extend} and {@link FooGallery.utils.Class.override|override} method examples to see some basic usage.
2517
FooGallery.utils.obj,
2518
FooGallery.utils.fn
2519
);
2520
+ (function (_, _is) {
2521
+ // only register methods if this version is the current version
2522
+ if (_.version !== '0.1.3') return;
2523
+
2524
+ _.Event = _.Class.extend(/** @lends FooGallery.utils.Event */{
2525
+ /**
2526
+ * @summary A base event class providing just a type and defaultPrevented properties.
2527
+ * @constructs
2528
+ * @param {string} type - The type for this event.
2529
+ * @description This is a very basic event class that is used internally by the {@link FooGallery.utils.EventClass#trigger} method when the first parameter supplied is simply the event name.
2530
+ *
2531
+ * To trigger your own custom event you will need to inherit from this class and then supply the instantiated event object as the first parameter to the {@link FooGallery.utils.EventClass#trigger} method.
2532
+ * @example {@caption The following shows how to use this class to create a custom event.}
2533
+ * var MyEvent = FooGallery.utils.Event.extend({
2534
+ * construct: function(type, customProp){
2535
+ * this._super(type);
2536
+ * this.myCustomProp = customProp;
2537
+ * }
2538
+ * });
2539
+ *
2540
+ * // to use the class you would then instantiate it and pass it as the first argument to a FooGallery.utils.EventClass's trigger method
2541
+ * var eventClass = ...; // any class inheriting from FooGallery.utils.EventClass
2542
+ * var event = new MyEvent( "my-event-type", true );
2543
+ * eventClass.trigger(event);
2544
+ */
2545
+ construct: function(type){
2546
+ /**
2547
+ * @summary The type of event.
2548
+ * @memberof FooGallery.utils.Event#
2549
+ * @name type
2550
+ * @type {string}
2551
+ * @readonly
2552
+ */
2553
+ this.type = type;
2554
+ /**
2555
+ * @summary Whether the default action should be taken or not.
2556
+ * @memberof FooGallery.utils.Event#
2557
+ * @name defaultPrevented
2558
+ * @type {boolean}
2559
+ * @readonly
2560
+ */
2561
+ this.defaultPrevented = false;
2562
+ },
2563
+ /**
2564
+ * @summary Informs the class that raised this event that its default action should not be taken.
2565
+ * @memberof FooGallery.utils.Event#
2566
+ * @function preventDefault
2567
+ */
2568
+ preventDefault: function(){
2569
+ this.defaultPrevented = true;
2570
+ }
2571
+ });
2572
+
2573
+ _.EventClass = _.Class.extend(/** @lends FooGallery.utils.EventClass */{
2574
+ /**
2575
+ * @summary A base class that implements a basic events interface.
2576
+ * @constructs
2577
+ * @description This is a very basic events implementation that provides just enough to cover most needs.
2578
+ */
2579
+ construct: function(){
2580
+ /**
2581
+ * @summary The object used internally to register event handlers.
2582
+ * @memberof FooGallery.utils.EventClass#
2583
+ * @name __handlers
2584
+ * @type {Object}
2585
+ * @private
2586
+ */
2587
+ this.__handlers = {};
2588
+ },
2589
+ /**
2590
+ * @summary Destroy the current instance releasing used resources.
2591
+ * @memberof FooGallery.utils.EventClass#
2592
+ * @function destroy
2593
+ */
2594
+ destroy: function(){
2595
+ this.__handlers = {};
2596
+ },
2597
+ /**
2598
+ * @summary Attach an event handler function for one or more events to the class.
2599
+ * @memberof FooGallery.utils.EventClass#
2600
+ * @function on
2601
+ * @param {string} events - One or more space-separated event types.
2602
+ * @param {function} handler - A function to execute when the event is triggered.
2603
+ * @param {*} [thisArg] - The value of `this` within the `handler` function. Defaults to the `EventClass` raising the event.
2604
+ * @returns {this}
2605
+ */
2606
+ on: function(events, handler, thisArg){
2607
+ if (!_is.string(events) || !_is.fn(handler)) return this;
2608
+ thisArg = _is.undef(thisArg) ? this : thisArg;
2609
+ var self = this, handlers = self.__handlers, exists;
2610
+ events.split(" ").forEach(function(type){
2611
+ if (!_is.array(handlers[type])){
2612
+ handlers[type] = [];
2613
+ }
2614
+ exists = handlers[type].some(function(h){
2615
+ return h.fn === handler && h.thisArg === thisArg;
2616
+ });
2617
+ if (!exists){
2618
+ handlers[type].push({
2619
+ fn: handler,
2620
+ thisArg: thisArg
2621
+ });
2622
+ }
2623
+ });
2624
+ return self;
2625
+ },
2626
+ /**
2627
+ * @summary Remove an event handler function for one or more events from the class.
2628
+ * @memberof FooGallery.utils.EventClass#
2629
+ * @function off
2630
+ * @param {string} events - One or more space-separated event types.
2631
+ * @param {function} handler - The handler to remove.
2632
+ * @param {*} [thisArg] - The value of `this` within the `handler` function.
2633
+ * @returns {FooGallery.utils.EventClass}
2634
+ */
2635
+ off: function(events, handler, thisArg){
2636
+ if (!_is.string(events)) return this;
2637
+ handler = _is.fn(handler) ? handler : null;
2638
+ thisArg = _is.undef(thisArg) ? this : thisArg;
2639
+ var self = this, handlers = self.__handlers;
2640
+ events.split(" ").forEach(function(type){
2641
+ if (_is.array(handlers[type])){
2642
+ if (handler != null){
2643
+ handlers[type] = handlers[type].filter(function(h){
2644
+ return !(h.fn === handler && h.thisArg === thisArg);
2645
+ });
2646
+ if (handlers[type].length === 0){
2647
+ delete handlers[type];
2648
+ }
2649
+ } else {
2650
+ delete handlers[type];
2651
+ }
2652
+ }
2653
+ });
2654
+ return self;
2655
+ },
2656
+ /**
2657
+ * @summary Trigger an event on the current class.
2658
+ * @memberof FooGallery.utils.EventClass#
2659
+ * @function trigger
2660
+ * @param {(string|FooGallery.utils.Event)} event - Either a space-separated string of event types or a custom event object to raise.
2661
+ * @param {Array} [args] - An array of additional arguments to supply to the handlers after the event object.
2662
+ * @returns {(FooGallery.utils.Event|FooGallery.utils.Event[]|null)} Returns the {@link FooGallery.utils.Event|event object} of the triggered event. If more than one event was triggered an array of {@link FooGallery.utils.Event|event objects} is returned. If no `event` was supplied or triggered `null` is returned.
2663
+ */
2664
+ trigger: function(event, args){
2665
+ var instance = event instanceof _.Event;
2666
+ if (!instance && !_is.string(event)) return null;
2667
+ args = _is.array(args) ? args : [];
2668
+ var self = this,
2669
+ handlers = self.__handlers,
2670
+ result = [],
2671
+ _trigger = function(e){
2672
+ result.push(e);
2673
+ if (!_is.array(handlers[e.type])) return;
2674
+ handlers[e.type].forEach(function (h) {
2675
+ h.fn.apply(h.thisArg, [e].concat(args));
2676
+ });
2677
+ };
2678
+
2679
+ if (instance){
2680
+ _trigger(event);
2681
+ } else {
2682
+ event.split(" ").forEach(function(type){
2683
+ _trigger(new _.Event(type));
2684
+ });
2685
+ }
2686
+ return _is.empty(result) ? null : (result.length === 1 ? result[0] : result);
2687
+ }
2688
+ });
2689
+
2690
+ })(
2691
+ // dependencies
2692
+ FooGallery.utils,
2693
+ FooGallery.utils.is
2694
+ );
2695
(function($, _, _is){
2696
// only register methods if this version is the current version
2697
+ if (_.version !== '0.1.3') return;
2698
2699
_.Bounds = _.Class.extend(/** @lends FooGallery.utils.Bounds */{
2700
/**
2701
* @summary A simple bounding rectangle class.
2702
+ * @constructs
2703
* @augments FooGallery.utils.Class
2704
* @borrows FooGallery.utils.Class.extend as extend
2705
* @borrows FooGallery.utils.Class.override as override
2795
);
2796
(function($, _, _is, _fn){
2797
// only register methods if this version is the current version
2798
+ if (_.version !== '0.1.3') return;
2799
2800
_.Factory = _.Class.extend(/** @lends FooGallery.utils.Factory */{
2801
/**
2802
* @summary A factory for classes allowing them to be registered and created using a friendly name.
2803
+ * @constructs
2804
* @description This class allows other classes to register themselves for use at a later time. Depending on how you intend to use the registered classes you can also specify a load and execution order through the `priority` parameter of the {@link FooGallery.utils.Factory#register|register} method.
2805
* @augments FooGallery.utils.Class
2806
* @borrows FooGallery.utils.Class.extend as extend
3118
);
3119
(function(_, _fn, _str){
3120
// only register methods if this version is the current version
3121
+ if (_.version !== '0.1.3') return;
3122
3123
// this is done to handle Content Security in Chrome and other browsers blocking access to the localStorage object under certain configurations.
3124
// see: https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document
3129
_.Debugger = _.Class.extend(/** @lends FooGallery.utils.Debugger */{
3130
/**
3131
* @summary A debug utility class that can be enabled across sessions using the given `key` by storing its state in `localStorage`.
3132
+ * @constructs
3133
* @param {string} key - The key to use to store the debug state in `localStorage`.
3134
* @description This class allows you to write additional debug info to the console within your code which by default is not actually output. You can then enable the debugger and it will start to output the results to the console.
3135
*
3222
FooGallery.utils.fn,
3223
FooGallery.utils.str
3224
);
3225
(function ($, _, _utils, _is, _fn) {
3226
3227
_.debug = new _utils.Debugger("__FooGallery__");
3228
3229