From 0080e2633318c97d839a4dfbc7cc1c7b65f4b800 Mon Sep 17 00:00:00 2001 From: nicofrand Date: Fri, 29 Dec 2023 11:03:55 +0100 Subject: [PATCH 1/8] [themes/korrigan] Fix gallery's duplicated images --- themes/korrigan/templates/partial/korrigan.js.ep | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/themes/korrigan/templates/partial/korrigan.js.ep b/themes/korrigan/templates/partial/korrigan.js.ep index 0d3a0fb..450e6c0 100644 --- a/themes/korrigan/templates/partial/korrigan.js.ep +++ b/themes/korrigan/templates/partial/korrigan.js.ep @@ -129,3 +129,13 @@ function buildMessage(success, msg) { `; } } + +// Overwrite the function to edit the gallery selector: `.container .gallery` instead of `.gallery` as the page name is added +// to the body's classnames in this theme. +function appendToGallery(url, width, height) { + $('.container .gallery').append(`
+ + + +
`); +} From 5c0504d5d4f1cc53fa850fd0abcbd921e4a2d2c1 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sat, 30 Dec 2023 06:43:24 +0100 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=90=9B=20=E2=80=94=20AVIF=20format=20?= =?UTF-8?q?support=20(fix=20#137)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 3 ++- lib/Lutim/Controller/Image.pm | 8 ++++++-- themes/default/templates/index.html.ep | 4 ++-- themes/korrigan/templates/index.html.ep | 4 ++-- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3e0cf40..3f7c042 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,9 +1,10 @@ Revision history for Lutim 0.17.0 ????-??-?? + - 🐛 — AVIF format support 0.16.0 2023-12-29 - - ⬆️ UUpdate jQuery + - ⬆️ Update jQuery - 💥 BREAKING CHANGE: no more twitter cards - 🎨 — Use template literals in js - 🐛 — Gallery, zip and random URLs are now updated when closing image dialog box diff --git a/lib/Lutim/Controller/Image.pm b/lib/Lutim/Controller/Image.pm index 9c5c623..5f56b95 100644 --- a/lib/Lutim/Controller/Image.pm +++ b/lib/Lutim/Controller/Image.pm @@ -416,7 +416,9 @@ sub add { my $path = 'files/'.$record->short.'.'.$ext; my ($width, $height); - if ($im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') { # ImageMagick don't work in Debian with svg (for now?) + if ($im_loaded && $mediatype ne 'image/svg+xml' # ImageMagick doesn't work with SVG, xcf or avif files + && $mediatype !~ m#image/(x-)?xcf# + && $mediatype ne 'image/avif') { my $im = Image::Magick->new; $im->BlobToImage($upload->slurp); @@ -484,7 +486,9 @@ sub add { } unless (defined($keep_exif) && $keep_exif) { - if ($mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') { + # Exiftool can’t process SVG or xcf files + if ($mediatype ne 'image/svg+xml' + && $mediatype !~ m#image/(x-)?xcf#) { # Remove the EXIF tags my $data = new IO::Scalar \$upload->slurp(); my $et = Image::ExifTool->new; diff --git a/themes/default/templates/index.html.ep b/themes/default/templates/index.html.ep index e3d0c4b..04134f6 100644 --- a/themes/default/templates/index.html.ep +++ b/themes/default/templates/index.html.ep @@ -180,7 +180,7 @@
- +
@@ -228,7 +228,7 @@
diff --git a/themes/korrigan/templates/index.html.ep b/themes/korrigan/templates/index.html.ep index 3285cde..39df036 100644 --- a/themes/korrigan/templates/index.html.ep +++ b/themes/korrigan/templates/index.html.ep @@ -181,7 +181,7 @@
- +
@@ -231,7 +231,7 @@
From 4de01f5f8b2dc46e6f9d8d0ee731ccf572e02f5d Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sat, 30 Dec 2023 07:04:00 +0100 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=8C=90=20=E2=80=94=20Correcting=20and?= =?UTF-8?q?=20improving=20pronunciation=20(fix=20#133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- themes/default/lib/Lutim/I18N/ar.po | 8 +-- themes/default/lib/Lutim/I18N/de.po | 8 +-- themes/default/lib/Lutim/I18N/en.po | 91 ++++++++++++------------ themes/default/lib/Lutim/I18N/es.po | 8 +-- themes/default/lib/Lutim/I18N/fr.po | 8 +-- themes/default/lib/Lutim/I18N/fr_FR.po | 8 +-- themes/default/lib/Lutim/I18N/hr.po | 6 +- themes/default/lib/Lutim/I18N/hu.po | 8 +-- themes/default/lib/Lutim/I18N/it.po | 8 +-- themes/default/lib/Lutim/I18N/lutim.pot | 93 +++++++++++++------------ themes/default/lib/Lutim/I18N/oc.po | 9 +-- themes/default/lib/Lutim/I18N/ru.po | 8 +-- themes/default/lib/Lutim/I18N/sv.po | 6 +- themes/default/templates/about.html.ep | 2 +- 14 files changed, 118 insertions(+), 153 deletions(-) diff --git a/themes/default/lib/Lutim/I18N/ar.po b/themes/default/lib/Lutim/I18N/ar.po index ab443c4..de5abb0 100644 --- a/themes/default/lib/Lutim/I18N/ar.po +++ b/themes/default/lib/Lutim/I18N/ar.po @@ -265,12 +265,8 @@ msgid "Is it really free (as in free beer)?" msgstr "هل هو مجاني (كما في عبارة مشروب مجاني) ؟" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"يُنطق مِثل الكلمة الفرنسية lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "يُنطق مِثل الكلمة الفرنسية lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/de.po b/themes/default/lib/Lutim/I18N/de.po index 013d4e8..7270f19 100644 --- a/themes/default/lib/Lutim/I18N/de.po +++ b/themes/default/lib/Lutim/I18N/de.po @@ -264,12 +264,8 @@ msgid "Is it really free (as in free beer)?" msgstr "Is es wirklich kostenlos?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Genauso wie das französische Wort lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Genauso wie das französische Wort lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/en.po b/themes/default/lib/Lutim/I18N/en.po index 4ae2101..020df8f 100644 --- a/themes/default/lib/Lutim/I18N/en.po +++ b/themes/default/lib/Lutim/I18N/en.po @@ -18,7 +18,7 @@ msgstr "" #. (30) #. ($delay) #. (config('max_delay') -#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9 +#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:129 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9 msgid "%1 days" msgstr "%1 days" @@ -27,7 +27,7 @@ msgstr "%1 days" msgid "%1 sent images on this instance from beginning." msgstr "%1 sent images on this instance from beginning." -#: themes/default/templates/index.html.ep:228 +#: themes/default/templates/index.html.ep:227 msgid "-or-" msgstr "-or-" @@ -35,11 +35,11 @@ msgstr "-or-" msgid "1 year" msgstr "1 year" -#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 +#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 msgid "24 hours" msgstr "24 hours" -#: themes/default/templates/partial/myfiles.js.ep:210 +#: themes/default/templates/partial/myfiles.js.ep:237 msgid ": Error while trying to get the counter." msgstr ": Error while trying to get the counter." @@ -51,7 +51,7 @@ msgstr "About" msgid "Active images" msgstr "Active images" -#: lib/Lutim/Controller/Image.pm:329 +#: lib/Lutim/Controller/Image.pm:345 msgid "An error occured while downloading the image." msgstr "An error occured while downloading the image." @@ -63,7 +63,7 @@ msgstr "Archives download" msgid "Back to homepage" msgstr "Back to homepage" -#: themes/default/templates/index.html.ep:231 themes/default/templates/index.html.ep:232 +#: themes/default/templates/index.html.ep:230 themes/default/templates/index.html.ep:231 msgid "Click to open the file browser" msgstr "Click to open the file browser" @@ -83,11 +83,11 @@ msgstr "Contributors" msgid "Copied to clipboard" msgstr "Copied to clipboard" -#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364 +#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:273 themes/default/templates/partial/lutim.js.ep:360 msgid "Copy all view links to clipboard" msgstr "Copy all view links to clipboard" -#: themes/default/templates/index.html.ep:105 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:97 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:172 +#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:190 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 msgid "Copy to clipboard" msgstr "Copy to clipboard" @@ -103,7 +103,7 @@ msgstr "Delay repartition chart for disabled images" msgid "Delay repartition chart for enabled images" msgstr "Delay repartition chart for enabled images" -#: themes/default/templates/index.html.ep:127 themes/default/templates/index.html.ep:159 themes/default/templates/index.html.ep:203 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161 +#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150 msgid "Delete at first view?" msgstr "Delete at first view?" @@ -115,7 +115,7 @@ msgstr "Deleted images" msgid "Deleted images in 30 days" msgstr "Deleted images in 30 days" -#: themes/default/templates/index.html.ep:110 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181 +#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:177 themes/default/templates/partial/common.js.ep:182 msgid "Deletion link" msgstr "Deletion link" @@ -123,7 +123,7 @@ msgstr "Deletion link" msgid "Download all images" msgstr "Download all images" -#: themes/default/templates/index.html.ep:93 themes/default/templates/index.html.ep:95 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98 +#: themes/default/templates/index.html.ep:92 themes/default/templates/index.html.ep:94 themes/default/templates/partial/lutim.js.ep:88 themes/default/templates/partial/lutim.js.ep:92 msgid "Download link" msgstr "Download link" @@ -131,7 +131,7 @@ msgstr "Download link" msgid "Download zip link" msgstr "Download zip link" -#: themes/default/templates/index.html.ep:227 +#: themes/default/templates/index.html.ep:226 msgid "Drag & drop images here" msgstr "Drag & drop images here" @@ -139,11 +139,11 @@ msgstr "Drag & drop images here" msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want." msgstr "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want." -#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:206 +#: themes/default/templates/index.html.ep:161 themes/default/templates/index.html.ep:205 msgid "Encrypt the image (Lutim does not keep the key)." msgstr "Encrypt the image (Lutim does not keep the key)." -#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:128 +#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:128 msgid "Error while trying to modify the image." msgstr "Error while trying to modify the image." @@ -179,7 +179,7 @@ msgstr "Gallery link" msgid "Hit Ctrl+C, then Enter to copy the short link" msgstr "Hit Ctrl+C, then Enter to copy the short link" -#: themes/default/templates/layouts/default.html.ep:47 +#: themes/default/templates/layouts/default.html.ep:44 msgid "Homepage" msgstr "Homepage" @@ -199,7 +199,7 @@ msgstr "How to report an image?" msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained." msgstr "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained." -#: themes/default/templates/index.html.ep:188 themes/default/templates/index.html.ep:241 +#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:240 msgid "Image URL" msgstr "Image URL" @@ -211,7 +211,7 @@ msgstr "Image delay" msgid "Image deleted" msgstr "Image deleted" -#: lib/Lutim/Controller/Image.pm:799 +#: lib/Lutim/Controller/Image.pm:817 msgid "Image not found." msgstr "Image not found." @@ -239,11 +239,7 @@ msgstr "Is it really anonymous?" msgid "Is it really free (as in free beer)?" msgstr "Is it really free (as in free beer)?" -#: themes/default/templates/about.html.ep:21 -msgid "Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "Juste like you pronounce the French word lutin (/ly.tɛ̃/)." - -#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209 +#: themes/default/templates/index.html.ep:164 themes/default/templates/index.html.ep:208 msgid "Keep EXIF tags" msgstr "Keep EXIF tags" @@ -251,7 +247,7 @@ msgstr "Keep EXIF tags" msgid "Language" msgstr "Language" -#: themes/default/templates/index.html.ep:130 themes/default/templates/index.html.ep:191 themes/default/templates/index.html.ep:244 themes/default/templates/partial/lutim.js.ep:165 +#: themes/default/templates/index.html.ep:129 themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:243 themes/default/templates/partial/lutim.js.ep:157 msgid "Let's go!" msgstr "Let's go!" @@ -259,7 +255,7 @@ msgstr "Let's go!" msgid "License:" msgstr "License:" -#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:103 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116 +#: themes/default/templates/index.html.ep:100 themes/default/templates/index.html.ep:102 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:106 msgid "Link for share on social networks" msgstr "Link for share on social networks" @@ -283,11 +279,11 @@ msgstr "Lutim is a free (as in free beer) and anonymous image hosting service. I msgid "Main developers" msgstr "Main developers" -#: themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:87 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89 +#: themes/default/templates/index.html.ep:84 themes/default/templates/index.html.ep:86 themes/default/templates/partial/lutim.js.ep:76 themes/default/templates/partial/lutim.js.ep:79 msgid "Markdown syntax" msgstr "Markdown syntax" -#: themes/default/templates/partial/myfiles.js.ep:179 +#: themes/default/templates/partial/myfiles.js.ep:199 msgid "Modify expiration delay" msgstr "Modify expiration delay" @@ -303,11 +299,11 @@ msgstr "Next (arrow right)" msgid "No limit" msgstr "No limit" -#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +#: themes/default/templates/index.html.ep:176 themes/default/templates/index.html.ep:220 msgid "No watermark" msgstr "No watermark" -#: themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:236 +#: themes/default/templates/index.html.ep:189 themes/default/templates/index.html.ep:235 msgid "Only images are allowed" msgstr "Only images are allowed" @@ -352,7 +348,7 @@ msgstr "Raw stats" msgid "Save changes" msgstr "Save changes" -#: themes/default/templates/index.html.ep:183 +#: themes/default/templates/index.html.ep:182 msgid "Send an image" msgstr "Send an image" @@ -360,19 +356,23 @@ msgstr "Send an image" msgid "Signin" msgstr "Signin" -#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +#: themes/default/templates/index.html.ep:173 themes/default/templates/index.html.ep:217 msgid "Single watermark" msgstr "Single watermark" -#: themes/default/templates/index.html.ep:145 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176 +#: themes/default/templates/index.html.ep:144 themes/default/templates/partial/gallery.js.ep:210 themes/default/templates/partial/lutim.js.ep:166 msgid "Something bad happened" msgstr "Something bad happened" #. ($c->config('contact') -#: lib/Lutim/Controller/Image.pm:806 +#: lib/Lutim/Controller/Image.pm:824 msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." msgstr "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." +#: lib/Lutim/Controller/Image.pm:293 +msgid "Sorry, the API is disabled" +msgstr "" + #: themes/default/templates/about.html.ep:13 msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)." msgstr "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)." @@ -381,7 +381,7 @@ msgstr "The IP address of the image's sender is retained for a delay which depen msgid "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." msgstr "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." -#: lib/Lutim/Controller/Image.pm:348 +#: lib/Lutim/Controller/Image.pm:364 msgid "The URL is not valid." msgstr "The URL is not valid." @@ -398,14 +398,14 @@ msgid "The delete token is invalid." msgstr "The delete token is invalid." #. ($upload->filename) -#: lib/Lutim/Controller/Image.pm:531 +#: lib/Lutim/Controller/Image.pm:549 msgid "The file %1 is not an image." msgstr "The file %1 is not an image." #. ($tx->res->max_message_size) #. ($c->req->max_message_size) #. (config('max_file_size') -#: lib/Lutim/Controller/Image.pm:312 lib/Lutim/Controller/Image.pm:381 themes/default/templates/partial/lutim.js.ep:249 +#: lib/Lutim/Controller/Image.pm:328 lib/Lutim/Controller/Image.pm:397 themes/default/templates/partial/lutim.js.ep:245 msgid "The file exceed the size limit (%1)" msgstr "The file exceed the size limit (%1)" @@ -435,16 +435,21 @@ msgstr "The images you post on Lutim can be stored indefinitely or be deleted at msgid "The image’s delay has been successfully modified" msgstr "The image’s delay has been successfully modified" -#: themes/default/templates/partial/gallery.js.ep:277 +#. ('https://fr.wikipedia.org/wiki/Lutin') +#: themes/default/templates/about.html.ep:21 +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "The way you pronounce the French word lutin (/ly.tɛ̃/)." + +#: themes/default/templates/partial/gallery.js.ep:271 msgid "There is XXXX image(s) in the gallery" msgstr "There is XXXX image(s) in the gallery" #. ($c->config->{contact}) -#: lib/Lutim/Controller/Image.pm:528 +#: lib/Lutim/Controller/Image.pm:546 msgid "There is no more available URL. Retry or contact the administrator. %1" msgstr "There is no more available URL. Retry or contact the administrator. %1" -#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +#: themes/default/templates/index.html.ep:170 themes/default/templates/index.html.ep:214 msgid "Tiling watermark" msgstr "Tiling watermark" @@ -460,7 +465,7 @@ msgstr "Toggle navigation" msgid "Total" msgstr "Total" -#: themes/default/templates/index.html.ep:72 themes/default/templates/partial/lutim.js.ep:17 +#: msgid "Tweet it!" msgstr "Tweet it!" @@ -473,7 +478,7 @@ msgstr "Unable to copy to clipboard" msgid "Unable to find the image %1." msgstr "Unable to find the image %1." -#: lib/Lutim/Controller/Image.pm:617 lib/Lutim/Controller/Image.pm:662 lib/Lutim/Controller/Image.pm:703 lib/Lutim/Controller/Image.pm:746 lib/Lutim/Controller/Image.pm:758 lib/Lutim/Controller/Image.pm:769 lib/Lutim/Controller/Image.pm:796 lib/Lutim/Plugin/Helpers.pm:89 +#: lib/Lutim/Controller/Image.pm:635 lib/Lutim/Controller/Image.pm:680 lib/Lutim/Controller/Image.pm:721 lib/Lutim/Controller/Image.pm:764 lib/Lutim/Controller/Image.pm:776 lib/Lutim/Controller/Image.pm:787 lib/Lutim/Controller/Image.pm:814 lib/Lutim/Plugin/Helpers.pm:90 msgid "Unable to find the image: it has been deleted." msgstr "Unable to find the image: it has been deleted." @@ -485,7 +490,7 @@ msgstr "Unable to get counter" msgid "Unlike many image sharing services, you don't give us rights on uploaded images." msgstr "Unlike many image sharing services, you don't give us rights on uploaded images." -#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:239 +#: themes/default/templates/index.html.ep:186 themes/default/templates/index.html.ep:238 msgid "Upload an image with its URL" msgstr "Upload an image with its URL" @@ -498,11 +503,11 @@ msgid "Uploaded files by days" msgstr "Uploaded files by days" #. ($c->app->config('contact') -#: lib/Lutim/Plugin/Helpers.pm:222 +#: lib/Lutim/Plugin/Helpers.pm:223 msgid "Uploading is currently disabled, please try later or contact the administrator (%1)." msgstr "Uploading is currently disabled, please try later or contact the administrator (%1)." -#: themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:79 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76 +#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66 msgid "View link" msgstr "View link" diff --git a/themes/default/lib/Lutim/I18N/es.po b/themes/default/lib/Lutim/I18N/es.po index a2f4125..e232bd9 100644 --- a/themes/default/lib/Lutim/I18N/es.po +++ b/themes/default/lib/Lutim/I18N/es.po @@ -256,12 +256,8 @@ msgid "Is it really free (as in free beer)?" msgstr "¿Es realmente gratis?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Tal y como se pronuncia la palabra francesa lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Tal y como se pronuncia la palabra francesa lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/fr.po b/themes/default/lib/Lutim/I18N/fr.po index 269db80..a565c36 100644 --- a/themes/default/lib/Lutim/I18N/fr.po +++ b/themes/default/lib/Lutim/I18N/fr.po @@ -265,12 +265,8 @@ msgid "Is it really free (as in free beer)?" msgstr "C’est vraiment gratuit ?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Comme on prononce lutin " -"(/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Comme on prononce lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/fr_FR.po b/themes/default/lib/Lutim/I18N/fr_FR.po index 497af0a..ffe6683 100644 --- a/themes/default/lib/Lutim/I18N/fr_FR.po +++ b/themes/default/lib/Lutim/I18N/fr_FR.po @@ -265,12 +265,8 @@ msgid "Is it really free (as in free beer)?" msgstr "C’est vraiment gratuit ?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Comme on prononce lutin " -"(/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Comme on prononce lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/hr.po b/themes/default/lib/Lutim/I18N/hr.po index 068de83..690b4aa 100644 --- a/themes/default/lib/Lutim/I18N/hr.po +++ b/themes/default/lib/Lutim/I18N/hr.po @@ -253,10 +253,8 @@ msgid "Is it really free (as in free beer)?" msgstr "Je li se stvarno može besplatno koristiti?" #: themes/default/templates/about.html.ep:21 -msgid "Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Isto kao izgovaranje francuske riječi lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Isto kao izgovaranje francuske riječi lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/hu.po b/themes/default/lib/Lutim/I18N/hu.po index 8a987d9..379f25f 100644 --- a/themes/default/lib/Lutim/I18N/hu.po +++ b/themes/default/lib/Lutim/I18N/hu.po @@ -256,12 +256,8 @@ msgid "Is it really free (as in free beer)?" msgstr "Tényleg ingyenes?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Pont úgy, ahogy a francia lutin szót (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Pont úgy, ahogy a francia lutin szót (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/it.po b/themes/default/lib/Lutim/I18N/it.po index 3665a4a..570fd6e 100644 --- a/themes/default/lib/Lutim/I18N/it.po +++ b/themes/default/lib/Lutim/I18N/it.po @@ -258,12 +258,8 @@ msgid "Is it really free (as in free beer)?" msgstr "È veramente gratuita (come in birra gratis)?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Come si pronuncia la parola francese lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Come si pronuncia la parola francese lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/lutim.pot b/themes/default/lib/Lutim/I18N/lutim.pot index 96a2f26..71b8c11 100644 --- a/themes/default/lib/Lutim/I18N/lutim.pot +++ b/themes/default/lib/Lutim/I18N/lutim.pot @@ -19,7 +19,7 @@ msgstr "" #. (30) #. ($delay) #. (config('max_delay') -#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9 +#: lib/Lutim/Command/cron/stats.pm:156 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:170 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:187 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:129 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9 msgid "%1 days" msgstr "" @@ -28,7 +28,7 @@ msgstr "" msgid "%1 sent images on this instance from beginning." msgstr "" -#: themes/default/templates/index.html.ep:228 +#: themes/default/templates/index.html.ep:227 msgid "-or-" msgstr "" @@ -36,11 +36,11 @@ msgstr "" msgid "1 year" msgstr "" -#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 +#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 msgid "24 hours" msgstr "" -#: themes/default/templates/partial/myfiles.js.ep:210 +#: themes/default/templates/partial/myfiles.js.ep:237 msgid ": Error while trying to get the counter." msgstr "" @@ -52,7 +52,7 @@ msgstr "" msgid "Active images" msgstr "" -#: lib/Lutim/Controller/Image.pm:329 +#: lib/Lutim/Controller/Image.pm:345 msgid "An error occured while downloading the image." msgstr "" @@ -64,7 +64,7 @@ msgstr "" msgid "Back to homepage" msgstr "" -#: themes/default/templates/index.html.ep:231 themes/default/templates/index.html.ep:232 +#: themes/default/templates/index.html.ep:230 themes/default/templates/index.html.ep:231 msgid "Click to open the file browser" msgstr "" @@ -84,11 +84,11 @@ msgstr "" msgid "Copied to clipboard" msgstr "" -#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364 +#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:273 themes/default/templates/partial/lutim.js.ep:360 msgid "Copy all view links to clipboard" msgstr "" -#: themes/default/templates/index.html.ep:105 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:97 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:172 +#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:190 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 msgid "Copy to clipboard" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "Delay repartition chart for enabled images" msgstr "" -#: themes/default/templates/index.html.ep:127 themes/default/templates/index.html.ep:159 themes/default/templates/index.html.ep:203 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161 +#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150 msgid "Delete at first view?" msgstr "" @@ -116,7 +116,7 @@ msgstr "" msgid "Deleted images in 30 days" msgstr "" -#: themes/default/templates/index.html.ep:110 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181 +#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:177 themes/default/templates/partial/common.js.ep:182 msgid "Deletion link" msgstr "" @@ -124,7 +124,7 @@ msgstr "" msgid "Download all images" msgstr "" -#: themes/default/templates/index.html.ep:93 themes/default/templates/index.html.ep:95 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98 +#: themes/default/templates/index.html.ep:92 themes/default/templates/index.html.ep:94 themes/default/templates/partial/lutim.js.ep:88 themes/default/templates/partial/lutim.js.ep:92 msgid "Download link" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Download zip link" msgstr "" -#: themes/default/templates/index.html.ep:227 +#: themes/default/templates/index.html.ep:226 msgid "Drag & drop images here" msgstr "" @@ -140,11 +140,11 @@ msgstr "" msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want." msgstr "" -#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:206 +#: themes/default/templates/index.html.ep:161 themes/default/templates/index.html.ep:205 msgid "Encrypt the image (Lutim does not keep the key)." msgstr "" -#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:128 +#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:128 msgid "Error while trying to modify the image." msgstr "" @@ -180,7 +180,7 @@ msgstr "" msgid "Hit Ctrl+C, then Enter to copy the short link" msgstr "" -#: themes/default/templates/layouts/default.html.ep:47 +#: themes/default/templates/layouts/default.html.ep:44 msgid "Homepage" msgstr "" @@ -200,7 +200,7 @@ msgstr "" msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained." msgstr "" -#: themes/default/templates/index.html.ep:188 themes/default/templates/index.html.ep:241 +#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:240 msgid "Image URL" msgstr "" @@ -212,7 +212,7 @@ msgstr "" msgid "Image deleted" msgstr "" -#: lib/Lutim/Controller/Image.pm:799 +#: lib/Lutim/Controller/Image.pm:817 msgid "Image not found." msgstr "" @@ -240,11 +240,7 @@ msgstr "" msgid "Is it really free (as in free beer)?" msgstr "" -#: themes/default/templates/about.html.ep:21 -msgid "Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" - -#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:209 +#: themes/default/templates/index.html.ep:164 themes/default/templates/index.html.ep:208 msgid "Keep EXIF tags" msgstr "" @@ -252,7 +248,7 @@ msgstr "" msgid "Language" msgstr "" -#: themes/default/templates/index.html.ep:130 themes/default/templates/index.html.ep:191 themes/default/templates/index.html.ep:244 themes/default/templates/partial/lutim.js.ep:165 +#: themes/default/templates/index.html.ep:129 themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:243 themes/default/templates/partial/lutim.js.ep:157 msgid "Let's go!" msgstr "" @@ -260,7 +256,7 @@ msgstr "" msgid "License:" msgstr "" -#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:103 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116 +#: themes/default/templates/index.html.ep:100 themes/default/templates/index.html.ep:102 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:106 msgid "Link for share on social networks" msgstr "" @@ -284,11 +280,11 @@ msgstr "" msgid "Main developers" msgstr "" -#: themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:87 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89 +#: themes/default/templates/index.html.ep:84 themes/default/templates/index.html.ep:86 themes/default/templates/partial/lutim.js.ep:76 themes/default/templates/partial/lutim.js.ep:79 msgid "Markdown syntax" msgstr "" -#: themes/default/templates/partial/myfiles.js.ep:179 +#: themes/default/templates/partial/myfiles.js.ep:199 msgid "Modify expiration delay" msgstr "" @@ -304,11 +300,11 @@ msgstr "" msgid "No limit" msgstr "" -#: themes/default/templates/index.html.ep:177 themes/default/templates/index.html.ep:221 +#: themes/default/templates/index.html.ep:176 themes/default/templates/index.html.ep:220 msgid "No watermark" msgstr "" -#: themes/default/templates/index.html.ep:190 themes/default/templates/index.html.ep:236 +#: themes/default/templates/index.html.ep:189 themes/default/templates/index.html.ep:235 msgid "Only images are allowed" msgstr "" @@ -353,7 +349,7 @@ msgstr "" msgid "Save changes" msgstr "" -#: themes/default/templates/index.html.ep:183 +#: themes/default/templates/index.html.ep:182 msgid "Send an image" msgstr "" @@ -361,19 +357,23 @@ msgstr "" msgid "Signin" msgstr "" -#: themes/default/templates/index.html.ep:174 themes/default/templates/index.html.ep:218 +#: themes/default/templates/index.html.ep:173 themes/default/templates/index.html.ep:217 msgid "Single watermark" msgstr "" -#: themes/default/templates/index.html.ep:145 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176 +#: themes/default/templates/index.html.ep:144 themes/default/templates/partial/gallery.js.ep:210 themes/default/templates/partial/lutim.js.ep:166 msgid "Something bad happened" msgstr "" #. ($c->config('contact') -#: lib/Lutim/Controller/Image.pm:806 +#: lib/Lutim/Controller/Image.pm:824 msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." msgstr "" +#: lib/Lutim/Controller/Image.pm:293 +msgid "Sorry, the API is disabled" +msgstr "" + #: themes/default/templates/about.html.ep:13 msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)." msgstr "" @@ -382,7 +382,7 @@ msgstr "" msgid "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." msgstr "" -#: lib/Lutim/Controller/Image.pm:348 +#: lib/Lutim/Controller/Image.pm:364 msgid "The URL is not valid." msgstr "" @@ -399,14 +399,14 @@ msgid "The delete token is invalid." msgstr "" #. ($upload->filename) -#: lib/Lutim/Controller/Image.pm:531 +#: lib/Lutim/Controller/Image.pm:549 msgid "The file %1 is not an image." msgstr "" #. ($tx->res->max_message_size) #. ($c->req->max_message_size) #. (config('max_file_size') -#: lib/Lutim/Controller/Image.pm:312 lib/Lutim/Controller/Image.pm:381 themes/default/templates/partial/lutim.js.ep:249 +#: lib/Lutim/Controller/Image.pm:328 lib/Lutim/Controller/Image.pm:397 themes/default/templates/partial/lutim.js.ep:245 msgid "The file exceed the size limit (%1)" msgstr "" @@ -436,16 +436,21 @@ msgstr "" msgid "The image’s delay has been successfully modified" msgstr "" -#: themes/default/templates/partial/gallery.js.ep:277 +#. ('https://fr.wikipedia.org/wiki/Lutin') +#: themes/default/templates/about.html.ep:21 +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "" + +#: themes/default/templates/partial/gallery.js.ep:271 msgid "There is XXXX image(s) in the gallery" msgstr "" #. ($c->config->{contact}) -#: lib/Lutim/Controller/Image.pm:528 +#: lib/Lutim/Controller/Image.pm:546 msgid "There is no more available URL. Retry or contact the administrator. %1" msgstr "" -#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:215 +#: themes/default/templates/index.html.ep:170 themes/default/templates/index.html.ep:214 msgid "Tiling watermark" msgstr "" @@ -461,10 +466,6 @@ msgstr "" msgid "Total" msgstr "" -#: themes/default/templates/index.html.ep:72 themes/default/templates/partial/lutim.js.ep:17 -msgid "Tweet it!" -msgstr "" - #: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90 msgid "Unable to copy to clipboard" msgstr "" @@ -474,7 +475,7 @@ msgstr "" msgid "Unable to find the image %1." msgstr "" -#: lib/Lutim/Controller/Image.pm:617 lib/Lutim/Controller/Image.pm:662 lib/Lutim/Controller/Image.pm:703 lib/Lutim/Controller/Image.pm:746 lib/Lutim/Controller/Image.pm:758 lib/Lutim/Controller/Image.pm:769 lib/Lutim/Controller/Image.pm:796 lib/Lutim/Plugin/Helpers.pm:89 +#: lib/Lutim/Controller/Image.pm:635 lib/Lutim/Controller/Image.pm:680 lib/Lutim/Controller/Image.pm:721 lib/Lutim/Controller/Image.pm:764 lib/Lutim/Controller/Image.pm:776 lib/Lutim/Controller/Image.pm:787 lib/Lutim/Controller/Image.pm:814 lib/Lutim/Plugin/Helpers.pm:90 msgid "Unable to find the image: it has been deleted." msgstr "" @@ -486,7 +487,7 @@ msgstr "" msgid "Unlike many image sharing services, you don't give us rights on uploaded images." msgstr "" -#: themes/default/templates/index.html.ep:187 themes/default/templates/index.html.ep:239 +#: themes/default/templates/index.html.ep:186 themes/default/templates/index.html.ep:238 msgid "Upload an image with its URL" msgstr "" @@ -499,11 +500,11 @@ msgid "Uploaded files by days" msgstr "" #. ($c->app->config('contact') -#: lib/Lutim/Plugin/Helpers.pm:222 +#: lib/Lutim/Plugin/Helpers.pm:223 msgid "Uploading is currently disabled, please try later or contact the administrator (%1)." msgstr "" -#: themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:79 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76 +#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66 msgid "View link" msgstr "" diff --git a/themes/default/lib/Lutim/I18N/oc.po b/themes/default/lib/Lutim/I18N/oc.po index 6b444c5..ef84121 100644 --- a/themes/default/lib/Lutim/I18N/oc.po +++ b/themes/default/lib/Lutim/I18N/oc.po @@ -263,13 +263,8 @@ msgid "Is it really free (as in free beer)?" msgstr "Es vertadièrament gratuit ?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Òm pronóncia coma en occitan lengadocian, LU-TI-N, amb una M finala que sona " -"N, o coma la paraula francesa lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Òm pronóncia coma en occitan lengadocian, LU-TI-N, amb una M finala que sona N, o coma la paraula francesa lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/ru.po b/themes/default/lib/Lutim/I18N/ru.po index 7b5a765..11f3a50 100644 --- a/themes/default/lib/Lutim/I18N/ru.po +++ b/themes/default/lib/Lutim/I18N/ru.po @@ -258,12 +258,8 @@ msgid "Is it really free (as in free beer)?" msgstr "Это действительно бесплатно (as in free beer)?" #: themes/default/templates/about.html.ep:21 -msgid "" -"Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Как французское слово lutin (/ly.tɛ̃/)." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Как французское слово lutin (/ly.tɛ̃/)." #: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202 msgid "Keep EXIF tags" diff --git a/themes/default/lib/Lutim/I18N/sv.po b/themes/default/lib/Lutim/I18N/sv.po index 3fdc356..e75fc2e 100644 --- a/themes/default/lib/Lutim/I18N/sv.po +++ b/themes/default/lib/Lutim/I18N/sv.po @@ -244,10 +244,8 @@ msgid "Is it really free (as in free beer)?" msgstr "Är det verkligen gratis?" #: themes/default/templates/about.html.ep:21 -msgid "Juste like you pronounce the French word lutin (/ly.tɛ̃/)." -msgstr "" -"Precis som du uttalar ordet lutin på franska ([ly.tɛ̃])." +msgid "The way you pronounce the French word lutin (/ly.tɛ̃/)." +msgstr "Precis som du uttalar ordet lutin på franska ([ly.tɛ̃])." #: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 msgid "Keep EXIF tags" diff --git a/themes/default/templates/about.html.ep b/themes/default/templates/about.html.ep index 43669d6..41cf50f 100644 --- a/themes/default/templates/about.html.ep +++ b/themes/default/templates/about.html.ep @@ -18,7 +18,7 @@

<%= l('How to report an image?') %>

<%= l('Please contact the administrator: %1', config('contact')) %>

<%= l('How do you pronounce Lutim?') %>

-

<%== l('Juste like you pronounce the French word lutin (/ly.tɛ̃/).') %>

+

<%== l('The way you pronounce the French word lutin (/ly.tɛ̃/).', 'https://fr.wikipedia.org/wiki/Lutin') %>

<%= l('What about the software which provides the service?') %>

<%== l('The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do.') %>

<%== l('For more details, see the homepage of the project.') %>

From 82f57fc72d065b2276f34b11bee8972596cfd676 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sat, 30 Dec 2023 07:42:25 +0100 Subject: [PATCH 4/8] =?UTF-8?q?=E2=9C=A8=20=E2=80=94=20Allow=20to=20config?= =?UTF-8?q?ure=20the=20directory=20where=20to=20store=20the=20images=20(#1?= =?UTF-8?q?25)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 3 +- lib/Lutim.pm | 4 ++ lib/Lutim/Controller/Image.pm | 8 ++-- lib/Lutim/DefaultConfig.pm | 1 + lib/Lutim/Plugin/Helpers.pm | 2 +- lutim.conf.template | 9 +++++ t/postgresql1.conf | 70 ++++++++++++++++++++++++++++++++-- t/postgresql2.conf | 72 ++++++++++++++++++++++++++++++++--- t/postgresql3.conf | 47 +++++++++++++++++++++-- t/sqlite1.conf | 70 ++++++++++++++++++++++++++++++++-- t/sqlite2.conf | 72 ++++++++++++++++++++++++++++++++--- t/sqlite3.conf | 47 +++++++++++++++++++++-- 12 files changed, 372 insertions(+), 33 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3f7c042..f2614e6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,8 @@ Revision history for Lutim 0.17.0 ????-??-?? - - 🐛 — AVIF format support + - 🐛 — AVIF format support (#139) + - ✨ — Allow to configure the directory where to store the images (#125) 0.16.0 2023-12-29 - ⬆️ Update jQuery diff --git a/lib/Lutim.pm b/lib/Lutim.pm index 4c1ff9e..286b31e 100644 --- a/lib/Lutim.pm +++ b/lib/Lutim.pm @@ -109,6 +109,10 @@ sub startup { $self->plugin('Lutim::Plugin::Helpers'); $self->plugin('Lutim::Plugin::Lang'); + # Create directory if needed + mkdir($self->config('upload_dir'), 0700) unless (-d $self->config('upload_dir')); + die ('The upload directory ('.$self->config('upload_dir').') is not writable') unless (-w $self->config('upload_dir')); + # Minion if ($config->{minion}->{enabled}) { $self->config->{minion}->{dbtype} = 'sqlite' unless defined $config->{minion}->{dbtype}; diff --git a/lib/Lutim/Controller/Image.pm b/lib/Lutim/Controller/Image.pm index 5f56b95..f584ee8 100644 --- a/lib/Lutim/Controller/Image.pm +++ b/lib/Lutim/Controller/Image.pm @@ -2,6 +2,7 @@ package Lutim::Controller::Image; use Mojo::Asset::Memory; use Mojo::Base 'Mojolicious::Controller'; +use Mojo::File qw(path); use Mojo::Util qw(url_escape url_unescape b64_encode encode); use Mojo::JSON qw(true false); use Lutim::DB::Image; @@ -390,9 +391,6 @@ sub add { my ($msg, $short, $real_short, $token, $thumb, $limit, $created); # Check file type if (index($mediatype, 'image/') >= 0) { - # Create directory if needed - mkdir('files', 0700) unless (-d 'files'); - if ($c->req->is_limit_exceeded) { $msg = $c->l('The file exceed the size limit (%1)', $c->req->max_message_size); if (defined($c->param('format')) && $c->param('format') eq 'json') { @@ -413,7 +411,7 @@ sub add { # Save file and create record my $filename = unidecode($upload->filename); my $ext = ($filename =~ m/([^.]+)$/)[0]; - my $path = 'files/'.$record->short.'.'.$ext; + my $path = path($c->config('upload_dir'), $record->short.'.'.$ext)->to_string; my ($width, $height); if ($im_loaded && $mediatype ne 'image/svg+xml' # ImageMagick doesn't work with SVG, xcf or avif files @@ -646,7 +644,7 @@ sub short { if ($image->mediatype eq 'image/gif') { if (defined($image->width) && defined($image->height)) { ($width, $height) = ($image->width, $image->height); - } elsif ($im_loaded) { + } elsif ($im_loaded && $image->mediatype !~ m/xcf|avif/) { my $upload = $c->decrypt($key, $image->path, $image->iv); my $im = Image::Magick->new; $im->BlobToImage($upload->slurp); diff --git a/lib/Lutim/DefaultConfig.pm b/lib/Lutim/DefaultConfig.pm index 3f42af4..ef47a48 100644 --- a/lib/Lutim/DefaultConfig.pm +++ b/lib/Lutim/DefaultConfig.pm @@ -23,6 +23,7 @@ our $default_config = { watermark_enforce => 'none', theme => 'default', disable_api => 0, + upload_dir => 'files', dbtype => 'sqlite', db_path => 'lutim.db', max_files_in_zip => 15, diff --git a/lib/Lutim/Plugin/Helpers.pm b/lib/Lutim/Plugin/Helpers.pm index 65725eb..c025765 100644 --- a/lib/Lutim/Plugin/Helpers.pm +++ b/lib/Lutim/Plugin/Helpers.pm @@ -144,7 +144,7 @@ sub _render_file { my $asset = Mojo::Asset::Memory->new; $asset->add_chunk($cache->{asset}); - if (defined $thumb && $im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') { # ImageMagick don't work in Debian with svg (for now?) + if (defined $thumb && $im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/avif') { # ImageMagick don't work in Debian with svg (for now?) my $im = Image::Magick->new; $im->BlobToImage($asset->slurp); diff --git a/lutim.conf.template b/lutim.conf.template index b6a55d0..6423067 100644 --- a/lutim.conf.template +++ b/lutim.conf.template @@ -134,6 +134,15 @@ # optional, default is 0 #disable_api => 0, + # Define a path to the upload directory, where the uploaded images will be stored. + # You can define it relative to lutim directory or set an absolute path. + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you move the images in an other directory (if you keep the old directory + # where it was, you have nothing to do). + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite diff --git a/t/postgresql1.conf b/t/postgresql1.conf index 7a7a460..6a30bd7 100644 --- a/t/postgresql1.conf +++ b/t/postgresql1.conf @@ -97,6 +97,29 @@ # optional, default is 0 #always_encrypt => 0, + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + # length of the image's delete token # optional, default is 24 #token_length => 24, @@ -107,6 +130,18 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + + # Define a path to the upload directory, where the uploaded images will be stored + # You can define it relative to lutim directory or set an absolute path + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you change the upload_dir after getting images uploaded. + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -154,6 +189,29 @@ # } #}, + # set `ldap` if you want that only authenticated users can shorten URLs + # please note that everybody can still use shortend URLs + # optional, no default + #ldap => { + # uri => 'ldaps://ldap.example.org', # server URI + # user_tree => 'ou=users,dc=example,dc=org', # search base DN + # bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN + # bind_pwd => 'secr3t', # search bind password + # user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.) + # user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.) + #}, + + # set `htpasswd` if you want to use an htpasswd file instead of ldap + # create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2` + # make sure that lutim can read the file! + # optional, no default + #htpasswd => 'lutim.passwd', + + # if you've set ldap or htpasswd above, the session will last `session_duration` seconds before + # the user needs to reauthenticate + # optional, default is 3600 + #session_duration => 3600, + # disable counters of images # set to 1 to disable counters # optional, counters are enabled by default @@ -200,7 +258,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -210,7 +268,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -219,18 +277,22 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' #x_xss_protection => '1; mode=block', + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + ########################## # Lutim cron jobs settings ########################## diff --git a/t/postgresql2.conf b/t/postgresql2.conf index 3958ed0..860d67c 100644 --- a/t/postgresql2.conf +++ b/t/postgresql2.conf @@ -97,6 +97,29 @@ # optional, default is 0 #always_encrypt => 0, + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + # length of the image's delete token # optional, default is 24 #token_length => 24, @@ -107,6 +130,18 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + + # Define a path to the upload directory, where the uploaded images will be stored + # You can define it relative to lutim directory or set an absolute path + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you change the upload_dir after getting images uploaded. + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -152,7 +187,30 @@ # #user => 'DBUSER', # #pwd => 'DBPASSWORD' # } - }, + #}, + + # set `ldap` if you want that only authenticated users can shorten URLs + # please note that everybody can still use shortend URLs + # optional, no default + #ldap => { + # uri => 'ldaps://ldap.example.org', # server URI + # user_tree => 'ou=users,dc=example,dc=org', # search base DN + # bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN + # bind_pwd => 'secr3t', # search bind password + # user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.) + # user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.) + #}, + + # set `htpasswd` if you want to use an htpasswd file instead of ldap + # create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2` + # make sure that lutim can read the file! + # optional, no default + #htpasswd => 'lutim.passwd', + + # if you've set ldap or htpasswd above, the session will last `session_duration` seconds before + # the user needs to reauthenticate + # optional, default is 3600 + #session_duration => 3600, # disable counters of images # set to 1 to disable counters @@ -200,7 +258,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -210,7 +268,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -219,18 +277,22 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' #x_xss_protection => '1; mode=block', + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + ########################## # Lutim cron jobs settings ########################## diff --git a/t/postgresql3.conf b/t/postgresql3.conf index 7cb7aed..7747c77 100644 --- a/t/postgresql3.conf +++ b/t/postgresql3.conf @@ -97,6 +97,29 @@ # optional, default is 0 #always_encrypt => 0, + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + # length of the image's delete token # optional, default is 24 #token_length => 24, @@ -107,6 +130,18 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + + # Define a path to the upload directory, where the uploaded images will be stored + # You can define it relative to lutim directory or set an absolute path + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you change the upload_dir after getting images uploaded. + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -200,7 +235,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -210,7 +245,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -219,18 +254,22 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' #x_xss_protection => '1; mode=block', + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + ########################## # Lutim cron jobs settings ########################## diff --git a/t/sqlite1.conf b/t/sqlite1.conf index 75f22e5..06fa9bd 100644 --- a/t/sqlite1.conf +++ b/t/sqlite1.conf @@ -97,6 +97,29 @@ # optional, default is 0 #always_encrypt => 0, + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + # length of the image's delete token # optional, default is 24 #token_length => 24, @@ -107,6 +130,18 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + + # Define a path to the upload directory, where the uploaded images will be stored + # You can define it relative to lutim directory or set an absolute path + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you change the upload_dir after getting images uploaded. + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -154,6 +189,29 @@ # } #}, + # set `ldap` if you want that only authenticated users can shorten URLs + # please note that everybody can still use shortend URLs + # optional, no default + #ldap => { + # uri => 'ldaps://ldap.example.org', # server URI + # user_tree => 'ou=users,dc=example,dc=org', # search base DN + # bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN + # bind_pwd => 'secr3t', # search bind password + # user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.) + # user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.) + #}, + + # set `htpasswd` if you want to use an htpasswd file instead of ldap + # create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2` + # make sure that lutim can read the file! + # optional, no default + #htpasswd => 'lutim.passwd', + + # if you've set ldap or htpasswd above, the session will last `session_duration` seconds before + # the user needs to reauthenticate + # optional, default is 3600 + #session_duration => 3600, + # disable counters of images # set to 1 to disable counters # optional, counters are enabled by default @@ -200,7 +258,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -210,7 +268,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -219,18 +277,22 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' #x_xss_protection => '1; mode=block', + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + ########################## # Lutim cron jobs settings ########################## diff --git a/t/sqlite2.conf b/t/sqlite2.conf index 67e9bcf..af51634 100644 --- a/t/sqlite2.conf +++ b/t/sqlite2.conf @@ -97,6 +97,29 @@ # optional, default is 0 #always_encrypt => 0, + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + # length of the image's delete token # optional, default is 24 #token_length => 24, @@ -107,6 +130,18 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + + # Define a path to the upload directory, where the uploaded images will be stored + # You can define it relative to lutim directory or set an absolute path + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you change the upload_dir after getting images uploaded. + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -152,7 +187,30 @@ # #user => 'DBUSER', # #pwd => 'DBPASSWORD' # } - }, + #}, + + # set `ldap` if you want that only authenticated users can shorten URLs + # please note that everybody can still use shortend URLs + # optional, no default + #ldap => { + # uri => 'ldaps://ldap.example.org', # server URI + # user_tree => 'ou=users,dc=example,dc=org', # search base DN + # bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN + # bind_pwd => 'secr3t', # search bind password + # user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.) + # user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.) + #}, + + # set `htpasswd` if you want to use an htpasswd file instead of ldap + # create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2` + # make sure that lutim can read the file! + # optional, no default + #htpasswd => 'lutim.passwd', + + # if you've set ldap or htpasswd above, the session will last `session_duration` seconds before + # the user needs to reauthenticate + # optional, default is 3600 + #session_duration => 3600, # disable counters of images # set to 1 to disable counters @@ -200,7 +258,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -210,7 +268,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -219,18 +277,22 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' #x_xss_protection => '1; mode=block', + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + ########################## # Lutim cron jobs settings ########################## diff --git a/t/sqlite3.conf b/t/sqlite3.conf index 872b8e9..1ff0c8b 100644 --- a/t/sqlite3.conf +++ b/t/sqlite3.conf @@ -97,6 +97,29 @@ # optional, default is 0 #always_encrypt => 0, + # you can allow to use a watermark on the uploaded images (or enforce its use) + # define a path to the watermark image (provide an image with alpha channel) + # you can define the path relative to lutim directory or set an absolute path + # to disable the usage of a watermark, leave it blank or commented + # optional, no default + #watermark_path => '', + + # the watermark can be a tiling one or a single one + # when using a small one, you can choose where to place it + # valid values are 'Center', 'North', 'NorthEast', 'East', 'SouthEast', 'South', 'SouthWest', 'West' and 'NorthWest' (case insensitive) + # optional, default is 'SouthEast' + #watermark_placement => 'SouthEast', + + # choose which watermark (tiling, single or none) should be used by default + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_default => 'none', + + # choose which watermark (tiling, single or none) should be enforced (users will always have a watermark and won’t be able to disable it) + # valid values are 'tiling', 'single' or 'none' (case insensitive) + # optional, default is 'none' + #watermark_enforce => 'none', + # length of the image's delete token # optional, default is 24 #token_length => 24, @@ -107,6 +130,18 @@ # optional, defaut is / #prefix => '/', + # if set to 1, Lutim will try to prevent its use without using the web interface + # optional, default is 0 + #disable_api => 0, + + # Define a path to the upload directory, where the uploaded images will be stored + # You can define it relative to lutim directory or set an absolute path + # The path is stored in database for each uploaded file, so you’ll need to do some + # SQL commands if you change the upload_dir after getting images uploaded. + # Remember that it has to be in a directory writable by Lutim user + # optional, default is 'files' + #upload_dir => 'files', + # choose what database you want to use # valid choices are sqlite and postgresql (all lowercase) # optional, default is sqlite @@ -200,7 +235,7 @@ # optional, default is 0 #quiet_logs => 0, - # Content-Security-Policy header that will be sent by Lstu + # Content-Security-Policy header that will be sent by Lutim # Set to '' to disable CSP header # https://content-security-policy.com/ provides a good documentation about CSP. # https://report-uri.com/home/generate provides a tool to generate a CSP header. @@ -210,7 +245,7 @@ # the default value is good for `default` theme #csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'", - # X-Frame-Options header that will be sent by Lstu + # X-Frame-Options header that will be sent by Lutim # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Set to '' to disable X-Frame-Options header # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options @@ -219,18 +254,22 @@ # optional, default is 'DENY' #x_frame_options => 'DENY', - # X-Content-Type-Options that will be sent by Lstu + # X-Content-Type-Options that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options # Set to '' to disable X-Content-Type-Options header # optional, default is 'nosniff' #x_content_type_options => 'nosniff', - # X-XSS-Protection that will be sent by Lstu + # X-XSS-Protection that will be sent by Lutim # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection # Set to '' to disable X-XSS-Protection header # optional, default is '1; mode=block' #x_xss_protection => '1; mode=block', + # if set, the uploaded images will use this domain + # optional + #fixed_domain => 'example.org', + ########################## # Lutim cron jobs settings ########################## From 81701b6f60af4274ee05f35feef1c07ef0577559 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sat, 30 Dec 2023 08:03:58 +0100 Subject: [PATCH 5/8] =?UTF-8?q?=E2=9C=A8=20=E2=80=94=20Ask=20for=20confirm?= =?UTF-8?q?ation=20before=20deleting=20image=20on=20index=20page=20(#92)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 1 + themes/default/lib/Lutim/I18N/en.po | 52 ++++++++++--------- themes/default/lib/Lutim/I18N/lutim.pot | 50 ++++++++++-------- themes/default/templates/partial/common.js.ep | 18 ++++++- themes/default/templates/partial/lutim.js.ep | 10 +--- .../default/templates/partial/myfiles.js.ep | 7 +++ .../korrigan/templates/partial/korrigan.js.ep | 2 +- 7 files changed, 83 insertions(+), 57 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f2614e6..2b39fa7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,7 @@ Revision history for Lutim 0.17.0 ????-??-?? - 🐛 — AVIF format support (#139) - ✨ — Allow to configure the directory where to store the images (#125) + - ✨ — Ask for confirmation before deleting image on index page (#92) 0.16.0 2023-12-29 - ⬆️ Update jQuery diff --git a/themes/default/lib/Lutim/I18N/en.po b/themes/default/lib/Lutim/I18N/en.po index 020df8f..5ca2075 100644 --- a/themes/default/lib/Lutim/I18N/en.po +++ b/themes/default/lib/Lutim/I18N/en.po @@ -31,15 +31,15 @@ msgstr "%1 sent images on this instance from beginning." msgid "-or-" msgstr "-or-" -#: lib/Lutim.pm:342 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10 +#: lib/Lutim.pm:346 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10 msgid "1 year" msgstr "1 year" -#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 +#: lib/Lutim.pm:345 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 msgid "24 hours" msgstr "24 hours" -#: themes/default/templates/partial/myfiles.js.ep:237 +#: themes/default/templates/partial/myfiles.js.ep:244 msgid ": Error while trying to get the counter." msgstr ": Error while trying to get the counter." @@ -51,7 +51,7 @@ msgstr "About" msgid "Active images" msgstr "Active images" -#: lib/Lutim/Controller/Image.pm:345 +#: lib/Lutim/Controller/Image.pm:346 msgid "An error occured while downloading the image." msgstr "An error occured while downloading the image." @@ -59,6 +59,10 @@ msgstr "An error occured while downloading the image." msgid "Archives download" msgstr "Archives download" +#: themes/default/templates/partial/common.js.ep:145 +msgid "Are you sure you want to delete the image ${short}?" +msgstr "Are you sure you want to delete the image ${short}?" + #: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25 msgid "Back to homepage" msgstr "Back to homepage" @@ -83,11 +87,11 @@ msgstr "Contributors" msgid "Copied to clipboard" msgstr "Copied to clipboard" -#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:273 themes/default/templates/partial/lutim.js.ep:360 +#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:267 themes/default/templates/partial/lutim.js.ep:354 msgid "Copy all view links to clipboard" msgstr "Copy all view links to clipboard" -#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:190 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 +#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:206 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 msgid "Copy to clipboard" msgstr "Copy to clipboard" @@ -115,7 +119,7 @@ msgstr "Deleted images" msgid "Deleted images in 30 days" msgstr "Deleted images in 30 days" -#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:177 themes/default/templates/partial/common.js.ep:182 +#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:192 themes/default/templates/partial/common.js.ep:197 msgid "Deletion link" msgstr "Deletion link" @@ -207,11 +211,11 @@ msgstr "Image URL" msgid "Image delay" msgstr "Image delay" -#: themes/default/templates/partial/common.js.ep:157 +#: themes/default/templates/partial/common.js.ep:172 msgid "Image deleted" msgstr "Image deleted" -#: lib/Lutim/Controller/Image.pm:817 +#: lib/Lutim/Controller/Image.pm:815 msgid "Image not found." msgstr "Image not found." @@ -365,13 +369,13 @@ msgid "Something bad happened" msgstr "Something bad happened" #. ($c->config('contact') -#: lib/Lutim/Controller/Image.pm:824 +#: lib/Lutim/Controller/Image.pm:822 msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." msgstr "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." -#: lib/Lutim/Controller/Image.pm:293 +#: lib/Lutim/Controller/Image.pm:294 msgid "Sorry, the API is disabled" -msgstr "" +msgstr "Sorry, the API is disabled" #: themes/default/templates/about.html.ep:13 msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)." @@ -381,7 +385,7 @@ msgstr "The IP address of the image's sender is retained for a delay which depen msgid "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." msgstr "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." -#: lib/Lutim/Controller/Image.pm:364 +#: lib/Lutim/Controller/Image.pm:365 msgid "The URL is not valid." msgstr "The URL is not valid." @@ -393,19 +397,19 @@ msgstr "The automatic download process will open a tab in your browser for each msgid "The data has been successfully imported." msgstr "The data has been successfully imported." -#: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228 +#: lib/Lutim/Controller/Image.pm:161 lib/Lutim/Controller/Image.pm:229 msgid "The delete token is invalid." msgstr "The delete token is invalid." #. ($upload->filename) -#: lib/Lutim/Controller/Image.pm:549 +#: lib/Lutim/Controller/Image.pm:547 msgid "The file %1 is not an image." msgstr "The file %1 is not an image." #. ($tx->res->max_message_size) #. ($c->req->max_message_size) #. (config('max_file_size') -#: lib/Lutim/Controller/Image.pm:328 lib/Lutim/Controller/Image.pm:397 themes/default/templates/partial/lutim.js.ep:245 +#: lib/Lutim/Controller/Image.pm:329 lib/Lutim/Controller/Image.pm:395 themes/default/templates/partial/lutim.js.ep:239 msgid "The file exceed the size limit (%1)" msgstr "The file exceed the size limit (%1)" @@ -414,12 +418,12 @@ msgid "The graph's datas are not updated in real-time." msgstr "The graph's datas are not updated in real-time." #. ($image->filename) -#: lib/Lutim/Controller/Image.pm:230 +#: lib/Lutim/Controller/Image.pm:231 msgid "The image %1 has already been deleted." msgstr "The image %1 has already been deleted." #. ($image->filename) -#: lib/Lutim/Controller/Image.pm:239 lib/Lutim/Controller/Image.pm:244 +#: lib/Lutim/Controller/Image.pm:240 lib/Lutim/Controller/Image.pm:245 msgid "The image %1 has been successfully deleted" msgstr "The image %1 has been successfully deleted" @@ -431,7 +435,7 @@ msgstr "The images are encrypted on the server (Lutim does not keep the key)." msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed." msgstr "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed." -#: lib/Lutim/Controller/Image.pm:168 +#: lib/Lutim/Controller/Image.pm:169 msgid "The image’s delay has been successfully modified" msgstr "The image’s delay has been successfully modified" @@ -445,7 +449,7 @@ msgid "There is XXXX image(s) in the gallery" msgstr "There is XXXX image(s) in the gallery" #. ($c->config->{contact}) -#: lib/Lutim/Controller/Image.pm:546 +#: lib/Lutim/Controller/Image.pm:544 msgid "There is no more available URL. Retry or contact the administrator. %1" msgstr "There is no more available URL. Retry or contact the administrator. %1" @@ -474,15 +478,15 @@ msgid "Unable to copy to clipboard" msgstr "Unable to copy to clipboard" #. ($short) -#: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273 +#: lib/Lutim/Controller/Image.pm:109 lib/Lutim/Controller/Image.pm:203 lib/Lutim/Controller/Image.pm:274 msgid "Unable to find the image %1." msgstr "Unable to find the image %1." -#: lib/Lutim/Controller/Image.pm:635 lib/Lutim/Controller/Image.pm:680 lib/Lutim/Controller/Image.pm:721 lib/Lutim/Controller/Image.pm:764 lib/Lutim/Controller/Image.pm:776 lib/Lutim/Controller/Image.pm:787 lib/Lutim/Controller/Image.pm:814 lib/Lutim/Plugin/Helpers.pm:90 +#: lib/Lutim/Controller/Image.pm:633 lib/Lutim/Controller/Image.pm:678 lib/Lutim/Controller/Image.pm:719 lib/Lutim/Controller/Image.pm:762 lib/Lutim/Controller/Image.pm:774 lib/Lutim/Controller/Image.pm:785 lib/Lutim/Controller/Image.pm:812 lib/Lutim/Plugin/Helpers.pm:90 msgid "Unable to find the image: it has been deleted." msgstr "Unable to find the image: it has been deleted." -#: lib/Lutim/Controller/Image.pm:145 +#: lib/Lutim/Controller/Image.pm:146 msgid "Unable to get counter" msgstr "Unable to get counter" @@ -563,7 +567,7 @@ msgstr "arabic translation" msgid "core developer" msgstr "core developer" -#: lib/Lutim.pm:340 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6 +#: lib/Lutim.pm:344 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6 msgid "no time limit" msgstr "no time limit" diff --git a/themes/default/lib/Lutim/I18N/lutim.pot b/themes/default/lib/Lutim/I18N/lutim.pot index 71b8c11..3404c26 100644 --- a/themes/default/lib/Lutim/I18N/lutim.pot +++ b/themes/default/lib/Lutim/I18N/lutim.pot @@ -32,15 +32,15 @@ msgstr "" msgid "-or-" msgstr "" -#: lib/Lutim.pm:342 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10 +#: lib/Lutim.pm:346 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10 msgid "1 year" msgstr "" -#: lib/Lutim.pm:341 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 +#: lib/Lutim.pm:345 lib/Lutim/Command/cron/stats.pm:155 lib/Lutim/Command/cron/stats.pm:169 lib/Lutim/Command/cron/stats.pm:186 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:138 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7 msgid "24 hours" msgstr "" -#: themes/default/templates/partial/myfiles.js.ep:237 +#: themes/default/templates/partial/myfiles.js.ep:244 msgid ": Error while trying to get the counter." msgstr "" @@ -52,7 +52,7 @@ msgstr "" msgid "Active images" msgstr "" -#: lib/Lutim/Controller/Image.pm:345 +#: lib/Lutim/Controller/Image.pm:346 msgid "An error occured while downloading the image." msgstr "" @@ -60,6 +60,10 @@ msgstr "" msgid "Archives download" msgstr "" +#: themes/default/templates/partial/common.js.ep:145 +msgid "Are you sure you want to delete the image ${short}?" +msgstr "" + #: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25 msgid "Back to homepage" msgstr "" @@ -84,11 +88,11 @@ msgstr "" msgid "Copied to clipboard" msgstr "" -#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:273 themes/default/templates/partial/lutim.js.ep:360 +#: themes/default/templates/partial/lutim.js.ep:206 themes/default/templates/partial/lutim.js.ep:267 themes/default/templates/partial/lutim.js.ep:354 msgid "Copy all view links to clipboard" msgstr "" -#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:190 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 +#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:206 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 msgid "Copy to clipboard" msgstr "" @@ -116,7 +120,7 @@ msgstr "" msgid "Deleted images in 30 days" msgstr "" -#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:177 themes/default/templates/partial/common.js.ep:182 +#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:192 themes/default/templates/partial/common.js.ep:197 msgid "Deletion link" msgstr "" @@ -208,11 +212,11 @@ msgstr "" msgid "Image delay" msgstr "" -#: themes/default/templates/partial/common.js.ep:157 +#: themes/default/templates/partial/common.js.ep:172 msgid "Image deleted" msgstr "" -#: lib/Lutim/Controller/Image.pm:817 +#: lib/Lutim/Controller/Image.pm:815 msgid "Image not found." msgstr "" @@ -366,11 +370,11 @@ msgid "Something bad happened" msgstr "" #. ($c->config('contact') -#: lib/Lutim/Controller/Image.pm:824 +#: lib/Lutim/Controller/Image.pm:822 msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)." msgstr "" -#: lib/Lutim/Controller/Image.pm:293 +#: lib/Lutim/Controller/Image.pm:294 msgid "Sorry, the API is disabled" msgstr "" @@ -382,7 +386,7 @@ msgstr "" msgid "The Lutim software is a free software, which allows you to download and install it on you own server. Have a look at the AGPL to see what you can do." msgstr "" -#: lib/Lutim/Controller/Image.pm:364 +#: lib/Lutim/Controller/Image.pm:365 msgid "The URL is not valid." msgstr "" @@ -394,19 +398,19 @@ msgstr "" msgid "The data has been successfully imported." msgstr "" -#: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228 +#: lib/Lutim/Controller/Image.pm:161 lib/Lutim/Controller/Image.pm:229 msgid "The delete token is invalid." msgstr "" #. ($upload->filename) -#: lib/Lutim/Controller/Image.pm:549 +#: lib/Lutim/Controller/Image.pm:547 msgid "The file %1 is not an image." msgstr "" #. ($tx->res->max_message_size) #. ($c->req->max_message_size) #. (config('max_file_size') -#: lib/Lutim/Controller/Image.pm:328 lib/Lutim/Controller/Image.pm:397 themes/default/templates/partial/lutim.js.ep:245 +#: lib/Lutim/Controller/Image.pm:329 lib/Lutim/Controller/Image.pm:395 themes/default/templates/partial/lutim.js.ep:239 msgid "The file exceed the size limit (%1)" msgstr "" @@ -415,12 +419,12 @@ msgid "The graph's datas are not updated in real-time." msgstr "" #. ($image->filename) -#: lib/Lutim/Controller/Image.pm:230 +#: lib/Lutim/Controller/Image.pm:231 msgid "The image %1 has already been deleted." msgstr "" #. ($image->filename) -#: lib/Lutim/Controller/Image.pm:239 lib/Lutim/Controller/Image.pm:244 +#: lib/Lutim/Controller/Image.pm:240 lib/Lutim/Controller/Image.pm:245 msgid "The image %1 has been successfully deleted" msgstr "" @@ -432,7 +436,7 @@ msgstr "" msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed." msgstr "" -#: lib/Lutim/Controller/Image.pm:168 +#: lib/Lutim/Controller/Image.pm:169 msgid "The image’s delay has been successfully modified" msgstr "" @@ -446,7 +450,7 @@ msgid "There is XXXX image(s) in the gallery" msgstr "" #. ($c->config->{contact}) -#: lib/Lutim/Controller/Image.pm:546 +#: lib/Lutim/Controller/Image.pm:544 msgid "There is no more available URL. Retry or contact the administrator. %1" msgstr "" @@ -471,15 +475,15 @@ msgid "Unable to copy to clipboard" msgstr "" #. ($short) -#: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273 +#: lib/Lutim/Controller/Image.pm:109 lib/Lutim/Controller/Image.pm:203 lib/Lutim/Controller/Image.pm:274 msgid "Unable to find the image %1." msgstr "" -#: lib/Lutim/Controller/Image.pm:635 lib/Lutim/Controller/Image.pm:680 lib/Lutim/Controller/Image.pm:721 lib/Lutim/Controller/Image.pm:764 lib/Lutim/Controller/Image.pm:776 lib/Lutim/Controller/Image.pm:787 lib/Lutim/Controller/Image.pm:814 lib/Lutim/Plugin/Helpers.pm:90 +#: lib/Lutim/Controller/Image.pm:633 lib/Lutim/Controller/Image.pm:678 lib/Lutim/Controller/Image.pm:719 lib/Lutim/Controller/Image.pm:762 lib/Lutim/Controller/Image.pm:774 lib/Lutim/Controller/Image.pm:785 lib/Lutim/Controller/Image.pm:812 lib/Lutim/Plugin/Helpers.pm:90 msgid "Unable to find the image: it has been deleted." msgstr "" -#: lib/Lutim/Controller/Image.pm:145 +#: lib/Lutim/Controller/Image.pm:146 msgid "Unable to get counter" msgstr "" @@ -560,7 +564,7 @@ msgstr "" msgid "core developer" msgstr "" -#: lib/Lutim.pm:340 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6 +#: lib/Lutim.pm:344 lib/Lutim/Command/cron/stats.pm:154 lib/Lutim/Command/cron/stats.pm:168 lib/Lutim/Command/cron/stats.pm:185 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6 msgid "no time limit" msgstr "" diff --git a/themes/default/templates/partial/common.js.ep b/themes/default/templates/partial/common.js.ep index 95fea70..8c5263b 100644 --- a/themes/default/templates/partial/common.js.ep +++ b/themes/default/templates/partial/common.js.ep @@ -139,10 +139,25 @@ function clickOnCopyLink(e) { e.preventDefault(); copyToClipboard($(this)); } +function delImageConfirm(e) { + e.preventDefault(); + var short = $(this).attr('data-short'); + if (confirm(`<%= l('Are you sure you want to delete the image ${short}?') %>`)) { + var token = $(this).attr('data-token'); + var ext = $(this).attr('data-ext'); + delImageRequest(short, token); + rmFromShortHash(`${short}.${ext}`); + rmFromZipHash(short); + rmFromRandomHash(short); + } +} function delImage(e) { e.preventDefault(); var short = $(this).attr('data-short'); var token = $(this).attr('data-token'); + delImageRequest(short, token); +} +function delImageRequest(short, token) { $.ajax({ url: `<%= url_for('/') %>d/${short}/${token}`, method: 'GET', @@ -165,7 +180,7 @@ function delImage(e) { } }); } -function link(url, dl, token, modify, only_url) { +function link(url, dl, token, modify, only_url, ext) { if (token !== undefined) { if (modify !== undefined && modify === true) { return `<%== url_for('/m/')->to_abs() %>${url}/${token}`; @@ -182,6 +197,7 @@ function link(url, dl, token, modify, only_url) { title="<%= l('Deletion link') %>" id="del-${url}" data-short="${url}" + data-ext="${ext}" data-token="${token}"> diff --git a/themes/default/templates/partial/lutim.js.ep b/themes/default/templates/partial/lutim.js.ep index b614e4e..fa94ead 100644 --- a/themes/default/templates/partial/lutim.js.ep +++ b/themes/default/templates/partial/lutim.js.ep @@ -114,7 +114,7 @@ function buildMessage(success, msg) {
- ${link(msg.real_short, '', msg.token)} + ${link(msg.real_short, '', msg.token, false, false, msg.ext)}
@@ -214,13 +214,7 @@ function bindddz(firstview, deleteday) { rmFromZipHash(data.msg.short); rmFromRandomHash(data.msg.short); }); - $(`#del-${data.msg.real_short}`).on('click', function(e) { - e.preventDefault(); - rmFromShortHash(`${data.msg.short}.${data.msg.ext}`); - rmFromZipHash(data.msg.short); - rmFromRandomHash(data.msg.short); - }); - $(`#del-${data.msg.real_short}`).on('click', delImage); + $(`#del-${data.msg.real_short}`).on('click', delImageConfirm); if (data.success) { addToShortHash(`${data.msg.short}.${data.msg.ext}`); addToZipHash(data.msg.short); diff --git a/themes/default/templates/partial/myfiles.js.ep b/themes/default/templates/partial/myfiles.js.ep index 7df2425..0525ecf 100644 --- a/themes/default/templates/partial/myfiles.js.ep +++ b/themes/default/templates/partial/myfiles.js.ep @@ -212,6 +212,13 @@ function populateFilesTable() { `; $('#myfiles').append(tr); $(`#del-${real_short}`).on('click', delImage); + $(`#del-${real_short}`).on('click', function(e) { + e.preventDefault(); + rmFromShortHash(`${element.short}.${element.ext}`); + rmFromZipHash(element.short); + rmFromRandomHash(element.short); + }); + $(`#edit-${real_short}`).on('click', editImage); $.ajax({ diff --git a/themes/korrigan/templates/partial/korrigan.js.ep b/themes/korrigan/templates/partial/korrigan.js.ep index 450e6c0..a50dae6 100644 --- a/themes/korrigan/templates/partial/korrigan.js.ep +++ b/themes/korrigan/templates/partial/korrigan.js.ep @@ -73,7 +73,7 @@ function buildMessage(success, msg) {
- ${link(msg.real_short, '', msg.token)} + ${link(msg.real_short, '', msg.token, false, false, msg.ext)}
From 0617683c6314dbd366d18c3c222c95c633ec1e50 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sat, 30 Dec 2023 08:29:09 +0100 Subject: [PATCH 6/8] =?UTF-8?q?=E2=9C=A8=20=E2=80=94=20Mass=20delete=20but?= =?UTF-8?q?ton=20in=20"My=20images"=20page=20(#47)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 1 + themes/default/lib/Lutim/I18N/en.po | 30 +++++++++++-------- themes/default/lib/Lutim/I18N/lutim.pot | 30 +++++++++++-------- themes/default/public/js/lutim.js | 1 + themes/default/templates/myfiles.html.ep | 1 + themes/default/templates/partial/common.js.ep | 3 ++ .../default/templates/partial/myfiles.js.ep | 21 +++++++++++++ 7 files changed, 61 insertions(+), 26 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2b39fa7..8d05158 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ Revision history for Lutim - 🐛 — AVIF format support (#139) - ✨ — Allow to configure the directory where to store the images (#125) - ✨ — Ask for confirmation before deleting image on index page (#92) + - ✨ — Mass delete button in "My images" page (#47) 0.16.0 2023-12-29 - ⬆️ Update jQuery diff --git a/themes/default/lib/Lutim/I18N/en.po b/themes/default/lib/Lutim/I18N/en.po index 5ca2075..5bd871f 100644 --- a/themes/default/lib/Lutim/I18N/en.po +++ b/themes/default/lib/Lutim/I18N/en.po @@ -39,7 +39,7 @@ msgstr "1 year" msgid "24 hours" msgstr "24 hours" -#: themes/default/templates/partial/myfiles.js.ep:244 +#: themes/default/templates/partial/myfiles.js.ep:245 msgid ": Error while trying to get the counter." msgstr ": Error while trying to get the counter." @@ -63,7 +63,7 @@ msgstr "Archives download" msgid "Are you sure you want to delete the image ${short}?" msgstr "Are you sure you want to delete the image ${short}?" -#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25 +#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:130 themes/default/templates/stats.html.ep:25 msgid "Back to homepage" msgstr "Back to homepage" @@ -91,11 +91,11 @@ msgstr "Copied to clipboard" msgid "Copy all view links to clipboard" msgstr "Copy all view links to clipboard" -#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:206 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 +#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:209 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:183 msgid "Copy to clipboard" msgstr "Copy to clipboard" -#: themes/default/templates/myfiles.html.ep:117 +#: themes/default/templates/myfiles.html.ep:118 msgid "Counter" msgstr "Counter" @@ -107,10 +107,14 @@ msgstr "Delay repartition chart for disabled images" msgid "Delay repartition chart for enabled images" msgstr "Delay repartition chart for enabled images" -#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150 +#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:119 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150 msgid "Delete at first view?" msgstr "Delete at first view?" +#: themes/default/templates/myfiles.html.ep:109 +msgid "Delete selected images" +msgstr "" + #: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:4 msgid "Deleted images" msgstr "Deleted images" @@ -119,7 +123,7 @@ msgstr "Deleted images" msgid "Deleted images in 30 days" msgstr "Deleted images in 30 days" -#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:192 themes/default/templates/partial/common.js.ep:197 +#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/common.js.ep:195 themes/default/templates/partial/common.js.ep:200 msgid "Deletion link" msgstr "Deletion link" @@ -147,7 +151,7 @@ msgstr "Drag and drop an image in the appropriate area or use the traditional wa msgid "Encrypt the image (Lutim does not keep the key)." msgstr "Encrypt the image (Lutim does not keep the key)." -#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:128 +#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:129 msgid "Error while trying to modify the image." msgstr "Error while trying to modify the image." @@ -155,7 +159,7 @@ msgstr "Error while trying to modify the image." msgid "Evolution of total files" msgstr "Evolution of total files" -#: themes/default/templates/myfiles.html.ep:120 +#: themes/default/templates/myfiles.html.ep:121 msgid "Expires at" msgstr "Expires at" @@ -163,7 +167,7 @@ msgstr "Expires at" msgid "Export localStorage data" msgstr "Export localStorage data" -#: themes/default/templates/myfiles.html.ep:115 +#: themes/default/templates/myfiles.html.ep:116 msgid "File name" msgstr "File name" @@ -287,7 +291,7 @@ msgstr "Main developers" msgid "Markdown syntax" msgstr "Markdown syntax" -#: themes/default/templates/partial/myfiles.js.ep:199 +#: themes/default/templates/partial/myfiles.js.ep:200 msgid "Modify expiration delay" msgstr "Modify expiration delay" @@ -299,7 +303,7 @@ msgstr "My images" msgid "Next (arrow right)" msgstr "Next (arrow right)" -#: themes/default/templates/partial/myfiles.js.ep:120 themes/default/templates/partial/myfiles.js.ep:162 +#: themes/default/templates/partial/myfiles.js.ep:121 themes/default/templates/partial/myfiles.js.ep:163 msgid "No limit" msgstr "No limit" @@ -498,7 +502,7 @@ msgstr "Unlike many image sharing services, you don't give us rights on uploaded msgid "Upload an image with its URL" msgstr "Upload an image with its URL" -#: themes/default/templates/myfiles.html.ep:119 +#: themes/default/templates/myfiles.html.ep:120 msgid "Uploaded at" msgstr "Uploaded at" @@ -511,7 +515,7 @@ msgstr "Uploaded files by days" msgid "Uploading is currently disabled, please try later or contact the administrator (%1)." msgstr "Uploading is currently disabled, please try later or contact the administrator (%1)." -#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66 +#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:117 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66 msgid "View link" msgstr "View link" diff --git a/themes/default/lib/Lutim/I18N/lutim.pot b/themes/default/lib/Lutim/I18N/lutim.pot index 3404c26..efc03ee 100644 --- a/themes/default/lib/Lutim/I18N/lutim.pot +++ b/themes/default/lib/Lutim/I18N/lutim.pot @@ -40,7 +40,7 @@ msgstr "" msgid "24 hours" msgstr "" -#: themes/default/templates/partial/myfiles.js.ep:244 +#: themes/default/templates/partial/myfiles.js.ep:245 msgid ": Error while trying to get the counter." msgstr "" @@ -64,7 +64,7 @@ msgstr "" msgid "Are you sure you want to delete the image ${short}?" msgstr "" -#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:129 themes/default/templates/stats.html.ep:25 +#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:130 themes/default/templates/stats.html.ep:25 msgid "Back to homepage" msgstr "" @@ -92,11 +92,11 @@ msgstr "" msgid "Copy all view links to clipboard" msgstr "" -#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:206 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:182 +#: themes/default/templates/index.html.ep:104 themes/default/templates/index.html.ep:16 themes/default/templates/index.html.ep:32 themes/default/templates/index.html.ep:48 themes/default/templates/index.html.ep:80 themes/default/templates/index.html.ep:88 themes/default/templates/index.html.ep:96 themes/default/templates/myfiles.html.ep:66 themes/default/templates/myfiles.html.ep:82 themes/default/templates/myfiles.html.ep:98 themes/default/templates/partial/common.js.ep:209 themes/default/templates/partial/lutim.js.ep:110 themes/default/templates/partial/lutim.js.ep:70 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:96 themes/default/templates/partial/myfiles.js.ep:183 msgid "Copy to clipboard" msgstr "" -#: themes/default/templates/myfiles.html.ep:117 +#: themes/default/templates/myfiles.html.ep:118 msgid "Counter" msgstr "" @@ -108,10 +108,14 @@ msgstr "" msgid "Delay repartition chart for enabled images" msgstr "" -#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:118 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150 +#: themes/default/templates/index.html.ep:126 themes/default/templates/index.html.ep:158 themes/default/templates/index.html.ep:202 themes/default/templates/myfiles.html.ep:119 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:150 msgid "Delete at first view?" msgstr "" +#: themes/default/templates/myfiles.html.ep:109 +msgid "Delete selected images" +msgstr "" + #: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:4 msgid "Deleted images" msgstr "" @@ -120,7 +124,7 @@ msgstr "" msgid "Deleted images in 30 days" msgstr "" -#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:121 themes/default/templates/partial/common.js.ep:192 themes/default/templates/partial/common.js.ep:197 +#: themes/default/templates/index.html.ep:109 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/common.js.ep:195 themes/default/templates/partial/common.js.ep:200 msgid "Deletion link" msgstr "" @@ -148,7 +152,7 @@ msgstr "" msgid "Encrypt the image (Lutim does not keep the key)." msgstr "" -#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:128 +#: themes/default/templates/partial/lutim.js.ep:38 themes/default/templates/partial/myfiles.js.ep:129 msgid "Error while trying to modify the image." msgstr "" @@ -156,7 +160,7 @@ msgstr "" msgid "Evolution of total files" msgstr "" -#: themes/default/templates/myfiles.html.ep:120 +#: themes/default/templates/myfiles.html.ep:121 msgid "Expires at" msgstr "" @@ -164,7 +168,7 @@ msgstr "" msgid "Export localStorage data" msgstr "" -#: themes/default/templates/myfiles.html.ep:115 +#: themes/default/templates/myfiles.html.ep:116 msgid "File name" msgstr "" @@ -288,7 +292,7 @@ msgstr "" msgid "Markdown syntax" msgstr "" -#: themes/default/templates/partial/myfiles.js.ep:199 +#: themes/default/templates/partial/myfiles.js.ep:200 msgid "Modify expiration delay" msgstr "" @@ -300,7 +304,7 @@ msgstr "" msgid "Next (arrow right)" msgstr "" -#: themes/default/templates/partial/myfiles.js.ep:120 themes/default/templates/partial/myfiles.js.ep:162 +#: themes/default/templates/partial/myfiles.js.ep:121 themes/default/templates/partial/myfiles.js.ep:163 msgid "No limit" msgstr "" @@ -495,7 +499,7 @@ msgstr "" msgid "Upload an image with its URL" msgstr "" -#: themes/default/templates/myfiles.html.ep:119 +#: themes/default/templates/myfiles.html.ep:120 msgid "Uploaded at" msgstr "" @@ -508,7 +512,7 @@ msgstr "" msgid "Uploading is currently disabled, please try later or contact the administrator (%1)." msgstr "" -#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:116 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66 +#: themes/default/templates/index.html.ep:76 themes/default/templates/index.html.ep:78 themes/default/templates/myfiles.html.ep:117 themes/default/templates/partial/lutim.js.ep:62 themes/default/templates/partial/lutim.js.ep:66 msgid "View link" msgstr "" diff --git a/themes/default/public/js/lutim.js b/themes/default/public/js/lutim.js index 1fc9f8c..36d5afd 100644 --- a/themes/default/public/js/lutim.js +++ b/themes/default/public/js/lutim.js @@ -110,6 +110,7 @@ $('document').ready(function() { $('#import').on('change', function() { importStorage(this.files); }) $('#mod-delay').on('click', modifyDelay); $('#check-all').on('click', checkAll) + $('#mass-delete').on('click', massDelete); } $('.copy-to-clipboard-link').on('click', clickOnCopyLink); $('.copy-all-to-clipboard-link').on('click', copyAllToClipboard); diff --git a/themes/default/templates/myfiles.html.ep b/themes/default/templates/myfiles.html.ep index 32b3d2c..3744303 100644 --- a/themes/default/templates/myfiles.html.ep +++ b/themes/default/templates/myfiles.html.ep @@ -106,6 +106,7 @@ <%= l('Export localStorage data') %> <%= l('Import localStorage data') %> + <%= l('Delete selected images') %>
diff --git a/themes/default/templates/partial/common.js.ep b/themes/default/templates/partial/common.js.ep index 8c5263b..0caf920 100644 --- a/themes/default/templates/partial/common.js.ep +++ b/themes/default/templates/partial/common.js.ep @@ -177,6 +177,9 @@ function delImageRequest(short, token) { error: function() { }, complete: function() { + if (typeof evaluateMassDelete === "function") { + evaluateMassDelete(); + } } }); } diff --git a/themes/default/templates/partial/myfiles.js.ep b/themes/default/templates/partial/myfiles.js.ep index 0525ecf..9c96ee2 100644 --- a/themes/default/templates/partial/myfiles.js.ep +++ b/themes/default/templates/partial/myfiles.js.ep @@ -54,6 +54,7 @@ function itemExists(name) { } function onCheck(e) { e.preventDefault(); + evaluateMassDelete(); var short = $(this).data('short'); var ext = $(this).data('ext'); if ($(this).is(':checked')) { @@ -248,3 +249,23 @@ function populateFilesTable() { $('input.ckbx[type="checkbox"]').on('change', onCheck); $('.copy-to-clipboard').on('click', copyLink); } + +function evaluateMassDelete() { + if ($('input.ckbx:checked').length > 0) { + $('#mass-delete').removeAttr('disabled'); + $('#mass-delete').removeClass('disabled'); + } else { + $('#mass-delete').attr('disabled'); + $('#mass-delete').addClass('disabled'); + } +} + +function massDelete(event) { + event.preventDefault(); + $('input.ckbx:checked').each(delIm); +} + +function delIm() { + var short = $(this).attr('data-short'); + $(`#del-${short}`).click(); +} From e77943b1ccec1612ec02ae76c521cb4fad718303 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sat, 30 Dec 2023 09:04:32 +0100 Subject: [PATCH 7/8] =?UTF-8?q?=E2=99=BF=20=E2=80=94=20Improve=20accessibi?= =?UTF-8?q?lity=20on=20index=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG | 1 + themes/default/public/css/common.min.css | 2 +- themes/default/public/css/lutim.css | 18 ++++++++++++++++++ themes/default/public/css/not_stats.min.css | 2 +- themes/default/public/css/uploader.css | 6 +++--- .../default/templates/layouts/default.html.ep | 4 +++- .../default/templates/partial/navbar.html.ep | 8 +++++--- 7 files changed, 32 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8d05158..71b54ff 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,7 @@ Revision history for Lutim - ✨ — Allow to configure the directory where to store the images (#125) - ✨ — Ask for confirmation before deleting image on index page (#92) - ✨ — Mass delete button in "My images" page (#47) + - ♿ — Improve accessibility on index page 0.16.0 2023-12-29 - ⬆️ Update jQuery diff --git a/themes/default/public/css/common.min.css b/themes/default/public/css/common.min.css index 459da7e..a0992e3 100644 --- a/themes/default/public/css/common.min.css +++ b/themes/default/public/css/common.min.css @@ -15,7 +15,7 @@ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}legend,td,th{padding:0} /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@media print{*,:after,:before{background:0 0!important;color:#000!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" ("attr(href)")"}abbr[title]:after{content:" ("attr(title)")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}blockquote,img,pre,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}*,:after,:before,input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:focus,a:hover{color:#2a6496;text-decoration:underline}a:focus,input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#999}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left,th{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:focus,a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:focus,a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0;margin-bottom:10px}.alert>p,.alert>ul,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"— "}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:" —"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#999;text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th{padding:8px;line-height:1.42857143;border-top:1px solid #ddd}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file],legend{display:block}input[type=range]{display:block;width:100%}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control,select[multiple],select[multiple].input-sm,select[size],textarea.form-control,textarea.input-sm{height:auto}.form-control,output{display:block;font-size:14px;line-height:1.42857143;color:#555}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled]{background-color:#eee;opacity:1}.form-control[readonly]{opacity:1}fieldset[disabled] .form-control{background-color:#eee;opacity:1;cursor:not-allowed}.form-control[disabled]{cursor:not-allowed}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.checkbox-inline,.radio label,.radio-inline{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox label,.radio label{min-height:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px \9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control,select.input-sm{height:30px;line-height:30px}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.form-group-lg .form-control,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg select.form-control,select.input-lg{height:46px;line-height:46px}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#3071a9;border-color:#193c5a}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#285e8e;border-color:#193c5a}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group-sm>.btn,.btn-group-xs>.btn,.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%}.alert>p+p,.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn{float:left}.btn-group-vertical>.btn,.btn-group>.btn{position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;width:100%;max-width:100%;float:none}.nav-tabs.nav-justified>li{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified,.input-group{display:table;border-collapse:separate}.btn-group-justified{width:100%;table-layout:fixed}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{white-space:nowrap}.input-group-addon,.input-group-btn{width:1%;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.nav-justified>li,.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.navbar-brand>img,.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand,.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .btn-link,.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .btn-link,.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0-1px 0 rgba(0,0,0,.15);box-shadow:inset 0-1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-bar-warning{background-color:#f0ad4e}.progress-bar-danger{background-color:#d9534f}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0#fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs,.visible-xs-block{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm,.visible-sm-block{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md,.visible-md-block{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg,.visible-lg-block{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@font-face{font-family:"fontello";src:url(../font/fontello.eot?74275093);src:url(../font/fontello.eot?74275093#iefix)format("embedded-opentype"),url(../font/fontello.woff2?74275093)format("woff2"),url(../font/fontello.woff?74275093)format("woff"),url(../font/fontello.ttf?74275093)format("truetype"),url(../font/fontello.svg?74275093#fontello)format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:"fontello";font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-ok:before{content:""}.icon-eye:before{content:""}.icon-download:before{content:""}.icon-share:before{content:""}.icon-trash:before{content:""}.icon-bitcoin:before{content:""}.icon-git:before{content:""}.icon-twitter:before{content:""}.icon-clipboard:before{content:""}.icon-spinner:before{content:""}.icon-shuffle:before{content:""}.icon-cancel:before{content:""}.icon-picture:before{content:""}.icon-file-archive:before{content:""}.icon-language:before{content:""}.icon-edit:before{content:""}@font-face{font-family:"Henny_Penny";font-style:normal;font-weight:400;src:local("Henny Penny"),local("HennyPenny-Regular"),url(../font/hennypenny.woff2)format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@media (max-width:767px){body{padding-top:5px;padding-bottom:5px}}@media (min-width:768px){body{padding-bottom:40px}}.container{padding:15px;margin:0 auto}nav .container{padding:0}#install-app,.jsonly,label.always-encrypt{display:none}.thumbnail{margin-right:8px}.hennypenny{font-family:"Henny_Penny",cursive;font-size:42px}.logo{margin-right:10px}.link_nocol,.link_nocol:hover{color:#000;text-decoration:none}#install-app img{height:22px}.form-control[readonly]{background-color:#fff}.alert .form-group,.gallery figure{margin-bottom:5px}#copy-all{margin-bottom:8px}#gallery-url{margin-bottom:10px}.adjust-addon{width:42px}.adjust-addon .btn{width:43px}#tipeee-img{margin-top:-4px}#liberapay-img{height:21px;line-height:21px;margin-top:-5.33333px}.pasteZone{position:absolute;top:0;left:-100px;z-index:-999;height:10000vh;width:0;display:hidden}.gallery figure{margin-right:auto;margin-left:auto}@media (min-width:1200px){.gallery{column-count:4}}@media (min-width:991px) and (max-width:1199px){.gallery{column-count:3}}@media (min-width:676px) and (max-width:990px){.gallery{column-count:2}}@media (max-width:675px){.gallery{column-count:1}}.border-zero{border:0}.copy-node{width:1px;height:1px;position:"fixed";top:5px}.width-zero{width:0%}.pdg-left-10{padding-left:10px}.spin{font-size:200%;display:none}#myfiles td.ellips{max-width:300px}#myfiles td.ellips,h1.ellips{white-space:nowrap;overflow:hidden;text-overflow:ellipsis} +@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}@media print{*,:after,:before{background:0 0!important;color:#000!important;-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" ("attr(href)")"}abbr[title]:after{content:" ("attr(title)")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}blockquote,img,pre,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}*,:after,:before,input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:focus,a:hover{color:#2a6496;text-decoration:underline}a:focus,input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#999}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left,th{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:focus,a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:focus,a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0;margin-bottom:10px}.alert>p,.alert>ul,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#999}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"— "}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:" —"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#999;text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th{padding:8px;line-height:1.42857143;border-top:1px solid #ddd}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file],legend{display:block}input[type=range]{display:block;width:100%}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control,select[multiple],select[multiple].input-sm,select[size],textarea.form-control,textarea.input-sm{height:auto}.form-control,output{display:block;font-size:14px;line-height:1.42857143;color:#555}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled]{background-color:#eee;opacity:1}.form-control[readonly]{opacity:1}fieldset[disabled] .form-control{background-color:#eee;opacity:1;cursor:not-allowed}.form-control[disabled]{cursor:not-allowed}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.checkbox-inline,.radio label,.radio-inline{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox label,.radio label{min-height:20px}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px \9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control,select.input-sm{height:30px;line-height:30px}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.form-group-lg .form-control,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg select.form-control,select.input-lg{height:46px;line-height:46px}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;border-color:#357ebd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#3071a9;border-color:#193c5a}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#285e8e;border-color:#193c5a}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#999;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group-sm>.btn,.btn-group-xs>.btn,.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%}.alert>p+p,.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#999}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn{float:left}.btn-group-vertical>.btn,.btn-group>.btn{position:relative}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;width:100%;max-width:100%;float:none}.nav-tabs.nav-justified>li{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified,.input-group{display:table;border-collapse:separate}.btn-group-justified{width:100%;table-layout:fixed}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon{white-space:nowrap}.input-group-addon,.input-group-btn{width:1%;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#428bca}.nav-justified>li,.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.navbar-brand>img,.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .btn-link,.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .btn-link,.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0-1px 0 rgba(0,0,0,.15);box-shadow:inset 0-1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-bar-warning{background-color:#f0ad4e}.progress-bar-danger{background-color:#d9534f}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0#fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs,.visible-xs-block{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm,.visible-sm-block{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md,.visible-md-block{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg,.visible-lg-block{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}@font-face{font-family:"fontello";src:url(../font/fontello.eot?74275093);src:url(../font/fontello.eot?74275093#iefix)format("embedded-opentype"),url(../font/fontello.woff2?74275093)format("woff2"),url(../font/fontello.woff?74275093)format("woff"),url(../font/fontello.ttf?74275093)format("truetype"),url(../font/fontello.svg?74275093#fontello)format("svg");font-weight:400;font-style:normal}[class*=" icon-"]:before,[class^=icon-]:before{font-family:"fontello";font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-ok:before{content:""}.icon-eye:before{content:""}.icon-download:before{content:""}.icon-share:before{content:""}.icon-trash:before{content:""}.icon-bitcoin:before{content:""}.icon-git:before{content:""}.icon-twitter:before{content:""}.icon-clipboard:before{content:""}.icon-spinner:before{content:""}.icon-shuffle:before{content:""}.icon-cancel:before{content:""}.icon-picture:before{content:""}.icon-file-archive:before{content:""}.icon-language:before{content:""}.icon-edit:before{content:""}@font-face{font-family:"Henny_Penny";font-style:normal;font-weight:400;src:local("Henny Penny"),local("HennyPenny-Regular"),url(../font/hennypenny.woff2)format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@media (max-width:767px){body{padding-top:5px;padding-bottom:5px}}@media (min-width:768px){body{padding-bottom:40px}}.container{padding:15px;margin:0 auto}nav .container{padding:0}#install-app,.jsonly,label.always-encrypt{display:none}.thumbnail{margin-right:8px}.hennypenny{font-family:"Henny_Penny",cursive;font-size:42px}.logo{margin-right:10px}.link_nocol,.link_nocol:hover{color:#000;text-decoration:none}#install-app img{height:22px}.form-control[readonly]{background-color:#fff}.alert .form-group,.gallery figure{margin-bottom:5px}#copy-all{margin-bottom:8px}#gallery-url{margin-bottom:10px}.adjust-addon{width:42px}.adjust-addon .btn{width:43px}#tipeee-img{margin-top:-4px}#liberapay-img{height:21px;line-height:21px;margin-top:-5.33333px}.pasteZone{position:absolute;top:0;left:-100px;z-index:-999;height:10000vh;width:0;display:hidden}.gallery figure{margin-right:auto;margin-left:auto}@media (min-width:1200px){.gallery{column-count:4}}@media (min-width:991px) and (max-width:1199px){.gallery{column-count:3}}@media (min-width:676px) and (max-width:990px){.gallery{column-count:2}}@media (max-width:675px){.gallery{column-count:1}}.border-zero{border:0}.copy-node{width:1px;height:1px;position:"fixed";top:5px}.width-zero{width:0%}.pdg-left-10{padding-left:10px}.spin{font-size:200%;display:none}#myfiles td.ellips{max-width:300px}#myfiles td.ellips,h1.ellips{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navbar-default .navbar-brand,.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#555}.navbar-default .navbar-nav>li>a:focus .navbar-default .navbar-nav>li>a:hover{color:#111}.btn-primary{background-color:#3c74c8} /*! * Toastify js 1.4.0 * https://github.com/apvarun/toastify-js diff --git a/themes/default/public/css/lutim.css b/themes/default/public/css/lutim.css index 1471cf4..e48dca6 100644 --- a/themes/default/public/css/lutim.css +++ b/themes/default/public/css/lutim.css @@ -134,3 +134,21 @@ h1.ellips { overflow: hidden; text-overflow: ellipsis; } + +/* + * a11y + */ +.navbar-default .navbar-brand, +.navbar-default .navbar-nav > li > a, +.navbar-default .navbar-text { + color: #555; +} + +.navbar-default .navbar-nav > li > a:focus +.navbar-default .navbar-nav > li > a:hover { + color: #111; +} + +.btn-primary { + background-color: #3c74c8; +} diff --git a/themes/default/public/css/not_stats.min.css b/themes/default/public/css/not_stats.min.css index f9cab41..3ee72c3 100644 --- a/themes/default/public/css/not_stats.min.css +++ b/themes/default/public/css/not_stats.min.css @@ -1 +1 @@ -@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}.uploader{border:2px dotted #a5a5c7;width:100%;color:#92aab0;text-align:center;vertical-align:middle;padding:30px 0;margin-bottom:10px;font-size:200%;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.uploader div.or{font-size:50%;font-weight:700;color:silver;padding:10px}@media (max-width:768px){.uploader div.browser label{max-width:95%}}@media (min-width:768px){.uploader div.browser label{width:300px}}.uploader div.browser label{background-color:#5a7bc2;color:#fff;padding:6px 0;font-size:40%;font-weight:700;cursor:pointer;border-radius:2px;position:relative;overflow:hidden;display:block;margin:20px auto 0;box-shadow:2px 2px 2px #888}.uploader div.browser span{cursor:pointer}.uploader div.browser input{position:absolute;top:0;right:0;margin:0;border:solid transparent;border-width:0 0 100px 200px;opacity:0;filter:alpha(opacity= 0);-o-transform:translate(250px,-50px) scale(1);-moz-transform:translate(-300px,0) scale(4);direction:ltr;cursor:pointer}.uploader div.browser label:hover{background-color:#427fed}@font-face{font-family:"markdown";src:url(../../font/markdown.eot?-6fnbp5);src:url(../../font/markdown.eot?#iefix-6fnbp5)format("embedded-opentype"),url(../../font/markdown.woff?-6fnbp5)format("woff"),url(../../font/markdown.ttf?-6fnbp5)format("truetype"),url(../../font/markdown.svg?-6fnbp5#markdown)format("svg");font-weight:400;font-style:normal}[class*=" markdown-"],[class^=markdown-]{font-family:"markdown";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.markdown-mark:before{content:""}.markdown-mark-solid:before{content:""} +@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}.uploader{border:2px dotted #a5a5c7;width:100%;color:#777;text-align:center;vertical-align:middle;padding:30px 0;margin-bottom:10px;font-size:200%;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.uploader div.or{font-size:50%;font-weight:700;color:#677;padding:10px}@media (max-width:768px){.uploader div.browser label{max-width:95%}}@media (min-width:768px){.uploader div.browser label{width:300px}}.uploader div.browser label{background-color:#416bc4;color:#fff;padding:6px 0;font-size:40%;font-weight:700;cursor:pointer;border-radius:2px;position:relative;overflow:hidden;display:block;margin:20px auto 0;box-shadow:2px 2px 2px #888}.uploader div.browser span{cursor:pointer}.uploader div.browser input{position:absolute;top:0;right:0;margin:0;border:solid transparent;border-width:0 0 100px 200px;opacity:0;filter:alpha(opacity= 0);-o-transform:translate(250px,-50px) scale(1);-moz-transform:translate(-300px,0) scale(4);direction:ltr;cursor:pointer}.uploader div.browser label:hover{background-color:#427fed}@font-face{font-family:"markdown";src:url(../../font/markdown.eot?-6fnbp5);src:url(../../font/markdown.eot?#iefix-6fnbp5)format("embedded-opentype"),url(../../font/markdown.woff?-6fnbp5)format("woff"),url(../../font/markdown.ttf?-6fnbp5)format("truetype"),url(../../font/markdown.svg?-6fnbp5#markdown)format("svg");font-weight:400;font-style:normal}[class*=" markdown-"],[class^=markdown-]{font-family:"markdown";speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.markdown-mark:before{content:""}.markdown-mark-solid:before{content:""} diff --git a/themes/default/public/css/uploader.css b/themes/default/public/css/uploader.css index ee535e0..30e0175 100644 --- a/themes/default/public/css/uploader.css +++ b/themes/default/public/css/uploader.css @@ -2,7 +2,7 @@ { border: 2px dotted #A5A5C7; width: 100%; - color: #92AAB0; + color: #777; text-align: center; vertical-align: middle; padding: 30px 0px; @@ -22,7 +22,7 @@ .uploader div.or { font-size: 50%; font-weight: bold; - color: #C0C0C0; + color: #677; padding: 10px; } @@ -39,7 +39,7 @@ } .uploader div.browser label { - background-color: #5a7bc2; + background-color: #416bc4; padding: 5px 15px; color: white; padding: 6px 0px; diff --git a/themes/default/templates/layouts/default.html.ep b/themes/default/templates/layouts/default.html.ep index 60676fe..99abc3d 100644 --- a/themes/default/templates/layouts/default.html.ep +++ b/themes/default/templates/layouts/default.html.ep @@ -1,8 +1,10 @@ % # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab: % use Mojo::Util qw(url_escape); % my $url = url_for('/')->to_abs(); +% my $lang = $self->languages; +% $lang =~ s/-(.*)/_\U$1/; - + Lutim diff --git a/themes/default/templates/partial/navbar.html.ep b/themes/default/templates/partial/navbar.html.ep index 2c88b5d..513f8d9 100644 --- a/themes/default/templates/partial/navbar.html.ep +++ b/themes/default/templates/partial/navbar.html.ep @@ -39,12 +39,14 @@ % } % }