From 3274d9aef5ef00126d8006b9161c10538c5b130f Mon Sep 17 00:00:00 2001 From: Christoph Hauert Date: Tue, 16 Feb 2021 02:46:45 -0800 Subject: [PATCH] extend modal dialog for uploading from server (#894) * extend modal dialog for uploading from server * log warning if deletion of original failed * localizations limited to English * improved media import * ImportPhoto::photo: new mandatory argument `import_via_symlink` before optional ones * sanity check for incompatible settings * Exec: eliminate `skip_duplicates` (existing `force_skip_duplicates` is enough and takes precedence) * `resync_metadata` did not update keys with value null (but should have). in particular, this prevented updates to `takedate` if the corresponding entry in the DB was set to zero * too many false positives were caused by comparing int's to their corresponding string representation. * cancel import from server * use session storage to process asynchronous cancel request from GUI during import from server Co-authored-by: kamil4 Co-authored-by: ildyria --- app/Actions/Import/Exec.php | 66 +++-- app/Actions/Import/Extensions/ImportPhoto.php | 26 +- app/Actions/Import/FromServer.php | 17 ++ app/Actions/Import/FromUrl.php | 2 +- app/Actions/Photo/Create.php | 13 +- .../Photo/Strategies/StrategyDuplicate.php | 23 +- .../Photo/Strategies/StrategyPhoto.php | 12 +- app/Console/Commands/Sync.php | 4 +- app/Exceptions/PhotoResyncedException.php | 16 ++ app/Exceptions/PhotoSkippedException.php | 16 ++ app/Http/Controllers/ImportController.php | 14 +- app/Http/Controllers/PhotoController.php | 13 +- .../ImportRequests/ImportServerRequest.php | 3 + app/Locale/ChineseSimplified.php | 11 + app/Locale/ChineseTraditional.php | 11 + app/Locale/Czech.php | 11 + app/Locale/Dutch.php | 11 + app/Locale/English.php | 13 +- app/Locale/French.php | 11 + app/Locale/German.php | 11 + app/Locale/Greek.php | 11 + app/Locale/Italian.php | 11 + app/Locale/NorwegianBokmal.php | 11 + app/Locale/Russian.php | 11 + app/Locale/Slovak.php | 11 + app/Locale/Spanish.php | 11 + app/Locale/Swedish.php | 11 + public/Lychee-front | 2 +- public/dist/main.css | 2 +- public/dist/main.js | 225 ++++++++++++++---- public/dist/view.js | 3 + routes/web.php | 1 + 32 files changed, 508 insertions(+), 106 deletions(-) create mode 100644 app/Exceptions/PhotoResyncedException.php create mode 100644 app/Exceptions/PhotoSkippedException.php diff --git a/app/Actions/Import/Exec.php b/app/Actions/Import/Exec.php index f5a544d80e..b735417f4a 100644 --- a/app/Actions/Import/Exec.php +++ b/app/Actions/Import/Exec.php @@ -6,9 +6,13 @@ use App\Actions\Import\Extensions\ImportPhoto; use App\Actions\Photo\Extensions\Constants; use App\Assets\Helpers; +use App\Exceptions\PhotoResyncedException; +use App\Exceptions\PhotoSkippedException; use App\Models\Album; use App\Models\Configs; use App\Models\Logs; +use Exception; +use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Storage; class Exec @@ -16,9 +20,10 @@ class Exec use ImportPhoto; use Constants; - public $force_skip_duplicates = false; + public $skip_duplicates = false; public $resync_metadata = false; public $delete_imported; + public $import_via_symlink; public $memCheck = true; public $statusCLIFormatting = false; @@ -57,10 +62,25 @@ private function status_update(string $status) } flush(); } else { - echo $status . PHP_EOL; + echo substr($status, strpos($status, ' ') + 1) . PHP_EOL; } } + private function status_progress(string $path, string $msg) + { + $this->status_update('Status: ' . $path . ': ' . $msg); + } + + private function status_warning(string $msg) + { + $this->status_update('Warning: ' . $msg); + } + + private function status_error(string $path, string $msg) + { + $this->status_update('Problem: ' . $path . ': ' . $msg); + } + private function parsePath(string &$path, string $origPath) { if (!isset($path)) { @@ -72,7 +92,7 @@ private function parsePath(string &$path, string $origPath) $path = substr($path, 0, -1); } if (is_dir($path) === false) { - $this->status_update('Problem: ' . $origPath . ': Given path is not a directory'); + $this->status_error($origPath, 'Given path is not a directory'); Logs::error(__METHOD__, __LINE__, 'Given path is not a directory (' . $origPath . ')'); return false; @@ -85,7 +105,7 @@ private function parsePath(string &$path, string $origPath) realpath($path) === Storage::path('small') || realpath($path) === Storage::path('thumb') ) { - $this->status_update('Problem: ' . $origPath . ': Given path is reserved'); + $this->status_error($origPath, 'Given path is reserved'); Logs::error(__METHOD__, __LINE__, 'The given path is a reserved path of Lychee (' . $origPath . ')'); return false; @@ -131,7 +151,7 @@ private function memWarningCheck() { if ($this->memCheck && !$this->memWarningGiven && memory_get_usage() > $this->memLimit) { // @codeCoverageIgnoreStart - $this->status_update('Warning: Approaching memory limit'); + $this->status_warning('Approaching memory limit'); $this->memWarningGiven = true; // @codeCoverageIgnoreEnd } @@ -171,8 +191,17 @@ public function do( // Add '%' at end for CLI output $percent_symbol = ($this->statusCLIFormatting) ? '%' : ''; - $this->status_update('Status: ' . $origPath . ': 0' . $percent_symbol); + $this->status_progress($origPath, '0' . $percent_symbol); foreach ($files as $file) { + // re-read session in case cancelling import was requested + session()->start(); + if (Session::has('cancel')) { + Session::forget('cancel'); + $this->status_error($origPath, 'Import cancelled'); + Logs::warning(__METHOD__, __LINE__, 'Import cancelled'); + + return; + } // Reset the execution timeout for every iteration. set_time_limit(ini_get('max_execution_time')); @@ -183,7 +212,7 @@ public function do( // 100%, which are always generated. $time = microtime(true); if ($time - $lastStatus >= 1) { - $this->status_update('Status: ' . $origPath . ': ' . intval($filesCount / $filesTotal * 100) . $percent_symbol); + $this->status_progress($origPath, intval($filesCount / $filesTotal * 100) . $percent_symbol); $lastStatus = $time; } @@ -203,7 +232,7 @@ public function do( // It is possible to move a file because of directory permissions but // the file may still be unreadable by the user if (!is_readable($file)) { - $this->status_update('Problem: ' . $file . ': Could not read file'); + $this->status_error($file, 'Could not read file'); Logs::error(__METHOD__, __LINE__, 'Could not read file or directory (' . $file . ')'); continue; } @@ -211,22 +240,31 @@ public function do( $is_raw = in_array(strtolower($extension), $this->raw_formats, true); if (@exif_imagetype($file) !== false || in_array(strtolower($extension), $this->validExtensions, true) || $is_raw) { // Photo or Video - if ($this->photo($file, $this->delete_imported, $albumID, $this->force_skip_duplicates, $this->resync_metadata) === false) { - $this->status_update('Problem: ' . $file . ': Could not import file'); + try { + if ($this->photo($file, $this->delete_imported, $this->import_via_symlink, $albumID, $this->skip_duplicates, $this->resync_metadata) === false) { + $this->status_error($file, 'Could not import file'); + Logs::error(__METHOD__, __LINE__, 'Could not import file (' . $file . ')'); + } + } catch (PhotoSkippedException $e) { + $this->status_error($file, 'Skipped duplicate'); + } catch (PhotoResyncedException $e) { + $this->status_error($file, 'Skipped duplicate (resynced metadata)'); + } catch (Exception $e) { + $this->status_error($file, 'Could not import file'); Logs::error(__METHOD__, __LINE__, 'Could not import file (' . $file . ')'); } } else { - $this->status_update('Problem: ' . $file . ': Unsupported file type'); + $this->status_error($file, 'Unsupported file type'); Logs::error(__METHOD__, __LINE__, 'Unsupported file type (' . $file . ')'); } } - $this->status_update('Status: ' . $origPath . ': 100' . $percent_symbol); + $this->status_progress($origPath, '100' . $percent_symbol); // Album creation foreach ($dirs as $dir) { // Folder $album = null; - if ($this->force_skip_duplicates || Configs::get_value('skip_duplicates', '0') === '1') { + if ($this->skip_duplicates) { $album = Album::where('parent_id', '=', $albumID == 0 ? null : $albumID) ->where('title', '=', basename($dir)) ->get() @@ -239,7 +277,7 @@ public function do( if ($album === false) { // @codeCoverageIgnoreStart - $this->status_update('Problem: ' . basename($dir) . ': Could not create album'); + $this->status_error(basename($dir), ': Could not create album'); Logs::error(__METHOD__, __LINE__, 'Could not create album in Lychee (' . basename($dir) . ')'); continue; } diff --git a/app/Actions/Import/Extensions/ImportPhoto.php b/app/Actions/Import/Extensions/ImportPhoto.php index 822ba0da58..26ce9f282c 100644 --- a/app/Actions/Import/Extensions/ImportPhoto.php +++ b/app/Actions/Import/Extensions/ImportPhoto.php @@ -3,7 +3,6 @@ namespace App\Actions\Import\Extensions; use App\Actions\Photo\Create; -use Exception; trait ImportPhoto { @@ -12,12 +11,14 @@ trait ImportPhoto * * @param $path * @param bool $delete_imported + * @param bool $import_via_symlink * @param int $albumID - * @param bool $force_skip_duplicates + * @param bool $skip_duplicates + * @param bool $resync_metadata * * @return bool returns true when photo import was successful */ - public function photo($path, $delete_imported, $albumID = 0, $force_skip_duplicates = false, $resync_metadata = false) + public function photo($path, $delete_imported, $import_via_symlink, $albumID = 0, $skip_duplicates = false, $resync_metadata = false) { // No need to validate photo type and extension in this function. // $photo->add will take care of it. @@ -30,17 +31,20 @@ public function photo($path, $delete_imported, $albumID = 0, $force_skip_duplica $create = resolve(Create::class); - try { - if ($create->add($nameFile, $albumID, $delete_imported, $force_skip_duplicates, $resync_metadata) === false) { - // @codeCoverageIgnoreStart - return false; - // @codeCoverageIgnoreEnd - } + // avoid incompatible settings (delete originals takes precedence over symbolic links) + if ($delete_imported) { + $import_via_symlink = false; + } + // (re-syncing metadata makes no sense when importing duplicates) + if (!$skip_duplicates) { + $resync_metadata = false; + } + + if ($create->add($nameFile, $albumID, $delete_imported, $skip_duplicates, $import_via_symlink, $resync_metadata) === false) { // @codeCoverageIgnoreStart - } catch (Exception $e) { return false; + // @codeCoverageIgnoreEnd } - // @codeCoverageIgnoreEnd return true; } diff --git a/app/Actions/Import/FromServer.php b/app/Actions/Import/FromServer.php index 97eb06eddf..b511e3bbf3 100644 --- a/app/Actions/Import/FromServer.php +++ b/app/Actions/Import/FromServer.php @@ -22,6 +22,23 @@ public function do($validated) } else { $this->exec->delete_imported = (Configs::get_value('delete_imported', '0') === '1'); } + if (isset($validated['import_via_symlink'])) { + $this->exec->import_via_symlink = ($validated['import_via_symlink'] === '1'); + } else { + $this->exec->import_via_symlink = (Configs::get_value('import_via_symlink', '0') === '1'); + } + if (isset($validated['skip_duplicates'])) { + $this->exec->skip_duplicates = ($validated['skip_duplicates'] === '1'); + } else { + $this->exec->skip_duplicates = (Configs::get_value('skip_duplicates', '0') === '1'); + } + if (isset($validated['resync_metadata'])) { + $this->exec->resync_metadata = ($validated['resync_metadata'] === '1'); + } else { + // do we need a default? + // $this->exec->resync_metadata = (Configs::get_value('resync_metadata', '0') === '1'); + $this->exec->resync_metadata = false; + } // memory_limit can have a K/M/etc suffix which makes querying it // more complicated... diff --git a/app/Actions/Import/FromUrl.php b/app/Actions/Import/FromUrl.php index a89f1360e4..09d9331280 100644 --- a/app/Actions/Import/FromUrl.php +++ b/app/Actions/Import/FromUrl.php @@ -55,7 +55,7 @@ public function do(array $urls, $albumId): bool } // Import photo - if (!$this->photo($tmp_name, true, $albumId)) { + if (!$this->photo($tmp_name, true, false, $albumId)) { $error = true; Logs::error(__METHOD__, __LINE__, 'Could not import file (' . $tmp_name . ')'); } diff --git a/app/Actions/Photo/Create.php b/app/Actions/Photo/Create.php index 2d848c90bc..79409a7078 100644 --- a/app/Actions/Photo/Create.php +++ b/app/Actions/Photo/Create.php @@ -13,7 +13,7 @@ use App\Actions\Photo\Strategies\StrategyPhoto; use App\Assets\Helpers; use App\Http\Livewire\Album; -use App\Models\Configs; +use App\Models\Logs; use App\Models\Photo; use Illuminate\Support\Facades\Storage; @@ -59,7 +59,8 @@ public function add( array $file, $albumID_in = 0, bool $delete_imported = false, - bool $force_skip_duplicates = false, + bool $skip_duplicates = false, + bool $import_via_symlink = false, bool $resync_metadata = false ) { // Check permissions @@ -101,9 +102,9 @@ public function add( */ if (!$duplicate) { - $strategy = new StrategyPhoto(); + $strategy = new StrategyPhoto($import_via_symlink); } else { - $strategy = new StrategyDuplicate($force_skip_duplicates, $resync_metadata, $delete_imported); + $strategy = new StrategyDuplicate($skip_duplicates, $resync_metadata, $delete_imported); } $strategy->storeFile($this); @@ -129,8 +130,8 @@ public function add( $res = $this->save($this->photo); } - if ($delete_imported && !$this->is_uploaded && ($exists || Configs::get_value('import_via_symlink', '0') !== '1')) { - @unlink($this->tmp_name); + if ($delete_imported && !$this->is_uploaded && ($exists || !$import_via_symlink) && !@unlink($this->tmp_name)) { + Logs::warning(__METHOD__, __LINE__, 'Failed to delete file (' . $this->tmp_name . ')'); } return $res; diff --git a/app/Actions/Photo/Strategies/StrategyDuplicate.php b/app/Actions/Photo/Strategies/StrategyDuplicate.php index 41dcd44413..0f99ccd854 100644 --- a/app/Actions/Photo/Strategies/StrategyDuplicate.php +++ b/app/Actions/Photo/Strategies/StrategyDuplicate.php @@ -4,24 +4,24 @@ use App\Actions\Photo\Create; use App\Actions\Photo\Extensions\Metadata; -use App\Exceptions\JsonWarning; -use App\Models\Configs; +use App\Exceptions\PhotoResyncedException; +use App\Exceptions\PhotoSkippedException; use App\Models\Logs; use App\Models\Photo; use Storage; class StrategyDuplicate extends StrategyPhotoBase { - public $force_skip_duplicates; + public $skip_duplicates; public $resync_metadata; public $delete_imported; public function __construct( - bool $force_skip_duplicate, + bool $skip_duplicates, bool $resync_metadata, bool $delete_imported ) { - $this->force_skip_duplicate = $force_skip_duplicate; + $this->skip_duplicates = $skip_duplicates; $this->resync_metadata = $resync_metadata; $this->delete_imported = $delete_imported; } @@ -49,14 +49,17 @@ public function hydrate(Create &$create, ?Photo &$existing = null, ?array $file // Photo already exists // Check if the user wants to skip duplicates - if ($this->force_skip_duplicates || Configs::get_value('skip_duplicates', '0') === '1') { + if ($this->skip_duplicates) { $metadataChanged = false; // Before we skip entirely, check if there is a sidecar file and if the metadata needs to be updated (from a sidecar) if ($this->resync_metadata === true) { $info = $this->getMetadata($file, $create->path, $create->kind, $create->extension); + $attr = $existing->attributesToArray(); foreach ($info as $key => $value) { - if ($existing->$key !== null && $value !== $existing->$key) { + if (array_key_exists($key, $attr) // check if key exists, even if null + && (($existing->$key !== null && $value !== $existing->$key) || ($existing->$key === null && $value !== null && $value !== '')) + && $value != $existing->$key) { // avoid false positives when comparing variables of different types (e.g string vs int) $metadataChanged = true; $existing->$key = $value; } @@ -67,11 +70,11 @@ public function hydrate(Create &$create, ?Photo &$existing = null, ?array $file Logs::notice(__METHOD__, __LINE__, 'Updating metdata of existing photo.'); $existing->save(); - $res = new JsonWarning('This photo has been skipped because it\'s already in your library, but its metadata has been updated.'); + $res = new PhotoResyncedException('This photo has been skipped because it\'s already in your library, but its metadata has been updated.'); } else { Logs::notice(__METHOD__, __LINE__, 'Skipped upload of existing photo because skipDuplicates is activated'); - $res = new JsonWarning('This photo has been skipped because it\'s already in your library.'); + $res = new PhotoSkippedException('This photo has been skipped because it\'s already in your library.'); } if ($this->delete_imported && !$create->is_uploaded) { @@ -85,6 +88,6 @@ public function hydrate(Create &$create, ?Photo &$existing = null, ?array $file public function generate_thumbs(Create &$create, bool &$skip_db_entry_creation, bool &$no_error) { - Logs::notice(__FILE__, __LINE__, 'Nothing to store, image is a duplicate'); + Logs::notice(__FILE__, __LINE__, 'Nothing to generate, image is a duplicate'); } } diff --git a/app/Actions/Photo/Strategies/StrategyPhoto.php b/app/Actions/Photo/Strategies/StrategyPhoto.php index f7e6c92d8f..044d65ce23 100644 --- a/app/Actions/Photo/Strategies/StrategyPhoto.php +++ b/app/Actions/Photo/Strategies/StrategyPhoto.php @@ -8,7 +8,6 @@ use App\Exceptions\JsonError; use App\Image\ImageHandlerInterface; use App\Metadata\Extractor; -use App\Models\Configs; use App\Models\Logs; use App\Models\Photo; use Exception; @@ -16,10 +15,13 @@ class StrategyPhoto extends StrategyPhotoBase { public $imageHandler; + public $import_via_symlink; - public function __construct() - { + public function __construct( + bool $import_via_symlink + ) { $this->imageHandler = app(ImageHandlerInterface::class); + $this->import_via_symlink = $import_via_symlink; } use ImageEditing; @@ -31,7 +33,7 @@ public function storeFile(Create $create) if (!$create->is_uploaded) { // TODO: use the storage facade here // Check if the user wants to create symlinks instead of copying the photo - if (Configs::get_value('import_via_symlink', '0') === '1') { + if ($this->import_via_symlink) { if (!symlink($create->tmp_name, $create->path)) { // @codeCoverageIgnoreStart Logs::error(__METHOD__, __LINE__, 'Could not create symlink'); @@ -76,7 +78,7 @@ public function generate_thumbs(Create &$create, bool &$skip_db_entry_creation, ) { // If we are importing via symlink, we don't actually overwrite // the source but we still need to fix the dimensions. - $pretend = (!$create->is_uploaded && Configs::get_value('import_via_symlink', '0') === '1'); + $pretend = (!$create->is_uploaded && $this->import_via_symlink); $rotation = $this->imageHandler->autoRotate($create->path, $create->info, $pretend); if ($rotation !== [false, false]) { diff --git a/app/Console/Commands/Sync.php b/app/Console/Commands/Sync.php index 2cccc72b90..75d3709bb1 100644 --- a/app/Console/Commands/Sync.php +++ b/app/Console/Commands/Sync.php @@ -4,6 +4,7 @@ use AccessControl; use App\Actions\Import\Exec; +use App\Models\Configs; use Exception; use Illuminate\Console\Command; @@ -39,7 +40,8 @@ public function handle(Exec $exec) $exec->statusCLIFormatting = true; $exec->memCheck = false; $exec->delete_imported = false; // we want to sync -> do not delete imported files - $exec->force_skip_duplicates = true; + $exec->import_via_symlink = (Configs::get_value('import_via_symlink', '0') === '1'); + $exec->skip_duplicates = true; $exec->resync_metadata = $this->option('resync_metadata'); AccessControl::log_as_id($owner_id); diff --git a/app/Exceptions/PhotoResyncedException.php b/app/Exceptions/PhotoResyncedException.php new file mode 100644 index 0000000000..d7f2b3a2c1 --- /dev/null +++ b/app/Exceptions/PhotoResyncedException.php @@ -0,0 +1,16 @@ +validated(); + Session::forget('cancel'); return $fromServer->do($validated); } + + public function serverCancel() + { + Session::put('cancel', true); + + return 'true'; + } } diff --git a/app/Http/Controllers/PhotoController.php b/app/Http/Controllers/PhotoController.php index 841fc9148b..0aa0b619ff 100644 --- a/app/Http/Controllers/PhotoController.php +++ b/app/Http/Controllers/PhotoController.php @@ -18,10 +18,13 @@ use App\Actions\Photo\SetTags; use App\Actions\Photo\SetTitle; use App\Assets\Helpers; +use App\Exceptions\JsonError; +use App\Exceptions\JsonWarning; use App\Http\Requests\AlbumRequests\AlbumIDRequest; use App\Http\Requests\PhotoRequests\PhotoIDRequest; use App\Http\Requests\PhotoRequests\PhotoIDsRequest; use App\ModelFunctions\SymLinkFunctions; +use App\Models\Configs; use App\Models\Logs; use App\Models\Photo; use App\Response; @@ -98,7 +101,15 @@ public function add(AlbumIDRequest $request, Create $create) $nameFile['type'] = $file->getMimeType(); $nameFile['tmp_name'] = $file->getPathName(); - return $create->add($nameFile, $request['albumID']); + try { + $res = $create->add($nameFile, $request['albumID'], false, (Configs::get_value('skip_duplicates', '0') === '1')); + } catch (JsonWarning $e) { + $res = $e->render(); + } catch (JsonError $e) { + $res = $e->render(); + } + + return $res; } /** diff --git a/app/Http/Requests/ImportRequests/ImportServerRequest.php b/app/Http/Requests/ImportRequests/ImportServerRequest.php index af62b6e8f2..efbd0a2e5b 100644 --- a/app/Http/Requests/ImportRequests/ImportServerRequest.php +++ b/app/Http/Requests/ImportRequests/ImportServerRequest.php @@ -27,6 +27,9 @@ public function rules() 'path' => 'string|required', 'albumID' => 'int|required', 'delete_imported' => 'int', + 'import_via_symlink' => 'int', + 'skip_duplicates' => 'int', + 'resync_metadata' => 'int', ]; } } diff --git a/app/Locale/ChineseSimplified.php b/app/Locale/ChineseSimplified.php index 3809178b43..50c803b2b7 100644 --- a/app/Locale/ChineseSimplified.php +++ b/app/Locale/ChineseSimplified.php @@ -406,7 +406,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => '失败', 'UPLOAD_FAILED_ERROR' => '上传失败。服务器返回了一个错误!', 'UPLOAD_FAILED_WARNING' => '上传失败。服务器返回了一个警告!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => '已跳过', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => '请查看浏览器控制台获取详细信息。', 'UPLOAD_UNKNOWN' => '服务器返回未知响应。请查看浏览器控制台获取详细信息。', 'UPLOAD_ERROR_UNKNOWN' => '上传失败。服务器返回了一个未知错误!', @@ -424,6 +428,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => '无法导入空文件夹!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => '删除原始图像', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => '原始图像将在导入后尝试删除。', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => '内存不足!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => '此服务器上的导入进程已经接近内存上限并可能过早地被中断。', 'UPLOAD_WARNING' => '警告', @@ -433,6 +443,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => '不能导入文件!', 'UPLOAD_IMPORT_UNSUPPORTED' => '不支持的文件类型!', 'UPLOAD_IMPORT_ALBUM_FAILED' => '不能创建相册!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => '自托管照片管理的正确之选', 'ABOUT_DESCRIPTION' => '是一个自由的照片管理工具,其其运行于您的服务器或Web空间。仅需几分钟即可安装。Lychee 为您提供了像原生应用那样上传、管理和分享照片所需的一切,您的所有照片都将安全地存储。', diff --git a/app/Locale/ChineseTraditional.php b/app/Locale/ChineseTraditional.php index 1e6c6dbe79..3591402f90 100644 --- a/app/Locale/ChineseTraditional.php +++ b/app/Locale/ChineseTraditional.php @@ -405,7 +405,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => '失敗', 'UPLOAD_FAILED_ERROR' => '上傳失敗。伺服器傳回了一個錯誤!', 'UPLOAD_FAILED_WARNING' => '上傳失敗。伺服器傳回了一個警告!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => '已跳過', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => '請查看瀏覽器控制台獲取詳細信息。', 'UPLOAD_UNKNOWN' => '伺服器傳回了未知響應。請查看瀏覽器控制台獲取詳細信息。', 'UPLOAD_ERROR_UNKNOWN' => '上傳失敗。伺服器回傳了一個未知錯誤!', @@ -423,6 +427,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => '無法導入空文件夾!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => '刪除原件', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => '如果可能,原始文件將在導入後刪除。', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => '內存不足!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => '伺服器上的導入過程已接近內存限制,並可能最終被提前終止。', 'UPLOAD_WARNING' => '警告', @@ -432,6 +442,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => '無法導入文件!', 'UPLOAD_IMPORT_UNSUPPORTED' => '不支援的文件類型!', 'UPLOAD_IMPORT_ALBUM_FAILED' => '無法創建相簿!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Lychee自主託管的照片管理程序', 'ABOUT_DESCRIPTION' => '是一個免費的照片管理工具,可在您的伺服器或網站空間上運行。安裝僅需幾秒鐘。
上傳,管理和分享照片(例如從本機應用程序)。
Lychee提供您所需的一切,所有照片均安全存儲。', diff --git a/app/Locale/Czech.php b/app/Locale/Czech.php index 97b5847802..0f789ab6f9 100644 --- a/app/Locale/Czech.php +++ b/app/Locale/Czech.php @@ -412,7 +412,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Selhání', 'UPLOAD_FAILED_ERROR' => 'Upload selhal. Server vrátil chybu!', 'UPLOAD_FAILED_WARNING' => 'Upload selhal. Server vrátil upozornění!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Vynecháno', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Podrobnosti získáte v konzoli svého prohlížeče.', 'UPLOAD_UNKNOWN' => 'Server vrátil neočkávanou dopověď. Podrobnosti získáte v konzoli svého prohlížeče.', 'UPLOAD_ERROR_UNKNOWN' => 'Upload selhal. Server vrátil neznámou chybu!', @@ -430,6 +434,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Import neproběhl, protože složka je prázdná!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Odstranit původní soubory', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Pokud to bude možné, původní soubory budou po importu odstraněny.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Není dostatek paměti!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'Proces importu alokuje příliš mnoho paměti serveru a může být tedy neočekávaně přerušen.', 'UPLOAD_WARNING' => 'Upozornění', @@ -439,6 +449,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Soubor nelze importovat!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Nepodporovaný typ souboru!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Album nelze vytvořit!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Ideální řešení vlastního hostování a správy fotografií', 'ABOUT_DESCRIPTION' => 'je open-source nástroj na správu fotogragfií na Vašem serveru nebo webu. Instalace je hotova dílem okmažiku. Upload, správa a sdílení fotografií se provádí běžnými aplikacemi. Lychee přináší vše, co je třeba pro bezpečné online uložení Vašich fotografií.', diff --git a/app/Locale/Dutch.php b/app/Locale/Dutch.php index c82db44b44..035246454f 100644 --- a/app/Locale/Dutch.php +++ b/app/Locale/Dutch.php @@ -405,7 +405,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Mislukt', 'UPLOAD_FAILED_ERROR' => 'Upload mislukt. Server gaf een error!', 'UPLOAD_FAILED_WARNING' => 'Upload mislukt. Server gaf een waarschuwing!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Overgeslagen', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Kijk naar je browsers console voor meer informatie.', 'UPLOAD_UNKNOWN' => 'Server gaf een onbekende terugkoppeling, kijk naar je browsers console voor meer informatie.', 'UPLOAD_ERROR_UNKNOWN' => 'Upload mislukt. Server gaf een onbekende error!', @@ -423,6 +427,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Kan de import niet starten, folder is leeg!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Delete originals', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'De orginele bestanden worden verwijderd na de import indien mogelijk.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Low memory condition!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'The import process on the server is approaching the memory limit and may end up being terminated prematurely.', 'UPLOAD_WARNING' => 'Warning', @@ -432,6 +442,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Could not import the file!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Unsupported file type!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Could not create the album!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Self-hosted photo-management done right', 'ABOUT_DESCRIPTION' => 'is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.', diff --git a/app/Locale/English.php b/app/Locale/English.php index 7f130d5314..2665c92e62 100644 --- a/app/Locale/English.php +++ b/app/Locale/English.php @@ -406,7 +406,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Failed', 'UPLOAD_FAILED_ERROR' => 'Upload failed. Server returned an error!', 'UPLOAD_FAILED_WARNING' => 'Upload failed. Server returned a warning!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Skipped', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Please take a look at the console of your browser for further details.', 'UPLOAD_UNKNOWN' => 'Server returned an unknown response. Please take a look at the console of your browser for further details.', 'UPLOAD_ERROR_UNKNOWN' => 'Upload failed. Server returned an unkown error!', @@ -419,11 +423,17 @@ public function get_locale(): array 'UPLOAD_IMPORT' => 'Import', 'UPLOAD_IMPORT_SERVER' => 'Importing from server', 'UPLOAD_IMPORT_SERVER_FOLD' => 'Folder empty or no readable files to process. Please take a look at the log (Settings -> Show Log) for further details.', - 'UPLOAD_IMPORT_SERVER_INSTR' => 'This action will import all photos, folders and sub-folders which are located in the following directory.', + 'UPLOAD_IMPORT_SERVER_INSTR' => 'Import all photos, folders and sub-folders located in the folder with the following absolute path (on server):', 'UPLOAD_ABSOLUTE_PATH' => 'Absolute path to directory', 'UPLOAD_IMPORT_SERVER_EMPT' => 'Could not start import because the folder was empty!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Delete originals', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Original files will be deleted after the import when possible.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Low memory condition!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'The import process on the server is approaching the memory limit and may end up being terminated prematurely.', 'UPLOAD_WARNING' => 'Warning', @@ -433,6 +443,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Could not import the file!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Unsupported file type!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Could not create the album!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Self-hosted photo-management done right', 'ABOUT_DESCRIPTION' => 'is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.', diff --git a/app/Locale/French.php b/app/Locale/French.php index b3fd327dfd..1ea9ea4a5d 100644 --- a/app/Locale/French.php +++ b/app/Locale/French.php @@ -405,7 +405,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Échec', 'UPLOAD_FAILED_ERROR' => 'Échec d\'upload. Le serveur a retourné une erreur !', 'UPLOAD_FAILED_WARNING' => 'Échec d\'upload. Le serveur a retourné un avertissement !', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Ignoré', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Veuillez consulter la console de votre navigateur pour obtenir plus de détails.', 'UPLOAD_UNKNOWN' => 'Le serveur a retourné une reponse inconnue. Veuillez consulter la console de votre navigateur pour obtenir plus de détails.', 'UPLOAD_ERROR_UNKNOWN' => 'Échec de l\'upload. Le serveur a retourné une erreur inconnue !', @@ -423,6 +427,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Impossible de démarrer l\'importation car le dossier était vide !', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Supprimer les originaux', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Les fichiers originaux seront supprimés après l\'importation lorsque cela est possible.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Mémoire faible disponible !', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'Le processus d\'importation du serveur approche la limite de la mémoire disponible et peut etre terminé prématurément.', 'UPLOAD_WARNING' => 'Attention', @@ -432,6 +442,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Impossible d\'importer le fichier !', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Type de fichier non supporté !', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Impossible de créer l\'album !', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Hebergement personalisé de photo à votre façon !', 'ABOUT_DESCRIPTION' => ' est une outil de gestion de gallerie gratuit qui fonctionne sur votre propre serveur. L\'installation est rapide. Uploadez, gérez et partagez vos photos comme avec une application propre. Lychee vous fourni tout ce dont vous avez besoin et vos photos sont stockées en sécurité chez vous.', diff --git a/app/Locale/German.php b/app/Locale/German.php index 33dd670e3d..ab47fd412d 100644 --- a/app/Locale/German.php +++ b/app/Locale/German.php @@ -414,7 +414,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Fehlgeschlagen', 'UPLOAD_FAILED_ERROR' => 'Hochladen fehlgeschlagen. Der Server hat einen Fehler gemeldet!', 'UPLOAD_FAILED_WARNING' => 'Hochladen fehlgeschlagen. Der Server hat eine Warnung ausgegeben!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Übersprungen', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Bitte schauen Sie in die Konsole Ihres Browsers, um weiter Details zu erfahren.', 'UPLOAD_UNKNOWN' => 'Der Server hat eine unbekannte Antwort gegeben. Bitte schauen Sie in die Konsole Ihres Browsers, um weiter Details zu erfahren.', 'UPLOAD_ERROR_UNKNOWN' => 'Hochladen fehlgeschlagen. Der Server hat einen unbekannten Fehler gemeldet!', @@ -432,6 +436,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Konnte Import nicht starten, weil der Ordner leer ist.', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Originale löschen', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Die Originaldateien werden nach dem Import gelöscht, falls möglich.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Sehr wenig Speicher!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'Der Importprozess auf dem Server nähert sich dem Speicherlimit und wird eventuell vorzeitig beendet.', 'UPLOAD_WARNING' => 'Warnung', @@ -441,6 +451,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'The Datei konnte nicht importiert werden!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Dateityp wird nicht unterstützt!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Album konnte nicht erstellt werden!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Selbst gehostetes Foto-Management, aber richtig!', 'ABOUT_DESCRIPTION' => 'ist ein freies Foto-Management-Werkzeug, dass auf Ihrem Server oder Webspace läuft. Die Installation ist eine Sache von Sekunden. Hochladen, Organisieren und Teilen von Fotos funktioniert wie in einer nativen Anwendung. Lychee hält alles bereit, was Sie benötigen, und alle Bilder werden sicher abgespeichert.', diff --git a/app/Locale/Greek.php b/app/Locale/Greek.php index bd5249be75..f95c548338 100644 --- a/app/Locale/Greek.php +++ b/app/Locale/Greek.php @@ -405,7 +405,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Απέτυχε', 'UPLOAD_FAILED_ERROR' => 'Η μεταφόρτωση απέτυχε. Ο εξυπηρετητής επέστρεψε ένα σφάλμα!', 'UPLOAD_FAILED_WARNING' => 'Η μεταφόρτωση απέτυχε. Ο εξυπηρετητής επέστρεψε μία προειδοποίηση!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Παραλείφθηκε', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Παρακαλούμε ρίξτε μια ματιά στην κονσόλα του περιηγητή σας για περισσότερες λεπτομέρειες.', 'UPLOAD_UNKNOWN' => 'Ο εξυπηρετητής επέστρεψε μία άγνωστη απόκριση. Παρακαλούμε ρίξτε μια ματιά στην κονσόλα του περιηγητή σας για περισσότερες λεπτομέρειες.', 'UPLOAD_ERROR_UNKNOWN' => 'Η μεταφόρτωση απέτυχε. Ο εξυπηρετητής επέστρεψε ένα άγνωστο σφάλμα!', @@ -423,6 +427,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Δεν ήταν δυνατό να ξεκινήσει η διαδικασία εισαγωγής, διότι ο κατάλογος ήταν άδειος!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Διαγραφή πρωτότυπων', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Αν είναι εφικτό τα πρωτότυπα αρχεία θα διαγραφούν αφού ολοκληρωθεί η εισαγωγή τους.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Κατάσταση χαμηλής μνήμης!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'Η διεργασία εισαγωγής στον εξυπηρετητή πλησιάζει τα όρια μνήμης και μπορεί να τερματιστεί πρόωρα.', 'UPLOAD_WARNING' => 'Προειδοποίηση', @@ -432,6 +442,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Δεν ήταν δυνατή η εισαγωγή του αρχείου!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Μη υποστηριζόμενος τύπος αρχείου!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Δεν ήταν δυνατή η δημιουργία του λευκώματος!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Αυτό-φιλοξενούμενη διαχείριση φωτογραφιών καμωμένη σωστά', 'ABOUT_DESCRIPTION' => 'είναι ένα δωρεάν εργαλείο διαχείρισης φωτογραφιών, το οποίο "τρέχει" στον δικό σας εξυπηρετητή ή δικτυακό-χώρο. Εγκαθίσταται σε μερικά δευτερόλεπτα. Μεταφορτώστε, διαχειριστείτε και κοινοποιήστε φωτογραφίες σαν από εγκατεστημένη εφαρμογή. Το Lychee παρέχεται με όλες τις λειτουργίες που χρειάζεστε και όλες οι φωτογραφίες σας είναι αποθηκευμένες με ασφάλεια.', diff --git a/app/Locale/Italian.php b/app/Locale/Italian.php index a89120f8fe..2c10f36e24 100644 --- a/app/Locale/Italian.php +++ b/app/Locale/Italian.php @@ -411,7 +411,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Fallito', 'UPLOAD_FAILED_ERROR' => 'Caricamento fallito. Il server ha restituito un errore!', 'UPLOAD_FAILED_WARNING' => 'Caricamento fallito. Il server ha restituito un avviso!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Saltato', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Per favore controlla la console del tuo browser per ulteriori dettagli.', 'UPLOAD_UNKNOWN' => 'Il server ha restituito una risposta sconosciuta. Per favore controlla la console del tuo browser per ulteriori dettagli.', 'UPLOAD_ERROR_UNKNOWN' => 'Caricamneto fallito. Il server ha restituito un errore sconosciuto!', @@ -429,6 +433,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'È stato impossibile avviare l\'importazione dato che la cartella era vuota!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Delete originals', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'I file originali saranno eliminati dopo l\'importazione se possibile.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Low memory condition!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'The import process on the server is approaching the memory limit and may end up being terminated prematurely.', 'UPLOAD_WARNING' => 'Warning', @@ -438,6 +448,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Could not import the file!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Unsupported file type!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Could not create the album!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Gestione propria delle foto fatta nel modo giusto', 'ABOUT_DESCRIPTION' => 'è uno strumento gratuito di gestione delle foto, eseguito nel server o sul tuo spazio web. L\'installazione è questione di secondi. Carica, gestisci e condividi foto come in un\'applicazione nativa. Lychee offre tutto ciò di cui hai bisogno e tutte le tue foto vengono salvate in modo sicuro.', diff --git a/app/Locale/NorwegianBokmal.php b/app/Locale/NorwegianBokmal.php index 129d6f6a34..555a7628a9 100644 --- a/app/Locale/NorwegianBokmal.php +++ b/app/Locale/NorwegianBokmal.php @@ -406,7 +406,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Feilet', 'UPLOAD_FAILED_ERROR' => 'Opplasting feilet. Serveren svarte med en feil!', 'UPLOAD_FAILED_WARNING' => 'Opplasting feilet. Serveren svarte med en advarsel!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Hoppet over', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Vennligst se konsollen i nettleseren for mer informasjon.', 'UPLOAD_UNKNOWN' => 'Serveren svarte med en ukjent feilmelding. Vennlist se konsollen i nettleseren for mer informasjon.', 'UPLOAD_ERROR_UNKNOWN' => 'Opplasting feilet. Serveren svarte med en ukjent feil!', @@ -424,6 +428,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Kunne ikke starte importeringen siden mappen var tom!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Fjern originalene', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'De opprinnelige filene vil bli fjernet etter importeringen når mulig.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Lite minne gjenstår!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'Importeringsprossesen på serverren nærmer seg grensen for hvor mye minne som kan brukes, og kan bli avbrutt før den er ferdig.', 'UPLOAD_WARNING' => 'Advarsel', @@ -433,6 +443,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Kan ikke importere filen!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Filtypen er ikke støttet!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Kan ikke lage albumet!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Selvlevert bildehåndtering den riktige måten!', 'ABOUT_DESCRIPTION' => 'er et gratis bildehåndteringsverktøy, som kjører på serveren eller en webhost som du eier og kontrollerer. Installasjon tar sekunder. Last opp, håndter, og del bilder som om det er din egen maskin. Lychee leverer alt du trenger, og alle bildene er trygt lagret.', diff --git a/app/Locale/Russian.php b/app/Locale/Russian.php index bdf11a4568..bb81d34277 100644 --- a/app/Locale/Russian.php +++ b/app/Locale/Russian.php @@ -406,7 +406,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Ошибка', 'UPLOAD_FAILED_ERROR' => 'Загрузка не удалась: сервер вернул ошибку.', 'UPLOAD_FAILED_WARNING' => 'Загрузка не удалась, сервер вернул предупреждение.', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Пропущено', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Подробности смотрите в консоли браузера.', 'UPLOAD_UNKNOWN' => 'Сервер вернул непонятный ответ. Проверьте консоль браузера.', 'UPLOAD_ERROR_UNKNOWN' => 'Загрузка не удалась: сервер вернул что-то непонятное!', @@ -424,6 +428,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Не могу импортировать: указанный каталог пуст!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Delete originals', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Original files will be deleted after the import when possible.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Low memory condition!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'The import process on the server is approaching the memory limit and may end up being terminated prematurely.', 'UPLOAD_WARNING' => 'Warning', @@ -433,6 +443,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Could not import the file!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Unsupported file type!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Could not create the album!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Self-hosted photo-management done right', 'ABOUT_DESCRIPTION' => "- это бесплатный фотоменеджер для Вашего сервера или хостинга. Установка занимает считанные секунды. Загружайте, редактируйте и делитесь фотографиями как в любимом приложении! Lychee обеспечит Вас всем необходимым, включая безопасность хранения Ваших фотографий!
На русский язык перевёл Евгений Лебедев. Пожалуйста, дайте мне знать, если заметите неточности.", diff --git a/app/Locale/Slovak.php b/app/Locale/Slovak.php index b52b2a84a1..949ea71d45 100644 --- a/app/Locale/Slovak.php +++ b/app/Locale/Slovak.php @@ -412,7 +412,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Zlyhanie', 'UPLOAD_FAILED_ERROR' => 'Nahrávanie zlyhalo. Server ohlásil chybu!', 'UPLOAD_FAILED_WARNING' => 'Nahrávanie zlyhalo. Server ohlásil varovanie!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Preskočiť', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Skontrolujte konzolu prehliadača, pre zistenie ďalších podrobností.', 'UPLOAD_UNKNOWN' => 'Server vrátil neznámu odpoveď.Skontrolujte konzolu prehliadača, pre zistenie ďalších podrobností.', 'UPLOAD_ERROR_UNKNOWN' => 'Nahrávanie zlyhalo. Server ohlásil neznámu chybu!', @@ -430,6 +434,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Import sa nedá spustiť, priečinok je prázdny.', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Zmazať originály', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Ak je možné, budú pôvodné súbory po importe zmazané.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Málo pamäte!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'Proces importu na serveri sa blíži k limitu pamäte a môže skončiť predčasným ukončením.', 'UPLOAD_WARNING' => 'Varovanie', @@ -439,6 +449,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Súbor sa nedá naimportovať!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Nepodporovaný typ súboru!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Nemožno vytvoriť album!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Vlastný hostovaný manažment obrázkov!', 'ABOUT_DESCRIPTION' => 'je open-source nástroj, bežiaci na vašom vlastnom serveri alebo v cloude. Inštalácia je otázkou sekúnd. Nahrať, spravovať a zdieľať obrázky ako v natívnej aplikácii. Lychee ponúka všetko čo potrebujete vy a vaše obrázky pre bezpečné uloženie.', diff --git a/app/Locale/Spanish.php b/app/Locale/Spanish.php index e6b384ad9c..1682781a64 100644 --- a/app/Locale/Spanish.php +++ b/app/Locale/Spanish.php @@ -405,7 +405,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Ha fallado', 'UPLOAD_FAILED_ERROR' => 'Subida fallida. ¡El servidor devolvió un error!', 'UPLOAD_FAILED_WARNING' => 'Subida fallida. ¡El servidor devolvió una advertencia!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Saltado', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Por favor, eche un vistazo a la consola de su navegador para más detalles.', 'UPLOAD_UNKNOWN' => 'El servidor devolvió una respuesta desconocida. Por favor, eche un vistazo a la consola de su navegador para más detalles.', 'UPLOAD_ERROR_UNKNOWN' => 'Subida fallida. ¡El servidor devolvió un error desconocido!', @@ -423,6 +427,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'No se pudo iniciar la importación porque la carpeta estaba vacía', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Eliminar originales', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Los archivos originales se eliminarán después de la importación cuando sea posible', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => '¡Condición de memoria baja!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'El proceso de importación en el servidor se acerca al límite de memoria y puede terminar antes de tiempo.', 'UPLOAD_WARNING' => 'Advertencia', @@ -432,6 +442,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => '¡No se pudo importar el archivo!', 'UPLOAD_IMPORT_UNSUPPORTED' => '¡Tipo de archivo no soportado!', 'UPLOAD_IMPORT_ALBUM_FAILED' => '¡No se pudo crear el álbum!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Un auto-hosteado gestor de imagenes, bien hecho', 'ABOUT_DESCRIPTION' => 'es una herramienta gratuita de gestión de fotos, que se ejecuta en su servidor o espacio web. La instalación es cuestión de segundos. Cargue, administre y comparta fotos como desde una aplicación nativa. Lychee viene con todo lo que necesitas y todas tus fotos se almacenan de forma segura.', diff --git a/app/Locale/Swedish.php b/app/Locale/Swedish.php index 2803e0f600..01a871b480 100644 --- a/app/Locale/Swedish.php +++ b/app/Locale/Swedish.php @@ -405,7 +405,11 @@ public function get_locale(): array 'UPLOAD_FAILED' => 'Misslyckades', 'UPLOAD_FAILED_ERROR' => 'Uppladdning misslyckades. Servern svarade med ett felmeddelande!', 'UPLOAD_FAILED_WARNING' => 'Uppladdning misslyckades. Servern svarade med en varning!', + 'UPLOAD_CANCELLED' => 'Cancelled', 'UPLOAD_SKIPPED' => 'Ignorerade', + 'UPLOAD_UPDATED' => 'Updated', + 'UPLOAD_IMPORT_SKIPPED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library.', + 'UPLOAD_IMPORT_RESYNCED_DUPLICATE' => 'This photo has been skipped because it\'s already in your library, but its metadata has been updated.', 'UPLOAD_ERROR_CONSOLE' => 'Kontrollera din webbläsares konsoll för ytterligare information.', 'UPLOAD_UNKNOWN' => 'Servern returnerade ett oklart svar. Kontrollera din webbläsares konsoll för ytterligare information.', 'UPLOAD_ERROR_UNKNOWN' => 'Uppladdning misslyckades. Servern returnerade ett oklart fel!', @@ -423,6 +427,12 @@ public function get_locale(): array 'UPLOAD_IMPORT_SERVER_EMPT' => 'Kunde inte påbörja importeringen då mappen saknade innehåll!', 'UPLOAD_IMPORT_DELETE_ORIGINALS' => 'Delete originals', 'UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL' => 'Originalfotografierna kommer att raderas efter att importering genomförts.', + 'UPLOAD_IMPORT_VIA_SYMLINK' => 'Symbolic links', + 'UPLOAD_IMPORT_VIA_SYMLINK_EXPL' => 'Import files using symbolic links to originals.', + 'UPLOAD_IMPORT_SKIP_DUPLICATES' => 'Skip duplicates', + 'UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL' => 'Existing media files are skipped.', + 'UPLOAD_IMPORT_RESYNC_METADATA' => 'Re-sync metadata', + 'UPLOAD_IMPORT_RESYNC_METADATA_EXPL' => 'Update metadata of existing media files.', 'UPLOAD_IMPORT_LOW_MEMORY' => 'Low memory condition!', 'UPLOAD_IMPORT_LOW_MEMORY_EXPL' => 'The import process on the server is approaching the memory limit and may end up being terminated prematurely.', 'UPLOAD_WARNING' => 'Warning', @@ -432,6 +442,7 @@ public function get_locale(): array 'UPLOAD_IMPORT_FAILED' => 'Could not import the file!', 'UPLOAD_IMPORT_UNSUPPORTED' => 'Unsupported file type!', 'UPLOAD_IMPORT_ALBUM_FAILED' => 'Could not create the album!', + 'UPLOAD_IMPORT_CANCELLED' => 'Import cancelled', 'ABOUT_SUBTITLE' => 'Self-hosted photo-management done right', 'ABOUT_DESCRIPTION' => 'is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.', diff --git a/public/Lychee-front b/public/Lychee-front index 26ac13f647..ee01711702 160000 --- a/public/Lychee-front +++ b/public/Lychee-front @@ -1 +1 @@ -Subproject commit 26ac13f647ac4c903dd5a74aea5bd0e757b56e74 +Subproject commit ee01711702e4a16d99f00c4138dc7b5b4715ea33 diff --git a/public/dist/main.css b/public/dist/main.css index f6cb593a1a..5931d05614 100755 --- a/public/dist/main.css +++ b/public/dist/main.css @@ -1 +1 @@ -@charset "UTF-8";@-webkit-keyframes basicModal__fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes basicModal__fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes basicModal__fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes basicModal__fadeOut{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes basicModal__moveUpFade{0%{-webkit-transform:translateY(80px);transform:translateY(80px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes basicModal__moveUpFade{0%{-webkit-transform:translateY(80px);transform:translateY(80px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes basicModal__shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}20%,60%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes basicModal__shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}20%,60%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}.basicModalContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:fixed;width:100%;height:100%;top:0;left:0;z-index:1000;-webkit-box-sizing:border-box;box-sizing:border-box}.basicModalContainer *,.basicModalContainer :after,.basicModalContainer :before{-webkit-box-sizing:border-box;box-sizing:border-box}.basicModalContainer--fadeIn{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeIn;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeIn}.basicModalContainer--fadeOut{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeOut;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeOut}.basicModalContainer--fadeIn .basicModal--fadeIn{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__moveUpFade;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__moveUpFade}.basicModalContainer--fadeIn .basicModal--shake{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__shake;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__shake}.basicModal{position:relative;width:500px;background-color:#fff;font-size:14px;border-radius:5px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.basicModal__content{max-height:70vh;overflow:auto;-webkit-overflow-scrolling:touch}.basicModal__buttons{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.1);box-shadow:0 -1px 0 rgba(0,0,0,.1)}.basicModal__button{display:inline-block;width:100%;font-weight:700;text-align:center;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.basicModal__button#basicModal__cancel{-ms-flex-negative:2;flex-shrink:2}.basicModal__button#basicModal__action{-ms-flex-negative:1;flex-shrink:1;-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.1);box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}.basicModal__button#basicModal__action:first-child{-webkit-box-shadow:none;box-shadow:none}.basicModal__button:first-child{border-radius:0 0 0 5px}.basicModal__button:last-child{border-radius:0 0 5px}.basicModal__text{width:100%;margin:0;padding:14px 10px;background-color:rgba(0,0,0,0);color:#333;border:none;-webkit-box-shadow:0 1px 0 #c8c8c8;box-shadow:0 1px 0 #c8c8c8;border-radius:0;outline:0;-webkit-transition:background-color .2s,-webkit-box-shadow .2s;transition:background-color .2s,box-shadow .2s,-webkit-box-shadow .2s;-o-transition:background-color .2s,box-shadow .2s}.basicModal__text:hover{background-color:rgba(0,0,0,.02);-webkit-box-shadow:0 1px 0 #b4b4b4;box-shadow:0 1px 0 #b4b4b4}.basicModal__text:focus{background-color:rgba(40,117,237,.05);-webkit-box-shadow:0 1px 0 #2875ed;box-shadow:0 1px 0 #2875ed}.basicModal__text.error{background-color:rgba(255,36,16,.05);-webkit-box-shadow:0 1px 0 #ff2410;box-shadow:0 1px 0 #ff2410}.basicModal p{margin:0 0 5%;width:100%}.basicModal p:last-child{margin:0}.basicModal__small{max-width:340px;text-align:center}.basicModal__small .basicModal__content{padding:10% 5%}.basicModal__xclose#basicModal__cancel{position:absolute;top:-8px;right:-8px;margin:0;padding:0;width:40px;height:40px;background-color:#fff;border-radius:100%;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.basicModal__xclose#basicModal__cancel:after{content:'';position:absolute;left:-3px;top:8px;width:35px;height:34px;background:#fff}.basicModal__xclose#basicModal__cancel svg{position:relative;width:20px;height:39px;fill:#888;z-index:1;-webkit-transition:fill .2s;-o-transition:fill .2s;transition:fill .2s}.basicModal__xclose#basicModal__cancel:after:hover svg,.basicModal__xclose#basicModal__cancel:hover svg{fill:#2875ed}.basicModal__xclose#basicModal__cancel:active svg,.basicModal__xclose#basicModal__cancel:after:active svg{fill:#1364e3}.basicContextContainer{position:fixed;width:100%;height:100%;top:0;left:0;z-index:1000;-webkit-tap-highlight-color:transparent}.basicContext{position:absolute;opacity:0;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.2) basicContext__popIn;animation:.3s cubic-bezier(.51,.92,.24,1.2) basicContext__popIn}.basicContext *{-webkit-box-sizing:border-box;box-sizing:border-box}.basicContext__item{cursor:pointer;margin-bottom:2px;font-size:14px}.basicContext__item--separator{float:left;width:100%;cursor:default}.basicContext__item--disabled{cursor:default;opacity:.5}.basicContext__data{min-width:140px;text-align:left;white-space:nowrap}.basicContext__icon{display:inline-block}.basicContext--scrollable{height:100%;-webkit-overflow-scrolling:touch;overflow-y:auto}.basicContext--scrollable .basicContext__data{min-width:160px}@-webkit-keyframes basicContext__popIn{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes basicContext__popIn{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1;background-color:#1d1d1d;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}em,i{font-style:italic}b,strong{font-weight:700}*{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:color .3s,opacity .3s ease-out,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;-o-transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s}body,html{min-height:100vh;position:relative}body.view{background-color:#0f0f0f}div#container{position:relative}input{-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;user-select:text!important}.svgsprite{display:none}.iconic{width:100%;height:100%}#upload{display:none}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes moveBackground{0%{background-position-x:0}100%{background-position-x:-100px}}@keyframes moveBackground{0%{background-position-x:0}100%{background-position-x:-100px}}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}.content{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:start;align-content:flex-start;padding:50px 30px 33px 0;width:calc(100% - 30px);-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s;-webkit-overflow-scrolling:touch;max-width:calc(100vw - 10px)}.content::before{content:"";position:absolute;left:0;width:100%;height:1px;background:rgba(255,255,255,.02)}.content--sidebar{width:calc(100% - 380px)}.content.contentZoomIn .album,.content.contentZoomIn .photo{-webkit-animation-name:zoomIn;animation-name:zoomIn}.content.contentZoomIn .divider{-webkit-animation-name:fadeIn;animation-name:fadeIn}.content.contentZoomOut .album,.content.contentZoomOut .photo{-webkit-animation-name:zoomOut;animation-name:zoomOut}.content.contentZoomOut .divider{-webkit-animation-name:fadeOut;animation-name:fadeOut}.content .album,.content .photo{position:relative;width:202px;height:202px;margin:30px 0 0 30px;cursor:default;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}.content .album .thumbimg,.content .photo .thumbimg{position:absolute;width:200px;height:200px;background:#222;color:#222;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.5);box-shadow:0 2px 5px rgba(0,0,0,.5);border:1px solid rgba(255,255,255,.5);-webkit-transition:opacity .3s ease-out,border-color .3s ease-out,-webkit-transform .3s ease-out;transition:opacity .3s ease-out,transform .3s ease-out,border-color .3s ease-out,-webkit-transform .3s ease-out;-o-transition:opacity .3s ease-out,transform .3s ease-out,border-color .3s ease-out}.content .album .thumbimg>img,.content .photo .thumbimg>img{width:100%;height:100%}.content .album.active .thumbimg,.content .album:focus .thumbimg,.content .album:hover .thumbimg,.content .photo.active .thumbimg,.content .photo:focus .thumbimg,.content .photo:hover .thumbimg{border-color:#2293ec}.content .album:active .thumbimg,.content .photo:active .thumbimg{-webkit-transition:none;-o-transition:none;transition:none;border-color:#0f6ab2}.content .album.selected img,.content .photo.selected img{outline:#2293ec solid 1px}.content .album .video::before,.content .photo .video::before{content:"";position:absolute;display:block;height:100%;width:100%;background:url(../img/play-icon.png) 46% 50% no-repeat;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;will-change:opacity,height}.content .album .video:focus::before,.content .album .video:hover::before,.content .photo .video:focus::before,.content .photo .video:hover::before{opacity:.75}.content .album .livephoto::before,.content .photo .livephoto::before{content:"";position:absolute;display:block;height:100%;width:100%;background:url(../img/live-photo-icon.png) 2% 2% no-repeat;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;will-change:opacity,height}.content .album .livephoto:focus::before,.content .album .livephoto:hover::before,.content .photo .livephoto:focus::before,.content .photo .livephoto:hover::before{opacity:.75}.content .album .thumbimg:first-child,.content .album .thumbimg:nth-child(2){-webkit-transform:rotate(0) translateY(0) translateX(0);-ms-transform:rotate(0) translateY(0) translateX(0);transform:rotate(0) translateY(0) translateX(0);opacity:0}.content .album:focus .thumbimg:nth-child(1),.content .album:focus .thumbimg:nth-child(2),.content .album:hover .thumbimg:nth-child(1),.content .album:hover .thumbimg:nth-child(2){opacity:1;will-change:transform}.content .album:focus .thumbimg:nth-child(1),.content .album:hover .thumbimg:nth-child(1){-webkit-transform:rotate(-2deg) translateY(10px) translateX(-12px);-ms-transform:rotate(-2deg) translateY(10px) translateX(-12px);transform:rotate(-2deg) translateY(10px) translateX(-12px)}.content .album:focus .thumbimg:nth-child(2),.content .album:hover .thumbimg:nth-child(2){-webkit-transform:rotate(5deg) translateY(-8px) translateX(12px);-ms-transform:rotate(5deg) translateY(-8px) translateX(12px);transform:rotate(5deg) translateY(-8px) translateX(12px)}.content .blurred span{overflow:hidden}.content .blurred img{-webkit-filter:blur(5px);filter:blur(5px)}.content .album .overlay,.content .photo .overlay{position:absolute;margin:0 1px;width:200px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.6)));background:-o-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.6));background:linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,.6));bottom:1px}.content .album .thumbimg[data-overlay=false]+.overlay{background:0 0}.content .photo .overlay{opacity:0}.content .photo.active .overlay,.content .photo:focus .overlay,.content .photo:hover .overlay{opacity:1}.content .album .overlay h1,.content .photo .overlay h1{min-height:19px;width:180px;margin:12px 0 5px 15px;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.4);font-size:16px;font-weight:700;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.content .album .overlay a,.content .photo .overlay a{display:block;margin:0 0 12px 15px;font-size:11px;color:#ccc;text-shadow:0 1px 3px rgba(0,0,0,.4)}.content .album .overlay a .iconic,.content .photo .overlay a .iconic{fill:#ccc;margin:0 5px 0 0;width:8px;height:8px}.content .album .thumbimg[data-overlay=false]+.overlay a,.content .album .thumbimg[data-overlay=false]+.overlay h1{text-shadow:none}.content .album .badges,.content .photo .badges{position:relative;margin:-1px 0 0 6px}.content .album .subalbum_badge{position:absolute;right:0;top:0}.content .album .badge,.content .photo .badge{display:none;margin:0 0 0 6px;padding:12px 8px 6px;width:18px;background:#d92c34;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);border-radius:0 0 5px 5px;border:1px solid #fff;border-top:none;color:#fff;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.4);opacity:.9}.content .album .badge--visible,.content .photo .badge--visible{display:inline-block}.content .album .badge--not--hidden,.content .photo .badge--not--hidden{background:#0a0}.content .album .badge--hidden,.content .photo .badge--hidden{background:#f90}.content .album .badge--cover,.content .photo .badge--cover{display:inline-block;background:#f90}.content .album .badge--star,.content .photo .badge--star{display:inline-block;background:#fc0}.content .album .badge--nsfw,.content .photo .badge--nsfw{display:inline-block;background:#ff82ee}.content .album .badge--list,.content .photo .badge--list{background:#2293ec}.content .album .badge--tag,.content .photo .badge--tag{display:inline-block;background:#0a0}.content .album .badge .iconic,.content .photo .badge .iconic{fill:#fff;width:16px;height:16px}.content .album .badge--folder,.content .photo .badge--folder{display:inline-block;-webkit-box-shadow:none;box-shadow:none;background:0 0;border:none}.content .album .badge--folder .iconic,.content .photo .badge--folder .iconic{width:12px;height:12px}.content .divider{margin:50px 0 0;padding:10px 0 0;width:100%;opacity:0;border-top:1px solid rgba(255,255,255,.02);-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.2);box-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}.content .divider:first-child{margin-top:10px;border-top:0;-webkit-box-shadow:none;box-shadow:none}.content .divider h1{margin:0 0 0 30px;color:rgba(255,255,255,.6);font-size:14px;font-weight:700}.no_content{position:absolute;top:50%;left:50%;padding-top:20px;color:rgba(255,255,255,.35);text-align:center;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.no_content .iconic{fill:rgba(255,255,255,.3);margin:0 0 10px;width:50px;height:50px}.no_content p{font-size:16px;font-weight:700}.leftMenu__open{margin-left:250px;width:calc(100% - 280px)}.leftMenu{height:100vh;width:0;position:fixed;z-index:4;top:0;left:0;background-color:#111;overflow-x:hidden;padding-top:60px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.leftMenu a{padding:8px 8px 8px 32px;text-decoration:none;font-size:18px;color:#818181;display:block;-webkit-transition:.3s;-o-transition:.3s;transition:.3s}.leftMenu a.linkMenu{white-space:nowrap}.leftMenu a:hover{color:#f1f1f1}.leftMenu .closebtn{position:absolute;top:0;right:25px;font-size:36px;margin-left:50px}.leftMenu .closetxt{position:absolute;top:0;left:0;font-size:24px;height:28px;padding-top:16px;color:#111;display:inline-block;width:210px}.leftMenu .closetxt:hover{color:#818181}.leftMenu .iconic{display:inline-block;margin:0 10px 0 1px;width:15px;height:14px;fill:#818181}.leftMenu .iconic.ionicons{margin:0 8px -2px 0;width:18px;height:18px}.leftMenu__visible{width:250px}@media screen and (max-height:450px){.leftMenu{padding-top:15px}.leftMenu a{font-size:18px}}.basicContext{padding:5px 0 6px;background:-webkit-gradient(linear,left top,left bottom,from(#333),to(#252525));background:-o-linear-gradient(top,#333,#252525);background:linear-gradient(to bottom,#333,#252525);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05);border-radius:5px;border:1px solid rgba(0,0,0,.7);border-bottom:1px solid rgba(0,0,0,.8);-webkit-transition:none;-o-transition:none;transition:none}.basicContext__item--separator{margin:4px 0;height:2px;background:rgba(0,0,0,.2);border-bottom:1px solid rgba(255,255,255,.06)}.basicContext__item:last-child{margin-bottom:0}.basicContext__data{min-width:auto;padding:6px 25px 7px 12px;color:#fff;-webkit-transition:none;-o-transition:none;transition:none;cursor:default}.basicContext__item:not(.basicContext__item--disabled):hover .basicContext__data{background:-webkit-gradient(linear,left top,left bottom,from(#2293ec),to(#1386e1));background:-o-linear-gradient(top,#2293ec,#1386e1);background:linear-gradient(to bottom,#2293ec,#1386e1)}.basicContext__item:not(.basicContext__item--disabled):active .basicContext__data{background:-webkit-gradient(linear,left top,left bottom,from(#1178ca),to(#0f6ab2));background:-o-linear-gradient(top,#1178ca,#0f6ab2);background:linear-gradient(to bottom,#1178ca,#0f6ab2)}.basicContext__icon{margin-right:10px;width:12px;text-align:center}.basicContext__data .cover{position:absolute;background-color:#222;border-radius:2px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.5);box-shadow:0 0 0 1px rgba(0,0,0,.5)}.basicContext__data .title{display:inline-block;margin:0 0 3px 26px}.basicContext__data .iconic{display:inline-block;margin:0 10px 0 1px;width:11px;height:10px;fill:#fff}.basicContext__data .iconic.active{fill:#f90}.basicContext__data .iconic.ionicons{margin:0 8px -2px 0;width:14px;height:14px}.basicContext__data input#link{margin:-2px 0;padding:5px 7px 6px;width:100%;background:#333;color:#fff;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);border:1px solid rgba(0,0,0,.4);border-radius:3px;outline:0}.basicContext__item--noHover .basicContext__data{padding-right:12px}.basicContext__item--noHover:hover .basicContext__data{background:0 0!important}.basicModal .switch:last-child{padding-bottom:42px}.basicModal .hr{padding:0 30px 15px;width:100%}.basicModal .hr hr{border:none;border-top:1px solid rgba(0,0,0,.2)}.header{position:fixed;height:49px;width:100%;background:-webkit-gradient(linear,left top,left bottom,from(#222),to(#1a1a1a));background:-o-linear-gradient(top,#222,#1a1a1a);background:linear-gradient(to bottom,#222,#1a1a1a);border-bottom:1px solid #0f0f0f;z-index:1;-webkit-transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;-o-transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.header--hidden{-webkit-transform:translateY(-60px);-ms-transform:translateY(-60px);transform:translateY(-60px)}.header--loading{-webkit-transform:translateY(2px);-ms-transform:translateY(2px);transform:translateY(2px)}.header--error{-webkit-transform:translateY(40px);-ms-transform:translateY(40px);transform:translateY(40px)}.header--view{background:0 0;border-bottom:none}.header--view.header--error{background-color:rgba(10,10,10,.99)}.header__toolbar{display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;padding:0 10px}.header__toolbar--visible{display:-webkit-box;display:-ms-flexbox;display:flex}.header__title{width:100%;padding:16px 0;color:#fff;font-size:16px;font-weight:700;text-align:center;cursor:default;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis;-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s}.header__title .iconic{display:none;margin:0 0 0 5px;width:10px;height:10px;fill:rgba(255,255,255,.5);-webkit-transition:fill .2s ease-out;-o-transition:fill .2s ease-out;transition:fill .2s ease-out}.header__title:hover .iconic{fill:#fff}.header__title:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:rgba(255,255,255,.8)}.header__title--editable .iconic{display:inline-block}.header .button{-ms-flex-negative:0;flex-shrink:0;padding:16px 8px;height:15px}.header .button .iconic{width:15px;height:15px;fill:rgba(255,255,255,.5);-webkit-transition:fill .2s ease-out;-o-transition:fill .2s ease-out;transition:fill .2s ease-out}.header .button:hover .iconic{fill:#fff}.header .button:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:rgba(255,255,255,.8)}.header .button--star.active .iconic{fill:#f0ef77}.header .button--eye.active .iconic{fill:#d92c34}.header .button--eye.active--not-hidden .iconic{fill:#0a0}.header .button--eye.active--hidden .iconic{fill:#f90}.header .button--share .iconic.ionicons{margin:-2px 0;width:18px;height:18px}.header .button--nsfw.active .iconic{fill:#ff82ee}.header .button--info.active .iconic{fill:#2293ec}.header #button_settings,.header #button_signin{padding:16px 48px 16px 8px}.header__divider{-ms-flex-negative:0;flex-shrink:0;width:14px}.header__search{-ms-flex-negative:0;flex-shrink:0;width:80px;margin:0;padding:5px 12px 6px;background-color:#1d1d1d;color:#fff;border:1px solid rgba(0,0,0,.9);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.04);box-shadow:0 1px 0 rgba(255,255,255,.04);outline:0;border-radius:50px;opacity:.6;-webkit-transition:opacity .3s ease-out,width .2s ease-out,-webkit-box-shadow .3s ease-out;transition:opacity .3s ease-out,box-shadow .3s ease-out,width .2s ease-out,-webkit-box-shadow .3s ease-out;-o-transition:opacity .3s ease-out,box-shadow .3s ease-out,width .2s ease-out}.header__search:focus{width:140px;border-color:#2293ec;-webkit-box-shadow:0 1px 0 rgba(255,255,255,0);box-shadow:0 1px 0 rgba(255,255,255,0);opacity:1}.header__search:focus~.header__clear{opacity:1}.header__search::-ms-clear{display:none}.header__clear{position:absolute;right:90px;padding:0;color:rgba(255,255,255,.5);font-size:30px;opacity:0;-webkit-transition:color .2s ease-out;-o-transition:color .2s ease-out;transition:color .2s ease-out;cursor:default}.header__clear:hover{color:#fff}.header__clear_nomap{right:60px}.header__clear_public{right:17px}.header__hostedwith{-ms-flex-negative:0;flex-shrink:0;padding:5px 10px;margin:11px 0;color:#888;font-size:13px;border-radius:100px;cursor:default}.header__hostedwith:hover{background-color:rgba(0,0,0,.3)}.header .leftMenu__open{margin-left:250px}#imageview{position:fixed;display:none;top:0;left:0;width:100%;height:100%;background-color:rgba(10,10,10,.98);-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}#imageview.view{background-color:inherit}#imageview.full{background-color:#000;cursor:none}#imageview #image,#imageview #livephoto{position:absolute;top:60px;right:30px;bottom:30px;left:30px;margin:auto;max-width:calc(100% - 60px);max-height:calc(100% - 90px);width:auto;height:auto;-webkit-transition:top .3s,right .3s,bottom .3s,left .3s,max-width .3s,max-height .3s;-o-transition:top .3s,right .3s,bottom .3s,left .3s,max-width .3s,max-height .3s;transition:top .3s,right .3s,bottom .3s,left .3s,max-width .3s,max-height .3s;-webkit-animation-name:zoomIn;animation-name:zoomIn;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1.15);animation-timing-function:cubic-bezier(.51,.92,.24,1.15);background-size:contain;background-position:center;background-repeat:no-repeat}#imageview.full #image,#imageview.full #livephoto{top:0;right:0;bottom:0;left:0;max-width:100%;max-height:100%}#imageview.image--sidebar #image{right:380px;max-width:calc(100% - 410px)}@media (max-width:640px){#imageview #image,#imageview #livephoto{top:60px;right:20px;bottom:20px;left:20px;max-width:calc(100% - 40px);max-height:calc(100% - 80px)}#imageview.image--sidebar #image{right:370px;max-width:calc(100% - 390px)}}#imageview.image--sidebar #livephoto{right:380px;max-width:calc(100% - 410px)}#imageview #image_overlay{position:absolute;bottom:30px;left:30px;color:#fff;text-shadow:1px 1px 2px #000;z-index:3}#imageview #image_overlay h1{visibility:hidden;opacity:0;font-size:28px;font-weight:500;-webkit-transition:visibility .3s linear,opacity .3s linear;-o-transition:visibility .3s linear,opacity .3s linear;transition:visibility .3s linear,opacity .3s linear}#imageview #image_overlay p{margin-top:5px;font-size:20px;line-height:24px}#imageview #image_overlay a .iconic{fill:#fff;margin:0 5px 0 0;width:14px;height:14px}#imageview.full #image_overlay h1{visibility:visible;opacity:1}#imageview .arrow_wrapper{position:fixed;width:15%;height:calc(100% - 60px);top:60px}#imageview .arrow_wrapper--previous{left:0}#imageview .arrow_wrapper--next{right:0}@media (max-width:640px){#imageview.image--sidebar #livephoto{right:370px;max-width:calc(100% - 390px)}#imageview .arrow_wrapper{display:none}}#imageview .arrow_wrapper a{position:fixed;top:50%;margin:-19px 0 0;padding:8px 12px;width:16px;height:22px;background-size:100% 100%;border:1px solid rgba(255,255,255,.8);opacity:.6;z-index:2;-webkit-transition:opacity .2s ease-out,-webkit-transform .2s ease-out;transition:transform .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out;-o-transition:transform .2s ease-out,opacity .2s ease-out;will-change:transform}#imageview .arrow_wrapper a#previous{left:-1px;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}#imageview .arrow_wrapper a#next{right:-1px;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}#imageview .arrow_wrapper:hover a#next,#imageview .arrow_wrapper:hover a#previous{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}#imageview .arrow_wrapper a:hover{opacity:1}#imageview .arrow_wrapper .iconic{fill:rgba(255,255,255,.8)}#imageview.image--sidebar .arrow_wrapper--next{right:350px}#imageview.image--sidebar .arrow_wrapper a#next{right:349px}#imageview video{z-index:1}#mapview{position:fixed;display:none;top:0;left:0;width:100%;height:100%;background-color:rgba(100,10,10,.98);-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}#mapview.view{background-color:inherit}#mapview.full{background-color:#000;cursor:none}#mapview #leaflet_map_full{top:50px;height:100%;width:100%;float:left}.leaflet-marker-photo img{width:100%;height:100%}.image-leaflet-popup{width:100%}.leaflet-popup-content div{pointer-events:none;position:absolute;bottom:19px;left:22px;right:22px;padding-bottom:10px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.6)));background:-o-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.6));background:linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,.6))}.leaflet-popup-content h1{top:0;position:relative;margin:12px 0 5px 15px;font-size:16px;font-weight:700;text-shadow:0 1px 3px rgba(255,255,255,.4);color:#fff;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.leaflet-popup-content span{margin-left:12px}.leaflet-popup-content svg{fill:#fff;vertical-align:middle}.leaflet-popup-content p{display:inline;font-size:11px;color:#fff}.leaflet-popup-content .iconic{width:20px;height:15px}.sidebar{position:fixed;top:50px;right:-360px;width:350px;height:calc(100% - 50px);background-color:rgba(25,25,25,.98);border-left:1px solid rgba(0,0,0,.2);-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);-webkit-transition:-webkit-transform .3s cubic-bezier(.51,.92,.24,1);transition:transform .3s cubic-bezier(.51,.92,.24,1);-o-transition:transform .3s cubic-bezier(.51,.92,.24,1);transition:transform .3s cubic-bezier(.51,.92,.24,1),-webkit-transform .3s cubic-bezier(.51,.92,.24,1);z-index:4}.sidebar.active{-webkit-transform:translateX(-360px);-ms-transform:translateX(-360px);transform:translateX(-360px)}.sidebar__header{float:left;height:49px;width:100%;background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,.02)),to(rgba(0,0,0,0)));background:-o-linear-gradient(top,rgba(255,255,255,.02),rgba(0,0,0,0));background:linear-gradient(to bottom,rgba(255,255,255,.02),rgba(0,0,0,0));border-top:1px solid #2293ec}.sidebar__header h1{position:absolute;margin:15px 0;width:100%;color:#fff;font-size:16px;font-weight:700;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar__wrapper{float:left;height:calc(100% - 49px);width:350px;overflow:auto;-webkit-overflow-scrolling:touch}.sidebar__divider{float:left;padding:12px 0 8px;width:100%;border-top:1px solid rgba(255,255,255,.02);-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.2);box-shadow:0 -1px 0 rgba(0,0,0,.2)}.sidebar__divider:first-child{border-top:0;-webkit-box-shadow:none;box-shadow:none}.sidebar__divider h1{margin:0 0 0 20px;color:rgba(255,255,255,.6);font-size:14px;font-weight:700;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar .edit{display:inline-block;margin-left:3px;width:10px}.sidebar .edit .iconic{width:10px;height:10px;fill:rgba(255,255,255,.5);-webkit-transition:fill .2s ease-out;-o-transition:fill .2s ease-out;transition:fill .2s ease-out}.sidebar .edit:hover .iconic{fill:#fff}.sidebar .edit:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:rgba(255,255,255,.8)}.sidebar table{float:left;margin:10px 0 15px 20px;width:calc(100% - 20px)}.sidebar table tr td{padding:5px 0;color:#fff;font-size:14px;line-height:19px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar table tr td:first-child{width:110px}.sidebar table tr td:last-child{padding-right:10px}.sidebar table tr td span{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar #tags{width:calc(100% - 40px);margin:16px 20px 12px;color:#fff;display:inline-block}.sidebar #tags>div{display:inline-block}.sidebar #tags .empty{font-size:14px;margin:0 2px 8px 0;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar #tags .edit{margin-top:6px}.sidebar #tags .empty .edit{margin-top:0}.sidebar #tags .tag{cursor:default;display:inline-block;padding:6px 10px;margin:0 6px 8px 0;background-color:rgba(0,0,0,.5);border-radius:100px;font-size:12px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar #tags .tag:hover{background-color:rgba(0,0,0,.3)}.sidebar #tags .tag:hover.search{cursor:pointer}.sidebar #tags .tag span{float:right;padding:0;margin:0 0 -2px;width:0;overflow:hidden;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:width .2s,margin .2s,fill .2s ease-out,-webkit-transform .2s;transition:width .2s,margin .2s,transform .2s,fill .2s ease-out,-webkit-transform .2s;-o-transition:width .2s,margin .2s,transform .2s,fill .2s ease-out}.sidebar #tags .tag span .iconic{fill:#d92c34;width:8px;height:8px}.sidebar #tags .tag span:hover .iconic{fill:#e1575e}.sidebar #tags .tag span:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:#b22027}.sidebar #tags .tag:hover span{width:9px;margin:0 0 -2px 5px;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.sidebar #leaflet_map_single_photo{margin:10px 0 0 20px;height:180px;width:calc(100% - 40px);float:left}.sidebar .attr_location.search{cursor:pointer}#loading{display:none;position:fixed;width:100%;height:3px;background-size:100px 3px;background-repeat:repeat-x;border-bottom:1px solid rgba(0,0,0,.3);-webkit-animation-name:moveBackground;animation-name:moveBackground;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}#loading.loading{height:3px;background-image:-webkit-gradient(linear,left top,right top,from(#153674),color-stop(47%,#153674),color-stop(53%,#2651ae),to(#2651ae));background-image:-o-linear-gradient(left,#153674 0,#153674 47%,#2651ae 53%,#2651ae 100%);background-image:linear-gradient(to right,#153674 0,#153674 47%,#2651ae 53%,#2651ae 100%);z-index:2}#loading.error{height:40px;background-color:#2f0d0e;background-image:-webkit-gradient(linear,left top,right top,from(#451317),color-stop(47%,#451317),color-stop(53%,#aa3039),to(#aa3039));background-image:-o-linear-gradient(left,#451317 0,#451317 47%,#aa3039 53%,#aa3039 100%);background-image:linear-gradient(to right,#451317 0,#451317 47%,#aa3039 53%,#aa3039 100%);z-index:1}#loading.success{height:40px;background-color:#070;background-image:-webkit-gradient(linear,left top,right top,from(#070),color-stop(47%,#090),color-stop(53%,#0a0),to(#0c0));background-image:-o-linear-gradient(left,#070 0,#090 47%,#0a0 53%,#0c0 100%);background-image:linear-gradient(to right,#070 0,#090 47%,#0a0 53%,#0c0 100%);z-index:1}#loading .leftMenu__open{padding-left:250px}#loading h1{margin:13px 13px 0;color:#ddd;font-size:14px;font-weight:700;text-shadow:0 1px 0 #000;text-transform:capitalize}#loading h1 span{margin-left:10px;font-weight:400;text-transform:none}.basicModalContainer{background-color:rgba(0,0,0,.85)}.basicModalContainer--error{-webkit-transform:translateY(40px);-ms-transform:translateY(40px);transform:translateY(40px)}.basicModal{background:-webkit-gradient(linear,left top,left bottom,from(#444),to(#333));background:-o-linear-gradient(top,#444,#333);background:linear-gradient(to bottom,#444,#333);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05)}.basicModal--error{-webkit-transform:translateY(-40px);-ms-transform:translateY(-40px);transform:translateY(-40px)}.basicModal__content{padding:0}.basicModal__content p{margin:0}.basicModal__buttons{-webkit-box-shadow:none;box-shadow:none}.basicModal p{padding:10px 30px;color:rgba(255,255,255,.9);font-size:14px;text-align:left;line-height:20px}.basicModal p b{font-weight:700;color:#fff}.basicModal p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.basicModal p:first-of-type{padding-top:42px}.basicModal p:last-of-type{padding-bottom:40px}.basicModal p.signIn:first-of-type{padding-top:30px}.basicModal p.less,.basicModal p.signIn:last-of-type{padding-bottom:30px}.basicModal p.photoPublic{padding:0 30px;margin:30px 0}.basicModal p.importServer:last-of-type{padding-bottom:0}.basicModal__button{padding:13px 0 15px;background:rgba(0,0,0,.02);color:rgba(255,255,255,.5);border-top:1px solid rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02);box-shadow:inset 0 1px 0 rgba(255,255,255,.02);cursor:default}.basicModal__button:hover{background:rgba(255,255,255,.02)}.basicModal__button--active,.basicModal__button:active{-webkit-transition:none;-o-transition:none;transition:none;background:rgba(0,0,0,.1)}.basicModal__button#basicModal__action{color:#2293ec;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2)}.basicModal__button#basicModal__action.red{color:#d92c34}.basicModal__button.hidden{display:none}.basicModal input.text{padding:9px 2px;width:100%;background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0}.basicModal input.text:focus{border-bottom-color:#2293ec}.basicModal input.text.error{border-bottom-color:#d92c34}.basicModal input.text:first-child{margin-top:10px}.basicModal input.text:last-child{margin-bottom:10px}.basicModal .choice{padding:0 30px 15px;width:100%;color:#fff}.basicModal .choice:first-child{padding-top:42px}.basicModal .choice:last-child{padding-bottom:40px}.basicModal .choice label{float:left;color:#fff;font-size:14px;font-weight:700}.basicModal .choice label input{position:absolute;margin:0;opacity:0}.basicModal .choice label .checkbox{float:left;display:block;width:16px;height:16px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.basicModal .choice label .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.basicModal .choice label input:checked~.checkbox{background:rgba(0,0,0,.5)}.basicModal .choice label input:checked~.checkbox .iconic{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.basicModal .choice label input:active~.checkbox{background:rgba(0,0,0,.3)}.basicModal .choice label input:active~.checkbox .iconic{opacity:.8}.basicModal .choice label input:disabled~.checkbox{background:rgba(0,0,0,.2);cursor:not-allowed}.basicModal .choice label input:disabled~.checkbox .iconic{opacity:.3}.basicModal .choice label input:disabled~.label{color:rgba(255,255,255,.6)}.basicModal .choice label .label{margin:0 0 0 18px}.basicModal .choice p{clear:both;padding:2px 0 0 35px;margin:0;width:100%;color:rgba(255,255,255,.6);font-size:13px}.basicModal .choice input.text{display:none;margin-top:5px;margin-left:35px;width:calc(100% - 35px)}.basicModal .choice input.text:disabled{cursor:not-allowed}.basicModal .select{display:inline-block;position:relative;margin:5px 7px;padding:0;width:210px;background:rgba(0,0,0,.3);color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle}.basicModal .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.basicModal .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background-color:transparent;background-image:none;-moz-appearance:none;-webkit-appearance:none;appearance:none}.basicModal .select select:focus{outline:0}.basicModal .select select option{background:#333!important;color:#fff!important;margin:0;padding:0;-webkit-transition:none;-o-transition:none;transition:none}.basicModal .version{margin:-5px 0 0;padding:0 30px 30px!important;color:rgba(255,255,255,.3);font-size:12px;text-align:right}.basicModal .version span{display:none}.basicModal .version span a{color:rgba(255,255,255,.3)}.basicModal div.version{position:absolute;top:20px;right:0}.basicModal h1{float:left;width:100%;padding:12px 0;color:#fff;font-size:16px;font-weight:700;text-align:center}.basicModal .rows{margin:0 8px 8px;width:calc(100% - 16px);height:300px;background-color:rgba(0,0,0,.4);overflow:hidden;overflow-y:auto;border-radius:3px;-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,.4);box-shadow:inset 0 0 3px rgba(0,0,0,.4)}.basicModal .rows .row{float:left;padding:8px 0;width:100%;background-color:rgba(255,255,255,.02)}.basicModal .rows .row:nth-child(2n){background-color:rgba(255,255,255,0)}.basicModal .rows .row a.name{float:left;padding:5px 10px;width:70%;color:#fff;font-size:14px;white-space:nowrap;overflow:hidden}.basicModal .rows .row a.status{float:left;padding:5px 10px;width:30%;color:rgba(255,255,255,.5);font-size:14px;text-align:right;-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.basicModal .rows .row a.status.error,.basicModal .rows .row a.status.success,.basicModal .rows .row a.status.warning{-webkit-animation:none;animation:none}.basicModal .rows .row a.status.error{color:#e92a00}.basicModal .rows .row a.status.warning{color:#e4e900}.basicModal .rows .row a.status.success{color:#7ee900}.basicModal .rows .row p.notice{display:none;float:left;padding:2px 10px 5px;width:100%;color:rgba(255,255,255,.5);font-size:12px;overflow:hidden;line-height:16px}.basicModal .switch{padding:0 30px;margin-bottom:15px;width:100%;color:#fff}.basicModal .switch:first-child{padding-top:42px}.basicModal .switch input{opacity:0;width:0;height:0;margin:0}.basicModal .switch label{float:left;color:#fff;font-size:14px;font-weight:700}.basicModal .switch .slider{display:inline-block;width:42px;height:22px;left:-9px;bottom:-6px;position:relative;cursor:pointer;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);background:rgba(0,0,0,.3);-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.basicModal .switch .slider:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:3px;background-color:#2293ec;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.basicModal .switch input:checked+.slider{background-color:#2293ec}.basicModal .switch input:checked+.slider:before{-ms-transform:translateX(20px);-webkit-transform:translateX(20px);transform:translateX(20px);background-color:#fff}.basicModal .switch .slider.round{border-radius:20px}.basicModal .switch .slider.round:before{border-radius:50%}.basicModal .switch label input:disabled~.slider{background:rgba(0,0,0,.2);cursor:not-allowed}.basicModal .switch label input:disabled~.slider .iconic{opacity:.3}.basicModal .switch .label--disabled{color:rgba(255,255,255,.6)}.basicModal .switch p{clear:both;padding:2px 0 0;margin:0;width:100%;color:rgba(255,255,255,.6);font-size:13px}#sensitive_warning{background:rgba(100,0,0,.95);width:100vw;height:100vh;position:fixed;top:0;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff}#sensitive_warning h1{font-size:36px;font-weight:700;border-bottom:2px solid #fff;margin-bottom:15px}#sensitive_warning p{font-size:20px;max-width:40%;margin-top:15px}.settings_view{width:80%;max-width:600px;margin-left:auto;margin-right:auto}.setCSS,.setDefaultLicense,.setDropBox,.setLang,.setLayout,.setLocationDecoding,.setLocationDecodingCachingType,.setLocationShow,.setLocationShowPublic,.setLogin,.setMapDisplay,.setMapDisplayPublic,.setMapIncludeSubalbums,.setMapProvider,.setNSFWVisible,.setOverlay,.setOverlayType,.setPublicSearch,.setSorting{font-size:14px;width:100%;padding:5%}.setCSS p,.setDefaultLicense p,.setDropBox p,.setLang p,.setLayout p,.setLocationDecoding p,.setLocationDecodingCachingType p,.setLocationShow p,.setLocationShowPublic p,.setLogin p,.setMapDisplay p,.setMapDisplayPublic p,.setMapIncludeSubalbums p,.setMapProvider p,.setNSFWVisible p,.setOverlay p,.setOverlayType p,.setPublicSearch p,.setSorting p{margin:0 0 5%;width:100%;color:#ccc;line-height:16px}.setCSS p a,.setDefaultLicense p a,.setDropBox p a,.setLang p a,.setLayout p a,.setLocationDecoding p a,.setLocationDecodingCachingType p a,.setLocationShow p a,.setLocationShowPublic p a,.setLogin p a,.setMapDisplay p a,.setMapDisplayPublic p a,.setMapIncludeSubalbums p a,.setMapProvider p a,.setNSFWVisible p a,.setOverlay p a,.setOverlayType p a,.setPublicSearch p a,.setSorting p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.setCSS p:last-of-type,.setDefaultLicense p:last-of-type,.setDropBox p:last-of-type,.setLang p:last-of-type,.setLayout p:last-of-type,.setLocationDecoding p:last-of-type,.setLocationDecodingCachingType p:last-of-type,.setLocationShow p:last-of-type,.setLocationShowPublic p:last-of-type,.setLogin p:last-of-type,.setMapDisplay p:last-of-type,.setMapDisplayPublic p:last-of-type,.setMapIncludeSubalbums p:last-of-type,.setMapProvider p:last-of-type,.setNSFWVisible p:last-of-type,.setOverlay p:last-of-type,.setOverlayType p:last-of-type,.setPublicSearch p:last-of-type,.setSorting p:last-of-type{margin:0}.setCSS input.text,.setDefaultLicense input.text,.setDropBox input.text,.setLang input.text,.setLayout input.text,.setLocationDecoding input.text,.setLocationDecodingCachingType input.text,.setLocationShow input.text,.setLocationShowPublic input.text,.setLogin input.text,.setMapDisplay input.text,.setMapDisplayPublic input.text,.setMapIncludeSubalbums input.text,.setMapProvider input.text,.setNSFWVisible input.text,.setOverlay input.text,.setOverlayType input.text,.setPublicSearch input.text,.setSorting input.text{padding:9px 2px;width:100%;background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0}.setCSS input.text:focus,.setDefaultLicense input.text:focus,.setDropBox input.text:focus,.setLang input.text:focus,.setLayout input.text:focus,.setLocationDecoding input.text:focus,.setLocationDecodingCachingType input.text:focus,.setLocationShow input.text:focus,.setLocationShowPublic input.text:focus,.setLogin input.text:focus,.setMapDisplay input.text:focus,.setMapDisplayPublic input.text:focus,.setMapIncludeSubalbums input.text:focus,.setMapProvider input.text:focus,.setNSFWVisible input.text:focus,.setOverlay input.text:focus,.setOverlayType input.text:focus,.setPublicSearch input.text:focus,.setSorting input.text:focus{border-bottom-color:#2293ec}.setCSS input.text.error,.setDefaultLicense input.text.error,.setDropBox input.text.error,.setLang input.text.error,.setLayout input.text.error,.setLocationDecoding input.text.error,.setLocationDecodingCachingType input.text.error,.setLocationShow input.text.error,.setLocationShowPublic input.text.error,.setLogin input.text.error,.setMapDisplay input.text.error,.setMapDisplayPublic input.text.error,.setMapIncludeSubalbums input.text.error,.setMapProvider input.text.error,.setNSFWVisible input.text.error,.setOverlay input.text.error,.setOverlayType input.text.error,.setPublicSearch input.text.error,.setSorting input.text.error{border-bottom-color:#d92c34}.setCSS input.text:first-child,.setDefaultLicense input.text:first-child,.setDropBox input.text:first-child,.setLang input.text:first-child,.setLayout input.text:first-child,.setLocationDecoding input.text:first-child,.setLocationDecodingCachingType input.text:first-child,.setLocationShow input.text:first-child,.setLocationShowPublic input.text:first-child,.setLogin input.text:first-child,.setMapDisplay input.text:first-child,.setMapDisplayPublic input.text:first-child,.setMapIncludeSubalbums input.text:first-child,.setMapProvider input.text:first-child,.setNSFWVisible input.text:first-child,.setOverlay input.text:first-child,.setOverlayType input.text:first-child,.setPublicSearch input.text:first-child,.setSorting input.text:first-child{margin-top:10px}.setCSS input.text:last-child,.setDefaultLicense input.text:last-child,.setDropBox input.text:last-child,.setLang input.text:last-child,.setLayout input.text:last-child,.setLocationDecoding input.text:last-child,.setLocationDecodingCachingType input.text:last-child,.setLocationShow input.text:last-child,.setLocationShowPublic input.text:last-child,.setLogin input.text:last-child,.setMapDisplay input.text:last-child,.setMapDisplayPublic input.text:last-child,.setMapIncludeSubalbums input.text:last-child,.setMapProvider input.text:last-child,.setNSFWVisible input.text:last-child,.setOverlay input.text:last-child,.setOverlayType input.text:last-child,.setPublicSearch input.text:last-child,.setSorting input.text:last-child{margin-bottom:10px}.setCSS textarea,.setDefaultLicense textarea,.setDropBox textarea,.setLang textarea,.setLayout textarea,.setLocationDecoding textarea,.setLocationDecodingCachingType textarea,.setLocationShow textarea,.setLocationShowPublic textarea,.setLogin textarea,.setMapDisplay textarea,.setMapDisplayPublic textarea,.setMapIncludeSubalbums textarea,.setMapProvider textarea,.setNSFWVisible textarea,.setOverlay textarea,.setOverlayType textarea,.setPublicSearch textarea,.setSorting textarea{padding:9px;width:calc(100% - 18px);height:100px;background-color:transparent;color:#fff;border:1px solid #666;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0;resize:vertical}.setCSS textarea:focus,.setDefaultLicense textarea:focus,.setDropBox textarea:focus,.setLang textarea:focus,.setLayout textarea:focus,.setLocationDecoding textarea:focus,.setLocationDecodingCachingType textarea:focus,.setLocationShow textarea:focus,.setLocationShowPublic textarea:focus,.setLogin textarea:focus,.setMapDisplay textarea:focus,.setMapDisplayPublic textarea:focus,.setMapIncludeSubalbums textarea:focus,.setMapProvider textarea:focus,.setNSFWVisible textarea:focus,.setOverlay textarea:focus,.setOverlayType textarea:focus,.setPublicSearch textarea:focus,.setSorting textarea:focus{border-color:#2293ec}.setCSS .choice,.setDefaultLicense .choice,.setDropBox .choice,.setLang .choice,.setLayout .choice,.setLocationDecoding .choice,.setLocationDecodingCachingType .choice,.setLocationShow .choice,.setLocationShowPublic .choice,.setLogin .choice,.setMapDisplay .choice,.setMapDisplayPublic .choice,.setMapIncludeSubalbums .choice,.setMapProvider .choice,.setNSFWVisible .choice,.setOverlay .choice,.setOverlayType .choice,.setPublicSearch .choice,.setSorting .choice{padding:0 30px 15px;width:100%;color:#fff}.setCSS .choice:last-child,.setDefaultLicense .choice:last-child,.setDropBox .choice:last-child,.setLang .choice:last-child,.setLayout .choice:last-child,.setLocationDecoding .choice:last-child,.setLocationDecodingCachingType .choice:last-child,.setLocationShow .choice:last-child,.setLocationShowPublic .choice:last-child,.setLogin .choice:last-child,.setMapDisplay .choice:last-child,.setMapDisplayPublic .choice:last-child,.setMapIncludeSubalbums .choice:last-child,.setMapProvider .choice:last-child,.setNSFWVisible .choice:last-child,.setOverlay .choice:last-child,.setOverlayType .choice:last-child,.setPublicSearch .choice:last-child,.setSorting .choice:last-child{padding-bottom:40px}.setCSS .choice label,.setDefaultLicense .choice label,.setDropBox .choice label,.setLang .choice label,.setLayout .choice label,.setLocationDecoding .choice label,.setLocationDecodingCachingType .choice label,.setLocationShow .choice label,.setLocationShowPublic .choice label,.setLogin .choice label,.setMapDisplay .choice label,.setMapDisplayPublic .choice label,.setMapIncludeSubalbums .choice label,.setMapProvider .choice label,.setNSFWVisible .choice label,.setOverlay .choice label,.setOverlayType .choice label,.setPublicSearch .choice label,.setSorting .choice label{float:left;color:#fff;font-size:14px;font-weight:700}.setCSS .choice label input,.setDefaultLicense .choice label input,.setDropBox .choice label input,.setLang .choice label input,.setLayout .choice label input,.setLocationDecoding .choice label input,.setLocationDecodingCachingType .choice label input,.setLocationShow .choice label input,.setLocationShowPublic .choice label input,.setLogin .choice label input,.setMapDisplay .choice label input,.setMapDisplayPublic .choice label input,.setMapIncludeSubalbums .choice label input,.setMapProvider .choice label input,.setNSFWVisible .choice label input,.setOverlay .choice label input,.setOverlayType .choice label input,.setPublicSearch .choice label input,.setSorting .choice label input{position:absolute;margin:0;opacity:0}.setCSS .choice label .checkbox,.setDefaultLicense .choice label .checkbox,.setDropBox .choice label .checkbox,.setLang .choice label .checkbox,.setLayout .choice label .checkbox,.setLocationDecoding .choice label .checkbox,.setLocationDecodingCachingType .choice label .checkbox,.setLocationShow .choice label .checkbox,.setLocationShowPublic .choice label .checkbox,.setLogin .choice label .checkbox,.setMapDisplay .choice label .checkbox,.setMapDisplayPublic .choice label .checkbox,.setMapIncludeSubalbums .choice label .checkbox,.setMapProvider .choice label .checkbox,.setNSFWVisible .choice label .checkbox,.setOverlay .choice label .checkbox,.setOverlayType .choice label .checkbox,.setPublicSearch .choice label .checkbox,.setSorting .choice label .checkbox{float:left;display:block;width:16px;height:16px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.setCSS .choice label .checkbox .iconic,.setDefaultLicense .choice label .checkbox .iconic,.setDropBox .choice label .checkbox .iconic,.setLang .choice label .checkbox .iconic,.setLayout .choice label .checkbox .iconic,.setLocationDecoding .choice label .checkbox .iconic,.setLocationDecodingCachingType .choice label .checkbox .iconic,.setLocationShow .choice label .checkbox .iconic,.setLocationShowPublic .choice label .checkbox .iconic,.setLogin .choice label .checkbox .iconic,.setMapDisplay .choice label .checkbox .iconic,.setMapDisplayPublic .choice label .checkbox .iconic,.setMapIncludeSubalbums .choice label .checkbox .iconic,.setMapProvider .choice label .checkbox .iconic,.setNSFWVisible .choice label .checkbox .iconic,.setOverlay .choice label .checkbox .iconic,.setOverlayType .choice label .checkbox .iconic,.setPublicSearch .choice label .checkbox .iconic,.setSorting .choice label .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.setCSS .basicModal__button,.setDefaultLicense .basicModal__button,.setDropBox .basicModal__button,.setLang .basicModal__button,.setLayout .basicModal__button,.setLocationDecoding .basicModal__button,.setLocationDecodingCachingType .basicModal__button,.setLocationShow .basicModal__button,.setLocationShowPublic .basicModal__button,.setLogin .basicModal__button,.setMapDisplay .basicModal__button,.setMapDisplayPublic .basicModal__button,.setMapIncludeSubalbums .basicModal__button,.setMapProvider .basicModal__button,.setNSFWVisible .basicModal__button,.setOverlay .basicModal__button,.setOverlayType .basicModal__button,.setPublicSearch .basicModal__button,.setSorting .basicModal__button{color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px}.setCSS .basicModal__button:hover,.setDefaultLicense .basicModal__button:hover,.setDropBox .basicModal__button:hover,.setLang .basicModal__button:hover,.setLayout .basicModal__button:hover,.setLocationDecoding .basicModal__button:hover,.setLocationDecodingCachingType .basicModal__button:hover,.setLocationShow .basicModal__button:hover,.setLocationShowPublic .basicModal__button:hover,.setLogin .basicModal__button:hover,.setMapDisplay .basicModal__button:hover,.setMapDisplayPublic .basicModal__button:hover,.setMapIncludeSubalbums .basicModal__button:hover,.setMapProvider .basicModal__button:hover,.setNSFWVisible .basicModal__button:hover,.setOverlay .basicModal__button:hover,.setOverlayType .basicModal__button:hover,.setPublicSearch .basicModal__button:hover,.setSorting .basicModal__button:hover{background:#2293ec;color:#fff;cursor:pointer}.setCSS .basicModal__button_MORE,.setDefaultLicense .basicModal__button_MORE,.setDropBox .basicModal__button_MORE,.setLang .basicModal__button_MORE,.setLayout .basicModal__button_MORE,.setLocationDecoding .basicModal__button_MORE,.setLocationDecodingCachingType .basicModal__button_MORE,.setLocationShow .basicModal__button_MORE,.setLocationShowPublic .basicModal__button_MORE,.setLogin .basicModal__button_MORE,.setMapDisplay .basicModal__button_MORE,.setMapDisplayPublic .basicModal__button_MORE,.setMapIncludeSubalbums .basicModal__button_MORE,.setMapProvider .basicModal__button_MORE,.setNSFWVisible .basicModal__button_MORE,.setOverlay .basicModal__button_MORE,.setOverlayType .basicModal__button_MORE,.setPublicSearch .basicModal__button_MORE,.setSorting .basicModal__button_MORE{color:#b22027;border-radius:5px}.setCSS .basicModal__button_MORE:hover,.setDefaultLicense .basicModal__button_MORE:hover,.setDropBox .basicModal__button_MORE:hover,.setLang .basicModal__button_MORE:hover,.setLayout .basicModal__button_MORE:hover,.setLocationDecoding .basicModal__button_MORE:hover,.setLocationDecodingCachingType .basicModal__button_MORE:hover,.setLocationShow .basicModal__button_MORE:hover,.setLocationShowPublic .basicModal__button_MORE:hover,.setLogin .basicModal__button_MORE:hover,.setMapDisplay .basicModal__button_MORE:hover,.setMapDisplayPublic .basicModal__button_MORE:hover,.setMapIncludeSubalbums .basicModal__button_MORE:hover,.setMapProvider .basicModal__button_MORE:hover,.setNSFWVisible .basicModal__button_MORE:hover,.setOverlay .basicModal__button_MORE:hover,.setOverlayType .basicModal__button_MORE:hover,.setPublicSearch .basicModal__button_MORE:hover,.setSorting .basicModal__button_MORE:hover{background:#b22027;color:#fff}.setCSS input:hover,.setDefaultLicense input:hover,.setDropBox input:hover,.setLang input:hover,.setLayout input:hover,.setLocationDecoding input:hover,.setLocationDecodingCachingType input:hover,.setLocationShow input:hover,.setLocationShowPublic input:hover,.setLogin input:hover,.setMapDisplay input:hover,.setMapDisplayPublic input:hover,.setMapIncludeSubalbums input:hover,.setMapProvider input:hover,.setNSFWVisible input:hover,.setOverlay input:hover,.setOverlayType input:hover,.setPublicSearch input:hover,.setSorting input:hover{border-bottom:1px solid #2293ec}.setCSS .select,.setDefaultLicense .select,.setDropBox .select,.setLang .select,.setLayout .select,.setLocationDecoding .select,.setLocationDecodingCachingType .select,.setLocationShow .select,.setLocationShowPublic .select,.setLogin .select,.setMapDisplay .select,.setMapDisplayPublic .select,.setMapIncludeSubalbums .select,.setMapProvider .select,.setNSFWVisible .select,.setOverlay .select,.setOverlayType .select,.setPublicSearch .select,.setSorting .select{position:relative;margin:1px 5px;padding:0;width:110px;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.setCSS .select select,.setDefaultLicense .select select,.setDropBox .select select,.setLang .select select,.setLayout .select select,.setLocationDecoding .select select,.setLocationDecodingCachingType .select select,.setLocationShow .select select,.setLocationShowPublic .select select,.setLogin .select select,.setMapDisplay .select select,.setMapDisplayPublic .select select,.setMapIncludeSubalbums .select select,.setMapProvider .select select,.setNSFWVisible .select select,.setOverlay .select select,.setOverlayType .select select,.setPublicSearch .select select,.setSorting .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background-color:transparent;background-image:none;-moz-appearance:none;-webkit-appearance:none;appearance:none}.setCSS .select select option,.setDefaultLicense .select select option,.setDropBox .select select option,.setLang .select select option,.setLayout .select select option,.setLocationDecoding .select select option,.setLocationDecodingCachingType .select select option,.setLocationShow .select select option,.setLocationShowPublic .select select option,.setLogin .select select option,.setMapDisplay .select select option,.setMapDisplayPublic .select select option,.setMapIncludeSubalbums .select select option,.setMapProvider .select select option,.setNSFWVisible .select select option,.setOverlay .select select option,.setOverlayType .select select option,.setPublicSearch .select select option,.setSorting .select select option{margin:0;padding:0;background:#fff;color:#333;-webkit-transition:none;-o-transition:none;transition:none}.setCSS .select select:disabled,.setDefaultLicense .select select:disabled,.setDropBox .select select:disabled,.setLang .select select:disabled,.setLayout .select select:disabled,.setLocationDecoding .select select:disabled,.setLocationDecodingCachingType .select select:disabled,.setLocationShow .select select:disabled,.setLocationShowPublic .select select:disabled,.setLogin .select select:disabled,.setMapDisplay .select select:disabled,.setMapDisplayPublic .select select:disabled,.setMapIncludeSubalbums .select select:disabled,.setMapProvider .select select:disabled,.setNSFWVisible .select select:disabled,.setOverlay .select select:disabled,.setOverlayType .select select:disabled,.setPublicSearch .select select:disabled,.setSorting .select select:disabled{color:#000;cursor:not-allowed}.setCSS .select::after,.setDefaultLicense .select::after,.setDropBox .select::after,.setLang .select::after,.setLayout .select::after,.setLocationDecoding .select::after,.setLocationDecodingCachingType .select::after,.setLocationShow .select::after,.setLocationShowPublic .select::after,.setLogin .select::after,.setMapDisplay .select::after,.setMapDisplayPublic .select::after,.setMapIncludeSubalbums .select::after,.setMapProvider .select::after,.setNSFWVisible .select::after,.setOverlay .select::after,.setOverlayType .select::after,.setPublicSearch .select::after,.setSorting .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.setCSS .switch,.setDefaultLicense .switch,.setDropBox .switch,.setLang .switch,.setLayout .switch,.setLocationDecoding .switch,.setLocationDecodingCachingType .switch,.setLocationShow .switch,.setLocationShowPublic .switch,.setLogin .switch,.setMapDisplay .switch,.setMapDisplayPublic .switch,.setMapIncludeSubalbums .switch,.setMapProvider .switch,.setNSFWVisible .switch,.setOverlay .switch,.setOverlayType .switch,.setPublicSearch .switch,.setSorting .switch{position:relative;display:inline-block;width:42px;height:22px;bottom:4px}.setCSS .switch input,.setDefaultLicense .switch input,.setDropBox .switch input,.setLang .switch input,.setLayout .switch input,.setLocationDecoding .switch input,.setLocationDecodingCachingType .switch input,.setLocationShow .switch input,.setLocationShowPublic .switch input,.setLogin .switch input,.setMapDisplay .switch input,.setMapDisplayPublic .switch input,.setMapIncludeSubalbums .switch input,.setMapProvider .switch input,.setNSFWVisible .switch input,.setOverlay .switch input,.setOverlayType .switch input,.setPublicSearch .switch input,.setSorting .switch input{opacity:0;width:0;height:0}.setCSS .slider,.setDefaultLicense .slider,.setDropBox .slider,.setLang .slider,.setLayout .slider,.setLocationDecoding .slider,.setLocationDecodingCachingType .slider,.setLocationShow .slider,.setLocationShowPublic .slider,.setLogin .slider,.setMapDisplay .slider,.setMapDisplayPublic .slider,.setMapIncludeSubalbums .slider,.setMapProvider .slider,.setNSFWVisible .slider,.setOverlay .slider,.setOverlayType .slider,.setPublicSearch .slider,.setSorting .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);background:rgba(0,0,0,.3);-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.setCSS .slider:before,.setDefaultLicense .slider:before,.setDropBox .slider:before,.setLang .slider:before,.setLayout .slider:before,.setLocationDecoding .slider:before,.setLocationDecodingCachingType .slider:before,.setLocationShow .slider:before,.setLocationShowPublic .slider:before,.setLogin .slider:before,.setMapDisplay .slider:before,.setMapDisplayPublic .slider:before,.setMapIncludeSubalbums .slider:before,.setMapProvider .slider:before,.setNSFWVisible .slider:before,.setOverlay .slider:before,.setOverlayType .slider:before,.setPublicSearch .slider:before,.setSorting .slider:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:3px;background-color:#2293ec;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.setCSS input:checked+.slider,.setDefaultLicense input:checked+.slider,.setDropBox input:checked+.slider,.setLang input:checked+.slider,.setLayout input:checked+.slider,.setLocationDecoding input:checked+.slider,.setLocationDecodingCachingType input:checked+.slider,.setLocationShow input:checked+.slider,.setLocationShowPublic input:checked+.slider,.setLogin input:checked+.slider,.setMapDisplay input:checked+.slider,.setMapDisplayPublic input:checked+.slider,.setMapIncludeSubalbums input:checked+.slider,.setMapProvider input:checked+.slider,.setNSFWVisible input:checked+.slider,.setOverlay input:checked+.slider,.setOverlayType input:checked+.slider,.setPublicSearch input:checked+.slider,.setSorting input:checked+.slider{background-color:#2293ec}.setCSS input:checked+.slider:before,.setDefaultLicense input:checked+.slider:before,.setDropBox input:checked+.slider:before,.setLang input:checked+.slider:before,.setLayout input:checked+.slider:before,.setLocationDecoding input:checked+.slider:before,.setLocationDecodingCachingType input:checked+.slider:before,.setLocationShow input:checked+.slider:before,.setLocationShowPublic input:checked+.slider:before,.setLogin input:checked+.slider:before,.setMapDisplay input:checked+.slider:before,.setMapDisplayPublic input:checked+.slider:before,.setMapIncludeSubalbums input:checked+.slider:before,.setMapProvider input:checked+.slider:before,.setNSFWVisible input:checked+.slider:before,.setOverlay input:checked+.slider:before,.setOverlayType input:checked+.slider:before,.setPublicSearch input:checked+.slider:before,.setSorting input:checked+.slider:before{-ms-transform:translateX(20px);-webkit-transform:translateX(20px);transform:translateX(20px);background-color:#fff}.setCSS .slider.round,.setDefaultLicense .slider.round,.setDropBox .slider.round,.setLang .slider.round,.setLayout .slider.round,.setLocationDecoding .slider.round,.setLocationDecodingCachingType .slider.round,.setLocationShow .slider.round,.setLocationShowPublic .slider.round,.setLogin .slider.round,.setMapDisplay .slider.round,.setMapDisplayPublic .slider.round,.setMapIncludeSubalbums .slider.round,.setMapProvider .slider.round,.setNSFWVisible .slider.round,.setOverlay .slider.round,.setOverlayType .slider.round,.setPublicSearch .slider.round,.setSorting .slider.round{border-radius:20px}.setCSS .slider.round:before,.setDefaultLicense .slider.round:before,.setDropBox .slider.round:before,.setLang .slider.round:before,.setLayout .slider.round:before,.setLocationDecoding .slider.round:before,.setLocationDecodingCachingType .slider.round:before,.setLocationShow .slider.round:before,.setLocationShowPublic .slider.round:before,.setLogin .slider.round:before,.setMapDisplay .slider.round:before,.setMapDisplayPublic .slider.round:before,.setMapIncludeSubalbums .slider.round:before,.setMapProvider .slider.round:before,.setNSFWVisible .slider.round:before,.setOverlay .slider.round:before,.setOverlayType .slider.round:before,.setPublicSearch .slider.round:before,.setSorting .slider.round:before{border-radius:50%}#fullSettings{width:100%;max-width:700px;margin-left:auto;margin-right:auto}#fullSettings .setting_category{font-size:20px;width:100%;padding-top:10px;padding-left:4px;border-bottom:1px dotted #222;margin-top:20px;color:#fff;font-weight:700;text-transform:capitalize}#fullSettings .setting_line{font-size:14px;width:100%}#fullSettings .setting_line:first-child,#fullSettings .setting_line:last-child{padding-top:50px}#fullSettings .setting_line p{min-width:550px;margin:0;color:#ccc;display:inline-block;width:100%}#fullSettings .setting_line p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}#fullSettings .setting_line p:last-of-type{margin:0}#fullSettings .setting_line p.warning{margin-bottom:30px;color:#d92c34;font-weight:700;font-size:18px;text-align:justify;line-height:22px}#fullSettings .setting_line span.text{display:inline-block;padding:9px 4px;width:calc(50% - 12px);background-color:transparent;color:#fff;border:none}#fullSettings .setting_line span.text_icon{width:5%}#fullSettings .setting_line span.text_icon .iconic{width:15px;height:14px;margin:0 10px 0 1px;fill:#fff}#fullSettings .setting_line input.text{padding:9px 2px;width:calc(50% - 4px);background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0}#fullSettings .setting_line input.text:focus{border-bottom-color:#2293ec}#fullSettings .setting_line input:hover{border-bottom:1px solid #2293ec}#fullSettings .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:100%;min-width:50px;border-radius:5px}#fullSettings .basicModal__button:hover{cursor:pointer}#fullSettings .basicModal__button_SAVE{color:#b22027}#fullSettings .basicModal__button_SAVE:hover{background:#b22027;color:#fff}.users_view{width:80%;max-width:700px;margin-left:auto;margin-right:auto}.users_view_line{font-size:14px;width:100%}.users_view_line:first-child,.users_view_line:last-child{padding-top:50px}.users_view_line p{width:550px;margin:0 0 5%;color:#ccc;display:inline-block}.users_view_line p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.users_view_line p.line,.users_view_line p:last-of-type{margin:0}.users_view_line span.text{display:inline-block;padding:9px 4px;width:40%;background-color:transparent;color:#fff;border:none}.users_view_line span.text_icon{width:5%}.users_view_line span.text_icon .iconic{width:15px;height:14px;margin:0 15px 0 1px;fill:#fff}.users_view_line input.text{padding:9px 2px;width:40%;background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0;margin-bottom:10px}.users_view_line input.text:focus{border-bottom-color:#2293ec}.users_view_line input.text.error{border-bottom-color:#d92c34}.users_view_line .choice label input:checked~.checkbox .iconic{opacity:1;-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.users_view_line .choice{display:inline-block;width:5%;color:#fff}.users_view_line .choice input{position:absolute;margin:0;opacity:0}.users_view_line .choice .checkbox{display:inline-block;width:16px;height:16px;margin-top:10px;margin-left:2px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.users_view_line .choice .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.users_view_line .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:10%;min-width:50px;border-radius:0}.users_view_line .basicModal__button:hover{cursor:pointer}.users_view_line .basicModal__button_OK{color:#2293ec;border-radius:5px 0 0 5px}.users_view_line .basicModal__button_OK:hover{background:#2293ec;color:#fff}.users_view_line .basicModal__button_DEL{color:#b22027;border-radius:0 5px 5px 0}.users_view_line .basicModal__button_DEL:hover{background:#b22027;color:#fff}.users_view_line .basicModal__button_CREATE{width:20%;color:#090;border-radius:5px}.users_view_line .basicModal__button_CREATE:hover{background:#090;color:#fff}.users_view_line input:hover{border-bottom:1px solid #2293ec}.users_view_line .select{position:relative;margin:1px 5px;padding:0;width:110px;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.users_view_line .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background:0 0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.users_view_line .select select option{margin:0;padding:0;background:#fff;color:#333;-webkit-transition:none;-o-transition:none;transition:none}.users_view_line .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.u2f_view{width:80%;max-width:700px;margin-left:auto;margin-right:auto}.u2f_view_line{font-size:14px;width:100%}.u2f_view_line:first-child,.u2f_view_line:last-child{padding-top:50px}.u2f_view_line p{width:550px;margin:0 0 5%;color:#ccc;display:inline-block}.u2f_view_line p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.u2f_view_line p.line,.u2f_view_line p:last-of-type{margin:0}.u2f_view_line p.single{text-align:center}.u2f_view_line span.text{display:inline-block;padding:9px 4px;width:80%;background-color:transparent;color:#fff;border:none}.u2f_view_line span.text_icon{width:5%}.u2f_view_line span.text_icon .iconic{width:15px;height:14px;margin:0 15px 0 1px;fill:#fff}.u2f_view_line .choice label input:checked~.checkbox .iconic{opacity:1;-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.u2f_view_line .choice{display:inline-block;width:5%;color:#fff}.u2f_view_line .choice input{position:absolute;margin:0;opacity:0}.u2f_view_line .choice .checkbox{display:inline-block;width:16px;height:16px;margin-top:10px;margin-left:2px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.u2f_view_line .choice .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.u2f_view_line .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:20%;min-width:50px;border-radius:0}.u2f_view_line .basicModal__button:hover{cursor:pointer}.u2f_view_line .basicModal__button_OK{color:#2293ec;border-radius:5px 0 0 5px}.u2f_view_line .basicModal__button_OK:hover{background:#2293ec;color:#fff}.u2f_view_line .basicModal__button_DEL{color:#b22027;border-radius:0 5px 5px 0}.u2f_view_line .basicModal__button_DEL:hover{background:#b22027;color:#fff}.u2f_view_line .basicModal__button_CREATE{width:100%;color:#090;border-radius:5px}.u2f_view_line .basicModal__button_CREATE:hover{background:#090;color:#fff}.u2f_view_line input:hover{border-bottom:1px solid #2293ec}.u2f_view_line .select{position:relative;margin:1px 5px;padding:0;width:110px;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.u2f_view_line .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background:0 0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.u2f_view_line .select select option{margin:0;padding:0;background:#fff;color:#333;-webkit-transition:none;-o-transition:none;transition:none}.u2f_view_line .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.signInKeyLess{display:block;padding:10px;position:absolute;cursor:pointer}.signInKeyLess .iconic{display:inline-block;margin:0;width:20px;height:20px;fill:#818181}.signInKeyLess .iconic.ionicons{margin:0 8px -2px 0;width:18px;height:18px}.signInKeyLess:hover .iconic{fill:#fff}.logs_diagnostics_view{width:1200px;margin-left:auto;margin-right:auto;color:#ccc;font-size:12px;line-height:14px}.logs_diagnostics_view pre{font-family:monospace;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.clear_logs_update{width:1200px;padding-left:30px;margin:20px auto}.clear_logs_update .basicModal__button,.logs_diagnostics_view .basicModal__button{color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px}.clear_logs_update .iconic,.logs_diagnostics_view .iconic{display:inline-block;margin:0 10px 0 1px;width:13px;height:12px;fill:#2293ec}.clear_logs_update .button_left,.logs_diagnostics_view .button_left{margin-left:24px;width:400px}.sharing_view{width:600px;margin-left:auto;margin-right:auto;margin-top:20px}.sharing_view .sharing_view_line{width:100%;display:block;clear:left}.sharing_view .col-xs-1,.sharing_view .col-xs-10,.sharing_view .col-xs-11,.sharing_view .col-xs-12,.sharing_view .col-xs-2,.sharing_view .col-xs-3,.sharing_view .col-xs-4,.sharing_view .col-xs-5,.sharing_view .col-xs-6,.sharing_view .col-xs-7,.sharing_view .col-xs-8,.sharing_view .col-xs-9{float:left;position:relative;min-height:1px}.sharing_view .col-xs-2{width:10%;padding-right:3%;padding-left:3%}.sharing_view .col-xs-5{width:42%}.sharing_view .btn-block+.btn-block{margin-top:5px}.sharing_view .btn-block{display:block;width:100%}.sharing_view .btn-default{color:#2293ec;border-color:#2293ec;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.sharing_view .btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.sharing_view select[multiple],.sharing_view select[size]{height:150px}.sharing_view .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;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 .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.sharing_view .iconic{display:inline-block;width:15px;height:14px;fill:#2293ec}.sharing_view .iconic .iconic.ionicons{margin:0 8px -2px 0;width:18px;height:18px}.sharing_view .blue .iconic{fill:#2293ec}.sharing_view .grey .iconic{fill:#b4b4b4}.sharing_view p{width:100%;color:#ccc;text-align:center;font-size:14px;display:block}.sharing_view p.with{padding:15px 0}.sharing_view span.text{display:inline-block;padding:0 2px;width:40%;background-color:transparent;color:#fff;border:none}.sharing_view span.text:last-of-type{width:5%}.sharing_view span.text .iconic{width:15px;height:14px;margin:0 10px 0 1px;fill:#fff}.sharing_view .basicModal__button{margin-top:10px;color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px}.sharing_view .basicModal__button:hover{background:#2293ec;color:#fff;cursor:pointer}.sharing_view input:hover{border-bottom:1px solid #2293ec}.sharing_view .choice label input:checked~.checkbox .iconic{opacity:1;-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.sharing_view .choice{display:inline-block;width:5%;margin:0 10px;color:#fff}.sharing_view .choice input{position:absolute;margin:0;opacity:0}.sharing_view .choice .checkbox{display:inline-block;width:16px;height:16px;margin-top:10px;margin-left:2px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.sharing_view .choice .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.sharing_view .select{position:relative;padding:0;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:14px;line-height:16px;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.sharing_view .borderBlue{border:1px solid #2293ec}#multiselect{position:absolute;background-color:rgba(0,94,204,.3);border:1px solid #005ecc;border-radius:3px;z-index:5}.justified-layout{margin:30px 0 0 30px;width:100%;position:relative}.unjustified-layout{margin:25px -5px -5px 25px;width:100%;position:relative;overflow:hidden}.justified-layout>.photo{position:absolute;--lychee-default-height:320px;margin:0}.unjustified-layout>.photo{float:left;max-height:240px;margin:5px}.justified-layout>.photo>.thumbimg,.justified-layout>.photo>.thumbimg>img,.unjustified-layout>.photo>.thumbimg,.unjustified-layout>.photo>.thumbimg>img{width:100%;height:100%;border:none;-o-object-fit:cover;object-fit:cover}.justified-layout>.photo>.overlay,.unjustified-layout>.photo>.overlay{width:100%;bottom:0;margin:0}.justified-layout>.photo>.overlay>h1,.unjustified-layout>.photo>.overlay>h1{width:auto;margin-right:15px}#footer{z-index:3;left:0;right:0;bottom:0;-webkit-transition:color .3s,opacity .3s ease-out,margin-left .5s,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s,margin-left .5s,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;-o-transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s,margin-left .5s;padding:5px 0;text-align:center;position:absolute;background:#1d1d1d}#footer p{color:#ccc;font-weight:400;font-size:.75em;line-height:26px}#footer p a,#footer p a:visited{color:#ccc}#footer p.home_copyright,#footer p.hosted_by{text-transform:uppercase}.hide_footer{display:none}@font-face{font-family:socials;src:url(fonts/socials.eot?egvu10);src:url(fonts/socials.eot?egvu10#iefix) format("embedded-opentype"),url(fonts/socials.ttf?egvu10) format("truetype"),url(fonts/socials.woff?egvu10) format("woff"),url(fonts/socials.svg?egvu10#socials) format("svg");font-weight:400;font-style:normal}#socials_footer{padding:0;text-align:center;left:0;right:0}.socialicons{display:inline-block;font-size:18px;font-family:socials!important;speak:none;color:#ccc;text-decoration:none;margin:15px 15px 5px;transition:.3s;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s}.socialicons:hover{color:#b5b5b5;-ms-transform:scale(1.3);transform:scale(1.3);-webkit-transform:scale(1.3)}#twitter:before{content:"\ea96"}#instagram:before{content:"\ea92"}#youtube:before{content:"\ea9d"}#flickr:before{content:"\eaa4"}#facebook:before{content:"\ea91"}.directLinks input.text{width:calc(100% - 30px);color:rgba(255,255,255,.6);padding:2px}.directLinks .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:25px;height:25px;border-radius:5px;border-bottom:0;padding:3px 0 0;margin-top:-5px;float:right}.directLinks .basicModal__button .iconic{fill:#2293ec;width:16px;height:16px}.directLinks .basicModal__button:hover{background:#2293ec;cursor:pointer}.directLinks .basicModal__button:hover .iconic{fill:#fff}.directLinks .imageLinks{margin-top:-30px;padding-bottom:40px}.directLinks .imageLinks p{padding:10px 30px 0;font-size:12px;line-height:15px}.directLinks .imageLinks .basicModal__button{margin-top:-8px}.downloads{padding:30px}.downloads .basicModal__button{color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px;border-bottom:0;margin:5px 0}.downloads .basicModal__button .iconic{fill:#2293ec;margin:0 10px 0 1px;width:11px;height:10px}.downloads .basicModal__button:hover{color:#fff;background:#2293ec;cursor:pointer}.downloads .basicModal__button:hover .iconic{fill:#fff}.leaflet-image-layer,.leaflet-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane,.leaflet-pane>canvas,.leaflet-pane>svg,.leaflet-tile,.leaflet-tile-container,.leaflet-zoom-box{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden;-webkit-tap-highlight-color:transparent;background:#ddd;outline:0;font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::-moz-selection{background:0 0}.leaflet-tile::selection{background:0 0}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer{max-width:none!important;max-height:none!important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4);color:#0078a8}.leaflet-tile{-webkit-filter:inherit;filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-webkit-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto;float:left;clear:both}.leaflet-bottom,.leaflet-top{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-right .leaflet-control{float:right;margin-right:10px}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform;-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1);-o-transition:transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1),-webkit-transform .25s cubic-bezier(0,0,.25,1)}.leaflet-pan-anim .leaflet-tile,.leaflet-zoom-anim .leaflet-tile{-webkit-transition:none;-o-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-control,.leaflet-popup-pane{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.leaflet-image-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-image-layer.leaflet-interactive,.leaflet-marker-icon.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container a.leaflet-active{outline:orange solid 2px}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.leaflet-bar{-webkit-box-shadow:0 1px 5px rgba(0,0,0,.65);box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console',Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{-webkit-box-shadow:0 1px 5px rgba(0,0,0,.4);box-shadow:0 1px 5px rgba(0,0,0,.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(images/marker-icon.png)}.leaflet-container .leaflet-control-attribution{background:rgba(255,255,255,.7);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;background:rgba(255,255,255,.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers{-webkit-box-shadow:none;box-shadow:none}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;-webkit-box-shadow:0 3px 14px rgba(0,0,0,.4);box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:700 16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;background:0 0}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 1px 3px rgba(0,0,0,.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before,.leaflet-tooltip-top:before{position:absolute;pointer-events:none;border:6px solid transparent;background:0 0;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:opacity .3s ease-in,-webkit-transform .3s ease-out;-o-transition:transform .3s ease-out,opacity .3s ease-in;transition:transform .3s ease-out,opacity .3s ease-in,-webkit-transform .3s ease-out}.leaflet-cluster-spider-leg{-webkit-transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in;-o-transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in;transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.leaflet-marker-photo{border:2px solid #fff;-webkit-box-shadow:3px 3px 10px #888;box-shadow:3px 3px 10px #888}.leaflet-marker-photo div{width:100%;height:100%;background-size:cover;background-position:center center;background-repeat:no-repeat}.leaflet-marker-photo b{position:absolute;top:-7px;right:-11px;color:#555;background-color:#fff;border-radius:8px;height:12px;min-width:12px;line-height:12px;text-align:center;padding:3px;-webkit-box-shadow:0 3px 14px rgba(0,0,0,.4);box-shadow:0 3px 14px rgba(0,0,0,.4)} \ No newline at end of file +@charset "UTF-8";@-webkit-keyframes basicModal__fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes basicModal__fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes basicModal__fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes basicModal__fadeOut{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes basicModal__moveUpFade{0%{-webkit-transform:translateY(80px);transform:translateY(80px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes basicModal__moveUpFade{0%{-webkit-transform:translateY(80px);transform:translateY(80px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes basicModal__shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}20%,60%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes basicModal__shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}20%,60%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}.basicModalContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:fixed;width:100%;height:100%;top:0;left:0;z-index:1000;-webkit-box-sizing:border-box;box-sizing:border-box}.basicModalContainer *,.basicModalContainer :after,.basicModalContainer :before{-webkit-box-sizing:border-box;box-sizing:border-box}.basicModalContainer--fadeIn{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeIn;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeIn}.basicModalContainer--fadeOut{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeOut;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__fadeOut}.basicModalContainer--fadeIn .basicModal--fadeIn{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__moveUpFade;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__moveUpFade}.basicModalContainer--fadeIn .basicModal--shake{-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__shake;animation:.3s cubic-bezier(.51,.92,.24,1.15) basicModal__shake}.basicModal{position:relative;width:500px;background-color:#fff;font-size:14px;border-radius:5px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.basicModal__content{max-height:70vh;overflow:auto;-webkit-overflow-scrolling:touch}.basicModal__buttons{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.1);box-shadow:0 -1px 0 rgba(0,0,0,.1)}.basicModal__button{display:inline-block;width:100%;font-weight:700;text-align:center;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.basicModal__button#basicModal__cancel{-ms-flex-negative:2;flex-shrink:2}.basicModal__button#basicModal__action{-ms-flex-negative:1;flex-shrink:1;-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.1);box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}.basicModal__button#basicModal__action:first-child{-webkit-box-shadow:none;box-shadow:none}.basicModal__button:first-child{border-radius:0 0 0 5px}.basicModal__button:last-child{border-radius:0 0 5px}.basicModal__text{width:100%;margin:0;padding:14px 10px;background-color:rgba(0,0,0,0);color:#333;border:none;-webkit-box-shadow:0 1px 0 #c8c8c8;box-shadow:0 1px 0 #c8c8c8;border-radius:0;outline:0;-webkit-transition:background-color .2s,-webkit-box-shadow .2s;transition:background-color .2s,box-shadow .2s,-webkit-box-shadow .2s;-o-transition:background-color .2s,box-shadow .2s}.basicModal__text:hover{background-color:rgba(0,0,0,.02);-webkit-box-shadow:0 1px 0 #b4b4b4;box-shadow:0 1px 0 #b4b4b4}.basicModal__text:focus{background-color:rgba(40,117,237,.05);-webkit-box-shadow:0 1px 0 #2875ed;box-shadow:0 1px 0 #2875ed}.basicModal__text.error{background-color:rgba(255,36,16,.05);-webkit-box-shadow:0 1px 0 #ff2410;box-shadow:0 1px 0 #ff2410}.basicModal p{margin:0 0 5%;width:100%}.basicModal p:last-child{margin:0}.basicModal__small{max-width:340px;text-align:center}.basicModal__small .basicModal__content{padding:10% 5%}.basicModal__xclose#basicModal__cancel{position:absolute;top:-8px;right:-8px;margin:0;padding:0;width:40px;height:40px;background-color:#fff;border-radius:100%;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.basicModal__xclose#basicModal__cancel:after{content:'';position:absolute;left:-3px;top:8px;width:35px;height:34px;background:#fff}.basicModal__xclose#basicModal__cancel svg{position:relative;width:20px;height:39px;fill:#888;z-index:1;-webkit-transition:fill .2s;-o-transition:fill .2s;transition:fill .2s}.basicModal__xclose#basicModal__cancel:after:hover svg,.basicModal__xclose#basicModal__cancel:hover svg{fill:#2875ed}.basicModal__xclose#basicModal__cancel:active svg,.basicModal__xclose#basicModal__cancel:after:active svg{fill:#1364e3}.basicContextContainer{position:fixed;width:100%;height:100%;top:0;left:0;z-index:1000;-webkit-tap-highlight-color:transparent}.basicContext{position:absolute;opacity:0;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-animation:.3s cubic-bezier(.51,.92,.24,1.2) basicContext__popIn;animation:.3s cubic-bezier(.51,.92,.24,1.2) basicContext__popIn}.basicContext *{-webkit-box-sizing:border-box;box-sizing:border-box}.basicContext__item{cursor:pointer;margin-bottom:2px;font-size:14px}.basicContext__item--separator{float:left;width:100%;cursor:default}.basicContext__item--disabled{cursor:default;opacity:.5}.basicContext__data{min-width:140px;text-align:left;white-space:nowrap}.basicContext__icon{display:inline-block}.basicContext--scrollable{height:100%;-webkit-overflow-scrolling:touch;overflow-y:auto}.basicContext--scrollable .basicContext__data{min-width:160px}@-webkit-keyframes basicContext__popIn{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes basicContext__popIn{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1;background-color:#1d1d1d;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}em,i{font-style:italic}b,strong{font-weight:700}*{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:color .3s,opacity .3s ease-out,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;-o-transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s}body,html{min-height:100vh;position:relative}body.view{background-color:#0f0f0f}div#container{position:relative}input{-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;user-select:text!important}.svgsprite{display:none}.iconic{width:100%;height:100%}#upload{display:none}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes moveBackground{0%{background-position-x:0}100%{background-position-x:-100px}}@keyframes moveBackground{0%{background-position-x:0}100%{background-position-x:-100px}}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}}@keyframes zoomOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}}@-webkit-keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}.content{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-line-pack:start;align-content:flex-start;padding:50px 30px 33px 0;width:calc(100% - 30px);-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s;-webkit-overflow-scrolling:touch;max-width:calc(100vw - 10px)}.content::before{content:"";position:absolute;left:0;width:100%;height:1px;background:rgba(255,255,255,.02)}.content--sidebar{width:calc(100% - 380px)}.content.contentZoomIn .album,.content.contentZoomIn .photo{-webkit-animation-name:zoomIn;animation-name:zoomIn}.content.contentZoomIn .divider{-webkit-animation-name:fadeIn;animation-name:fadeIn}.content.contentZoomOut .album,.content.contentZoomOut .photo{-webkit-animation-name:zoomOut;animation-name:zoomOut}.content.contentZoomOut .divider{-webkit-animation-name:fadeOut;animation-name:fadeOut}.content .album,.content .photo{position:relative;width:202px;height:202px;margin:30px 0 0 30px;cursor:default;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}.content .album .thumbimg,.content .photo .thumbimg{position:absolute;width:200px;height:200px;background:#222;color:#222;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.5);box-shadow:0 2px 5px rgba(0,0,0,.5);border:1px solid rgba(255,255,255,.5);-webkit-transition:opacity .3s ease-out,border-color .3s ease-out,-webkit-transform .3s ease-out;transition:opacity .3s ease-out,transform .3s ease-out,border-color .3s ease-out,-webkit-transform .3s ease-out;-o-transition:opacity .3s ease-out,transform .3s ease-out,border-color .3s ease-out}.content .album .thumbimg>img,.content .photo .thumbimg>img{width:100%;height:100%}.content .album.active .thumbimg,.content .album:focus .thumbimg,.content .album:hover .thumbimg,.content .photo.active .thumbimg,.content .photo:focus .thumbimg,.content .photo:hover .thumbimg{border-color:#2293ec}.content .album:active .thumbimg,.content .photo:active .thumbimg{-webkit-transition:none;-o-transition:none;transition:none;border-color:#0f6ab2}.content .album.selected img,.content .photo.selected img{outline:#2293ec solid 1px}.content .album .video::before,.content .photo .video::before{content:"";position:absolute;display:block;height:100%;width:100%;background:url(../img/play-icon.png) 46% 50% no-repeat;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;will-change:opacity,height}.content .album .video:focus::before,.content .album .video:hover::before,.content .photo .video:focus::before,.content .photo .video:hover::before{opacity:.75}.content .album .livephoto::before,.content .photo .livephoto::before{content:"";position:absolute;display:block;height:100%;width:100%;background:url(../img/live-photo-icon.png) 2% 2% no-repeat;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;will-change:opacity,height}.content .album .livephoto:focus::before,.content .album .livephoto:hover::before,.content .photo .livephoto:focus::before,.content .photo .livephoto:hover::before{opacity:.75}.content .album .thumbimg:first-child,.content .album .thumbimg:nth-child(2){-webkit-transform:rotate(0) translateY(0) translateX(0);-ms-transform:rotate(0) translateY(0) translateX(0);transform:rotate(0) translateY(0) translateX(0);opacity:0}.content .album:focus .thumbimg:nth-child(1),.content .album:focus .thumbimg:nth-child(2),.content .album:hover .thumbimg:nth-child(1),.content .album:hover .thumbimg:nth-child(2){opacity:1;will-change:transform}.content .album:focus .thumbimg:nth-child(1),.content .album:hover .thumbimg:nth-child(1){-webkit-transform:rotate(-2deg) translateY(10px) translateX(-12px);-ms-transform:rotate(-2deg) translateY(10px) translateX(-12px);transform:rotate(-2deg) translateY(10px) translateX(-12px)}.content .album:focus .thumbimg:nth-child(2),.content .album:hover .thumbimg:nth-child(2){-webkit-transform:rotate(5deg) translateY(-8px) translateX(12px);-ms-transform:rotate(5deg) translateY(-8px) translateX(12px);transform:rotate(5deg) translateY(-8px) translateX(12px)}.content .blurred span{overflow:hidden}.content .blurred img{-webkit-filter:blur(5px);filter:blur(5px)}.content .album .overlay,.content .photo .overlay{position:absolute;margin:0 1px;width:200px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.6)));background:-o-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.6));background:linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,.6));bottom:1px}.content .album .thumbimg[data-overlay=false]+.overlay{background:0 0}.content .photo .overlay{opacity:0}.content .photo.active .overlay,.content .photo:focus .overlay,.content .photo:hover .overlay{opacity:1}.content .album .overlay h1,.content .photo .overlay h1{min-height:19px;width:180px;margin:12px 0 5px 15px;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.4);font-size:16px;font-weight:700;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.content .album .overlay a,.content .photo .overlay a{display:block;margin:0 0 12px 15px;font-size:11px;color:#ccc;text-shadow:0 1px 3px rgba(0,0,0,.4)}.content .album .overlay a .iconic,.content .photo .overlay a .iconic{fill:#ccc;margin:0 5px 0 0;width:8px;height:8px}.content .album .thumbimg[data-overlay=false]+.overlay a,.content .album .thumbimg[data-overlay=false]+.overlay h1{text-shadow:none}.content .album .badges,.content .photo .badges{position:relative;margin:-1px 0 0 6px}.content .album .subalbum_badge{position:absolute;right:0;top:0}.content .album .badge,.content .photo .badge{display:none;margin:0 0 0 6px;padding:12px 8px 6px;width:18px;background:#d92c34;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);border-radius:0 0 5px 5px;border:1px solid #fff;border-top:none;color:#fff;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.4);opacity:.9}.content .album .badge--visible,.content .photo .badge--visible{display:inline-block}.content .album .badge--not--hidden,.content .photo .badge--not--hidden{background:#0a0}.content .album .badge--hidden,.content .photo .badge--hidden{background:#f90}.content .album .badge--cover,.content .photo .badge--cover{display:inline-block;background:#f90}.content .album .badge--star,.content .photo .badge--star{display:inline-block;background:#fc0}.content .album .badge--nsfw,.content .photo .badge--nsfw{display:inline-block;background:#ff82ee}.content .album .badge--list,.content .photo .badge--list{background:#2293ec}.content .album .badge--tag,.content .photo .badge--tag{display:inline-block;background:#0a0}.content .album .badge .iconic,.content .photo .badge .iconic{fill:#fff;width:16px;height:16px}.content .album .badge--folder,.content .photo .badge--folder{display:inline-block;-webkit-box-shadow:none;box-shadow:none;background:0 0;border:none}.content .album .badge--folder .iconic,.content .photo .badge--folder .iconic{width:12px;height:12px}.content .divider{margin:50px 0 0;padding:10px 0 0;width:100%;opacity:0;border-top:1px solid rgba(255,255,255,.02);-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.2);box-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1);animation-timing-function:cubic-bezier(.51,.92,.24,1)}.content .divider:first-child{margin-top:10px;border-top:0;-webkit-box-shadow:none;box-shadow:none}.content .divider h1{margin:0 0 0 30px;color:rgba(255,255,255,.6);font-size:14px;font-weight:700}.no_content{position:absolute;top:50%;left:50%;padding-top:20px;color:rgba(255,255,255,.35);text-align:center;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.no_content .iconic{fill:rgba(255,255,255,.3);margin:0 0 10px;width:50px;height:50px}.no_content p{font-size:16px;font-weight:700}.leftMenu__open{margin-left:250px;width:calc(100% - 280px)}.leftMenu{height:100vh;width:0;position:fixed;z-index:4;top:0;left:0;background-color:#111;overflow-x:hidden;padding-top:60px;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.leftMenu a{padding:8px 8px 8px 32px;text-decoration:none;font-size:18px;color:#818181;display:block;-webkit-transition:.3s;-o-transition:.3s;transition:.3s}.leftMenu a.linkMenu{white-space:nowrap}.leftMenu a:hover{color:#f1f1f1}.leftMenu .closebtn{position:absolute;top:0;right:25px;font-size:36px;margin-left:50px}.leftMenu .closetxt{position:absolute;top:0;left:0;font-size:24px;height:28px;padding-top:16px;color:#111;display:inline-block;width:210px}.leftMenu .closetxt:hover{color:#818181}.leftMenu .iconic{display:inline-block;margin:0 10px 0 1px;width:15px;height:14px;fill:#818181}.leftMenu .iconic.ionicons{margin:0 8px -2px 0;width:18px;height:18px}.leftMenu__visible{width:250px}@media screen and (max-height:450px){.leftMenu{padding-top:15px}.leftMenu a{font-size:18px}}.basicContext{padding:5px 0 6px;background:-webkit-gradient(linear,left top,left bottom,from(#333),to(#252525));background:-o-linear-gradient(top,#333,#252525);background:linear-gradient(to bottom,#333,#252525);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05);border-radius:5px;border:1px solid rgba(0,0,0,.7);border-bottom:1px solid rgba(0,0,0,.8);-webkit-transition:none;-o-transition:none;transition:none}.basicContext__item--separator{margin:4px 0;height:2px;background:rgba(0,0,0,.2);border-bottom:1px solid rgba(255,255,255,.06)}.basicContext__item:last-child{margin-bottom:0}.basicContext__data{min-width:auto;padding:6px 25px 7px 12px;color:#fff;-webkit-transition:none;-o-transition:none;transition:none;cursor:default}.basicContext__item:not(.basicContext__item--disabled):hover .basicContext__data{background:-webkit-gradient(linear,left top,left bottom,from(#2293ec),to(#1386e1));background:-o-linear-gradient(top,#2293ec,#1386e1);background:linear-gradient(to bottom,#2293ec,#1386e1)}.basicContext__item:not(.basicContext__item--disabled):active .basicContext__data{background:-webkit-gradient(linear,left top,left bottom,from(#1178ca),to(#0f6ab2));background:-o-linear-gradient(top,#1178ca,#0f6ab2);background:linear-gradient(to bottom,#1178ca,#0f6ab2)}.basicContext__icon{margin-right:10px;width:12px;text-align:center}.basicContext__data .cover{position:absolute;background-color:#222;border-radius:2px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.5);box-shadow:0 0 0 1px rgba(0,0,0,.5)}.basicContext__data .title{display:inline-block;margin:0 0 3px 26px}.basicContext__data .iconic{display:inline-block;margin:0 10px 0 1px;width:11px;height:10px;fill:#fff}.basicContext__data .iconic.active{fill:#f90}.basicContext__data .iconic.ionicons{margin:0 8px -2px 0;width:14px;height:14px}.basicContext__data input#link{margin:-2px 0;padding:5px 7px 6px;width:100%;background:#333;color:#fff;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);border:1px solid rgba(0,0,0,.4);border-radius:3px;outline:0}.basicContext__item--noHover .basicContext__data{padding-right:12px}.basicContext__item--noHover:hover .basicContext__data{background:0 0!important}.basicModal .switch:last-child{padding-bottom:42px}.basicModal .hr{padding:0 30px 15px;width:100%}.basicModal .hr hr{border:none;border-top:1px solid rgba(0,0,0,.2)}.header{position:fixed;height:49px;width:100%;background:-webkit-gradient(linear,left top,left bottom,from(#222),to(#1a1a1a));background:-o-linear-gradient(top,#222,#1a1a1a);background:linear-gradient(to bottom,#222,#1a1a1a);border-bottom:1px solid #0f0f0f;z-index:1;-webkit-transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;-o-transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.header--hidden{-webkit-transform:translateY(-60px);-ms-transform:translateY(-60px);transform:translateY(-60px)}.header--loading{-webkit-transform:translateY(2px);-ms-transform:translateY(2px);transform:translateY(2px)}.header--error{-webkit-transform:translateY(40px);-ms-transform:translateY(40px);transform:translateY(40px)}.header--view{background:0 0;border-bottom:none}.header--view.header--error{background-color:rgba(10,10,10,.99)}.header__toolbar{display:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;padding:0 10px}.header__toolbar--visible{display:-webkit-box;display:-ms-flexbox;display:flex}.header__title{width:100%;padding:16px 0;color:#fff;font-size:16px;font-weight:700;text-align:center;cursor:default;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis;-webkit-transition:margin-left .5s;-o-transition:margin-left .5s;transition:margin-left .5s}.header__title .iconic{display:none;margin:0 0 0 5px;width:10px;height:10px;fill:rgba(255,255,255,.5);-webkit-transition:fill .2s ease-out;-o-transition:fill .2s ease-out;transition:fill .2s ease-out}.header__title:hover .iconic{fill:#fff}.header__title:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:rgba(255,255,255,.8)}.header__title--editable .iconic{display:inline-block}.header .button{-ms-flex-negative:0;flex-shrink:0;padding:16px 8px;height:15px}.header .button .iconic{width:15px;height:15px;fill:rgba(255,255,255,.5);-webkit-transition:fill .2s ease-out;-o-transition:fill .2s ease-out;transition:fill .2s ease-out}.header .button:hover .iconic{fill:#fff}.header .button:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:rgba(255,255,255,.8)}.header .button--star.active .iconic{fill:#f0ef77}.header .button--eye.active .iconic{fill:#d92c34}.header .button--eye.active--not-hidden .iconic{fill:#0a0}.header .button--eye.active--hidden .iconic{fill:#f90}.header .button--share .iconic.ionicons{margin:-2px 0;width:18px;height:18px}.header .button--nsfw.active .iconic{fill:#ff82ee}.header .button--info.active .iconic{fill:#2293ec}.header #button_settings,.header #button_signin{padding:16px 48px 16px 8px}.header__divider{-ms-flex-negative:0;flex-shrink:0;width:14px}.header__search{-ms-flex-negative:0;flex-shrink:0;width:80px;margin:0;padding:5px 12px 6px;background-color:#1d1d1d;color:#fff;border:1px solid rgba(0,0,0,.9);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.04);box-shadow:0 1px 0 rgba(255,255,255,.04);outline:0;border-radius:50px;opacity:.6;-webkit-transition:opacity .3s ease-out,width .2s ease-out,-webkit-box-shadow .3s ease-out;transition:opacity .3s ease-out,box-shadow .3s ease-out,width .2s ease-out,-webkit-box-shadow .3s ease-out;-o-transition:opacity .3s ease-out,box-shadow .3s ease-out,width .2s ease-out}.header__search:focus{width:140px;border-color:#2293ec;-webkit-box-shadow:0 1px 0 rgba(255,255,255,0);box-shadow:0 1px 0 rgba(255,255,255,0);opacity:1}.header__search:focus~.header__clear{opacity:1}.header__search::-ms-clear{display:none}.header__clear{position:absolute;right:90px;padding:0;color:rgba(255,255,255,.5);font-size:30px;opacity:0;-webkit-transition:color .2s ease-out;-o-transition:color .2s ease-out;transition:color .2s ease-out;cursor:default}.header__clear:hover{color:#fff}.header__clear_nomap{right:60px}.header__clear_public{right:17px}.header__hostedwith{-ms-flex-negative:0;flex-shrink:0;padding:5px 10px;margin:11px 0;color:#888;font-size:13px;border-radius:100px;cursor:default}.header__hostedwith:hover{background-color:rgba(0,0,0,.3)}.header .leftMenu__open{margin-left:250px}#imageview{position:fixed;display:none;top:0;left:0;width:100%;height:100%;background-color:rgba(10,10,10,.98);-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}#imageview.view{background-color:inherit}#imageview.full{background-color:#000;cursor:none}#imageview #image,#imageview #livephoto{position:absolute;top:60px;right:30px;bottom:30px;left:30px;margin:auto;max-width:calc(100% - 60px);max-height:calc(100% - 90px);width:auto;height:auto;-webkit-transition:top .3s,right .3s,bottom .3s,left .3s,max-width .3s,max-height .3s;-o-transition:top .3s,right .3s,bottom .3s,left .3s,max-width .3s,max-height .3s;transition:top .3s,right .3s,bottom .3s,left .3s,max-width .3s,max-height .3s;-webkit-animation-name:zoomIn;animation-name:zoomIn;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:cubic-bezier(.51,.92,.24,1.15);animation-timing-function:cubic-bezier(.51,.92,.24,1.15);background-size:contain;background-position:center;background-repeat:no-repeat}#imageview.full #image,#imageview.full #livephoto{top:0;right:0;bottom:0;left:0;max-width:100%;max-height:100%}#imageview.image--sidebar #image{right:380px;max-width:calc(100% - 410px)}@media (max-width:640px){#imageview #image,#imageview #livephoto{top:60px;right:20px;bottom:20px;left:20px;max-width:calc(100% - 40px);max-height:calc(100% - 80px)}#imageview.image--sidebar #image{right:370px;max-width:calc(100% - 390px)}}#imageview.image--sidebar #livephoto{right:380px;max-width:calc(100% - 410px)}#imageview #image_overlay{position:absolute;bottom:30px;left:30px;color:#fff;text-shadow:1px 1px 2px #000;z-index:3}#imageview #image_overlay h1{visibility:hidden;opacity:0;font-size:28px;font-weight:500;-webkit-transition:visibility .3s linear,opacity .3s linear;-o-transition:visibility .3s linear,opacity .3s linear;transition:visibility .3s linear,opacity .3s linear}#imageview #image_overlay p{margin-top:5px;font-size:20px;line-height:24px}#imageview #image_overlay a .iconic{fill:#fff;margin:0 5px 0 0;width:14px;height:14px}#imageview.full #image_overlay h1{visibility:visible;opacity:1}#imageview .arrow_wrapper{position:fixed;width:15%;height:calc(100% - 60px);top:60px}#imageview .arrow_wrapper--previous{left:0}#imageview .arrow_wrapper--next{right:0}@media (max-width:640px){#imageview.image--sidebar #livephoto{right:370px;max-width:calc(100% - 390px)}#imageview .arrow_wrapper{display:none}}#imageview .arrow_wrapper a{position:fixed;top:50%;margin:-19px 0 0;padding:8px 12px;width:16px;height:22px;background-size:100% 100%;border:1px solid rgba(255,255,255,.8);opacity:.6;z-index:2;-webkit-transition:opacity .2s ease-out,-webkit-transform .2s ease-out;transition:transform .2s ease-out,opacity .2s ease-out,-webkit-transform .2s ease-out;-o-transition:transform .2s ease-out,opacity .2s ease-out;will-change:transform}#imageview .arrow_wrapper a#previous{left:-1px;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}#imageview .arrow_wrapper a#next{right:-1px;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}#imageview .arrow_wrapper:hover a#next,#imageview .arrow_wrapper:hover a#previous{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}#imageview .arrow_wrapper a:hover{opacity:1}#imageview .arrow_wrapper .iconic{fill:rgba(255,255,255,.8)}#imageview.image--sidebar .arrow_wrapper--next{right:350px}#imageview.image--sidebar .arrow_wrapper a#next{right:349px}#imageview video{z-index:1}#mapview{position:fixed;display:none;top:0;left:0;width:100%;height:100%;background-color:rgba(100,10,10,.98);-webkit-transition:background-color .3s;-o-transition:background-color .3s;transition:background-color .3s}#mapview.view{background-color:inherit}#mapview.full{background-color:#000;cursor:none}#mapview #leaflet_map_full{top:50px;height:100%;width:100%;float:left}.leaflet-marker-photo img{width:100%;height:100%}.image-leaflet-popup{width:100%}.leaflet-popup-content div{pointer-events:none;position:absolute;bottom:19px;left:22px;right:22px;padding-bottom:10px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,.6)));background:-o-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,.6));background:linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,.6))}.leaflet-popup-content h1{top:0;position:relative;margin:12px 0 5px 15px;font-size:16px;font-weight:700;text-shadow:0 1px 3px rgba(255,255,255,.4);color:#fff;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis}.leaflet-popup-content span{margin-left:12px}.leaflet-popup-content svg{fill:#fff;vertical-align:middle}.leaflet-popup-content p{display:inline;font-size:11px;color:#fff}.leaflet-popup-content .iconic{width:20px;height:15px}.sidebar{position:fixed;top:50px;right:-360px;width:350px;height:calc(100% - 50px);background-color:rgba(25,25,25,.98);border-left:1px solid rgba(0,0,0,.2);-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);-webkit-transition:-webkit-transform .3s cubic-bezier(.51,.92,.24,1);transition:transform .3s cubic-bezier(.51,.92,.24,1);-o-transition:transform .3s cubic-bezier(.51,.92,.24,1);transition:transform .3s cubic-bezier(.51,.92,.24,1),-webkit-transform .3s cubic-bezier(.51,.92,.24,1);z-index:4}.sidebar.active{-webkit-transform:translateX(-360px);-ms-transform:translateX(-360px);transform:translateX(-360px)}.sidebar__header{float:left;height:49px;width:100%;background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,.02)),to(rgba(0,0,0,0)));background:-o-linear-gradient(top,rgba(255,255,255,.02),rgba(0,0,0,0));background:linear-gradient(to bottom,rgba(255,255,255,.02),rgba(0,0,0,0));border-top:1px solid #2293ec}.sidebar__header h1{position:absolute;margin:15px 0;width:100%;color:#fff;font-size:16px;font-weight:700;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar__wrapper{float:left;height:calc(100% - 49px);width:350px;overflow:auto;-webkit-overflow-scrolling:touch}.sidebar__divider{float:left;padding:12px 0 8px;width:100%;border-top:1px solid rgba(255,255,255,.02);-webkit-box-shadow:0 -1px 0 rgba(0,0,0,.2);box-shadow:0 -1px 0 rgba(0,0,0,.2)}.sidebar__divider:first-child{border-top:0;-webkit-box-shadow:none;box-shadow:none}.sidebar__divider h1{margin:0 0 0 20px;color:rgba(255,255,255,.6);font-size:14px;font-weight:700;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar .edit{display:inline-block;margin-left:3px;width:10px}.sidebar .edit .iconic{width:10px;height:10px;fill:rgba(255,255,255,.5);-webkit-transition:fill .2s ease-out;-o-transition:fill .2s ease-out;transition:fill .2s ease-out}.sidebar .edit:hover .iconic{fill:#fff}.sidebar .edit:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:rgba(255,255,255,.8)}.sidebar table{float:left;margin:10px 0 15px 20px;width:calc(100% - 20px)}.sidebar table tr td{padding:5px 0;color:#fff;font-size:14px;line-height:19px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar table tr td:first-child{width:110px}.sidebar table tr td:last-child{padding-right:10px}.sidebar table tr td span{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar #tags{width:calc(100% - 40px);margin:16px 20px 12px;color:#fff;display:inline-block}.sidebar #tags>div{display:inline-block}.sidebar #tags .empty{font-size:14px;margin:0 2px 8px 0;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar #tags .edit{margin-top:6px}.sidebar #tags .empty .edit{margin-top:0}.sidebar #tags .tag{cursor:default;display:inline-block;padding:6px 10px;margin:0 6px 8px 0;background-color:rgba(0,0,0,.5);border-radius:100px;font-size:12px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.sidebar #tags .tag:hover{background-color:rgba(0,0,0,.3)}.sidebar #tags .tag:hover.search{cursor:pointer}.sidebar #tags .tag span{float:right;padding:0;margin:0 0 -2px;width:0;overflow:hidden;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:width .2s,margin .2s,fill .2s ease-out,-webkit-transform .2s;transition:width .2s,margin .2s,transform .2s,fill .2s ease-out,-webkit-transform .2s;-o-transition:width .2s,margin .2s,transform .2s,fill .2s ease-out}.sidebar #tags .tag span .iconic{fill:#d92c34;width:8px;height:8px}.sidebar #tags .tag span:hover .iconic{fill:#e1575e}.sidebar #tags .tag span:active .iconic{-webkit-transition:none;-o-transition:none;transition:none;fill:#b22027}.sidebar #tags .tag:hover span{width:9px;margin:0 0 -2px 5px;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.sidebar #leaflet_map_single_photo{margin:10px 0 0 20px;height:180px;width:calc(100% - 40px);float:left}.sidebar .attr_location.search{cursor:pointer}#loading{display:none;position:fixed;width:100%;height:3px;background-size:100px 3px;background-repeat:repeat-x;border-bottom:1px solid rgba(0,0,0,.3);-webkit-animation-name:moveBackground;animation-name:moveBackground;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}#loading.loading{height:3px;background-image:-webkit-gradient(linear,left top,right top,from(#153674),color-stop(47%,#153674),color-stop(53%,#2651ae),to(#2651ae));background-image:-o-linear-gradient(left,#153674 0,#153674 47%,#2651ae 53%,#2651ae 100%);background-image:linear-gradient(to right,#153674 0,#153674 47%,#2651ae 53%,#2651ae 100%);z-index:2}#loading.error{height:40px;background-color:#2f0d0e;background-image:-webkit-gradient(linear,left top,right top,from(#451317),color-stop(47%,#451317),color-stop(53%,#aa3039),to(#aa3039));background-image:-o-linear-gradient(left,#451317 0,#451317 47%,#aa3039 53%,#aa3039 100%);background-image:linear-gradient(to right,#451317 0,#451317 47%,#aa3039 53%,#aa3039 100%);z-index:1}#loading.success{height:40px;background-color:#070;background-image:-webkit-gradient(linear,left top,right top,from(#070),color-stop(47%,#090),color-stop(53%,#0a0),to(#0c0));background-image:-o-linear-gradient(left,#070 0,#090 47%,#0a0 53%,#0c0 100%);background-image:linear-gradient(to right,#070 0,#090 47%,#0a0 53%,#0c0 100%);z-index:1}#loading .leftMenu__open{padding-left:250px}#loading h1{margin:13px 13px 0;color:#ddd;font-size:14px;font-weight:700;text-shadow:0 1px 0 #000;text-transform:capitalize}#loading h1 span{margin-left:10px;font-weight:400;text-transform:none}.basicModalContainer{background-color:rgba(0,0,0,.85)}.basicModalContainer--error{-webkit-transform:translateY(40px);-ms-transform:translateY(40px);transform:translateY(40px)}.basicModal{background:-webkit-gradient(linear,left top,left bottom,from(#444),to(#333));background:-o-linear-gradient(top,#444,#333);background:linear-gradient(to bottom,#444,#333);-webkit-box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 4px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.05)}.basicModal--error{-webkit-transform:translateY(-40px);-ms-transform:translateY(-40px);transform:translateY(-40px)}.basicModal__content{padding:0}.basicModal__content p{margin:0}.basicModal__buttons{-webkit-box-shadow:none;box-shadow:none}.basicModal p{padding:10px 30px;color:rgba(255,255,255,.9);font-size:14px;text-align:left;line-height:20px}.basicModal p b{font-weight:700;color:#fff}.basicModal p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.basicModal p:first-of-type{padding-top:42px}.basicModal p:last-of-type{padding-bottom:40px}.basicModal p.signIn:first-of-type{padding-top:30px}.basicModal p.less,.basicModal p.signIn:last-of-type{padding-bottom:30px}.basicModal p.photoPublic{padding:0 30px;margin:30px 0}.basicModal p.importServer:last-of-type{padding-bottom:0}.basicModal__button{padding:13px 0 15px;background:rgba(0,0,0,.02);color:rgba(255,255,255,.5);border-top:1px solid rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02);box-shadow:inset 0 1px 0 rgba(255,255,255,.02);cursor:default}.basicModal__button:hover{background:rgba(255,255,255,.02)}.basicModal__button--active,.basicModal__button:active{-webkit-transition:none;-o-transition:none;transition:none;background:rgba(0,0,0,.1)}.basicModal__button#basicModal__action{color:#2293ec;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2)}.basicModal__button#basicModal__action.red,.basicModal__button#basicModal__cancel.red{color:#d92c34}.basicModal__button.hidden{display:none}.basicModal__button.busy{cursor:wait}.basicModal input.text{padding:9px 2px;width:100%;background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0}.basicModal input.text:focus{border-bottom-color:#2293ec}.basicModal input.text.error{border-bottom-color:#d92c34}.basicModal input.text:first-child{margin-top:10px}.basicModal input.text:last-child{margin-bottom:10px}.basicModal .choice{padding:0 30px 15px;width:100%;color:#fff}.basicModal .choice:first-child{padding-top:42px}.basicModal .choice:last-child{padding-bottom:40px}.basicModal .choice label{float:left;color:#fff;font-size:14px;font-weight:700}.basicModal .choice label input{position:absolute;margin:0;opacity:0}.basicModal .choice label .checkbox{float:left;display:block;width:16px;height:16px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.basicModal .choice label .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.basicModal .choice label input:checked~.checkbox{background:rgba(0,0,0,.5)}.basicModal .choice label input:checked~.checkbox .iconic{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.basicModal .choice label input:active~.checkbox{background:rgba(0,0,0,.3)}.basicModal .choice label input:active~.checkbox .iconic{opacity:.8}.basicModal .choice label input:disabled~.checkbox{background:rgba(0,0,0,.2);cursor:not-allowed}.basicModal .choice label input:disabled~.checkbox .iconic{opacity:.3}.basicModal .choice label input:disabled~.label{color:rgba(255,255,255,.3)}.basicModal .choice label .label{margin:0 0 0 18px}.basicModal .choice p{clear:both;padding:2px 0 0 35px;margin:0;width:100%;color:rgba(255,255,255,.6);font-size:13px}.basicModal .choice input.text{display:none;margin-top:5px;margin-left:35px;width:calc(100% - 35px)}.basicModal .choice input.text:disabled{cursor:not-allowed}.basicModal .select{display:inline-block;position:relative;margin:5px 7px;padding:0;width:210px;background:rgba(0,0,0,.3);color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle}.basicModal .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.basicModal .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background-color:transparent;background-image:none;-moz-appearance:none;-webkit-appearance:none;appearance:none}.basicModal .select select:focus{outline:0}.basicModal .select select option{background:#333!important;color:#fff!important;margin:0;padding:0;-webkit-transition:none;-o-transition:none;transition:none}.basicModal .version{margin:-5px 0 0;padding:0 30px 30px!important;color:rgba(255,255,255,.3);font-size:12px;text-align:right}.basicModal .version span{display:none}.basicModal .version span a{color:rgba(255,255,255,.3)}.basicModal div.version{position:absolute;top:20px;right:0}.basicModal h1{float:left;width:100%;padding:12px 0;color:#fff;font-size:16px;font-weight:700;text-align:center}.basicModal .rows{margin:0 8px 8px;width:calc(100% - 16px);height:300px;background-color:rgba(0,0,0,.4);overflow:hidden;overflow-y:auto;border-radius:3px;-webkit-box-shadow:inset 0 0 3px rgba(0,0,0,.4);box-shadow:inset 0 0 3px rgba(0,0,0,.4)}.basicModal .rows .row{float:left;padding:8px 0;width:100%;background-color:rgba(255,255,255,.02)}.basicModal .rows .row:nth-child(2n){background-color:rgba(255,255,255,0)}.basicModal .rows .row a.name{float:left;padding:5px 10px;width:70%;color:#fff;font-size:14px;white-space:nowrap;overflow:hidden}.basicModal .rows .row a.status{float:left;padding:5px 10px;width:30%;color:rgba(255,255,255,.5);font-size:14px;text-align:right;-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.basicModal .rows .row a.status.error,.basicModal .rows .row a.status.success,.basicModal .rows .row a.status.warning{-webkit-animation:none;animation:none}.basicModal .rows .row a.status.error{color:#e92a00}.basicModal .rows .row a.status.warning{color:#e4e900}.basicModal .rows .row a.status.success{color:#7ee900}.basicModal .rows .row p.notice{display:none;float:left;padding:2px 10px 5px;width:100%;color:rgba(255,255,255,.5);font-size:12px;overflow:hidden;line-height:16px}.basicModal .switch{padding:0 30px;margin-bottom:15px;width:100%;color:#fff}.basicModal .switch:first-child{padding-top:42px}.basicModal .switch input{opacity:0;width:0;height:0;margin:0}.basicModal .switch label{float:left;color:#fff;font-size:14px;font-weight:700}.basicModal .switch .slider{display:inline-block;width:42px;height:22px;left:-9px;bottom:-6px;position:relative;cursor:pointer;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);background:rgba(0,0,0,.3);-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.basicModal .switch .slider:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:3px;background-color:#2293ec;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.basicModal .switch input:checked+.slider{background-color:#2293ec}.basicModal .switch input:checked+.slider:before{-ms-transform:translateX(20px);-webkit-transform:translateX(20px);transform:translateX(20px);background-color:#fff}.basicModal .switch .slider.round{border-radius:20px}.basicModal .switch .slider.round:before{border-radius:50%}.basicModal .switch label input:disabled~.slider{background:rgba(0,0,0,.2);cursor:not-allowed}.basicModal .switch label input:disabled~.slider .iconic{opacity:.3}.basicModal .switch .label--disabled{color:rgba(255,255,255,.6)}.basicModal .switch p{clear:both;padding:2px 0 0;margin:0;width:100%;color:rgba(255,255,255,.6);font-size:13px}#sensitive_warning{background:rgba(100,0,0,.95);width:100vw;height:100vh;position:fixed;top:0;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff}#sensitive_warning h1{font-size:36px;font-weight:700;border-bottom:2px solid #fff;margin-bottom:15px}#sensitive_warning p{font-size:20px;max-width:40%;margin-top:15px}.settings_view{width:80%;max-width:600px;margin-left:auto;margin-right:auto}.setCSS,.setDefaultLicense,.setDropBox,.setLang,.setLayout,.setLocationDecoding,.setLocationDecodingCachingType,.setLocationShow,.setLocationShowPublic,.setLogin,.setMapDisplay,.setMapDisplayPublic,.setMapIncludeSubalbums,.setMapProvider,.setNSFWVisible,.setOverlay,.setOverlayType,.setPublicSearch,.setSorting{font-size:14px;width:100%;padding:5%}.setCSS p,.setDefaultLicense p,.setDropBox p,.setLang p,.setLayout p,.setLocationDecoding p,.setLocationDecodingCachingType p,.setLocationShow p,.setLocationShowPublic p,.setLogin p,.setMapDisplay p,.setMapDisplayPublic p,.setMapIncludeSubalbums p,.setMapProvider p,.setNSFWVisible p,.setOverlay p,.setOverlayType p,.setPublicSearch p,.setSorting p{margin:0 0 5%;width:100%;color:#ccc;line-height:16px}.setCSS p a,.setDefaultLicense p a,.setDropBox p a,.setLang p a,.setLayout p a,.setLocationDecoding p a,.setLocationDecodingCachingType p a,.setLocationShow p a,.setLocationShowPublic p a,.setLogin p a,.setMapDisplay p a,.setMapDisplayPublic p a,.setMapIncludeSubalbums p a,.setMapProvider p a,.setNSFWVisible p a,.setOverlay p a,.setOverlayType p a,.setPublicSearch p a,.setSorting p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.setCSS p:last-of-type,.setDefaultLicense p:last-of-type,.setDropBox p:last-of-type,.setLang p:last-of-type,.setLayout p:last-of-type,.setLocationDecoding p:last-of-type,.setLocationDecodingCachingType p:last-of-type,.setLocationShow p:last-of-type,.setLocationShowPublic p:last-of-type,.setLogin p:last-of-type,.setMapDisplay p:last-of-type,.setMapDisplayPublic p:last-of-type,.setMapIncludeSubalbums p:last-of-type,.setMapProvider p:last-of-type,.setNSFWVisible p:last-of-type,.setOverlay p:last-of-type,.setOverlayType p:last-of-type,.setPublicSearch p:last-of-type,.setSorting p:last-of-type{margin:0}.setCSS input.text,.setDefaultLicense input.text,.setDropBox input.text,.setLang input.text,.setLayout input.text,.setLocationDecoding input.text,.setLocationDecodingCachingType input.text,.setLocationShow input.text,.setLocationShowPublic input.text,.setLogin input.text,.setMapDisplay input.text,.setMapDisplayPublic input.text,.setMapIncludeSubalbums input.text,.setMapProvider input.text,.setNSFWVisible input.text,.setOverlay input.text,.setOverlayType input.text,.setPublicSearch input.text,.setSorting input.text{padding:9px 2px;width:100%;background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0}.setCSS input.text:focus,.setDefaultLicense input.text:focus,.setDropBox input.text:focus,.setLang input.text:focus,.setLayout input.text:focus,.setLocationDecoding input.text:focus,.setLocationDecodingCachingType input.text:focus,.setLocationShow input.text:focus,.setLocationShowPublic input.text:focus,.setLogin input.text:focus,.setMapDisplay input.text:focus,.setMapDisplayPublic input.text:focus,.setMapIncludeSubalbums input.text:focus,.setMapProvider input.text:focus,.setNSFWVisible input.text:focus,.setOverlay input.text:focus,.setOverlayType input.text:focus,.setPublicSearch input.text:focus,.setSorting input.text:focus{border-bottom-color:#2293ec}.setCSS input.text.error,.setDefaultLicense input.text.error,.setDropBox input.text.error,.setLang input.text.error,.setLayout input.text.error,.setLocationDecoding input.text.error,.setLocationDecodingCachingType input.text.error,.setLocationShow input.text.error,.setLocationShowPublic input.text.error,.setLogin input.text.error,.setMapDisplay input.text.error,.setMapDisplayPublic input.text.error,.setMapIncludeSubalbums input.text.error,.setMapProvider input.text.error,.setNSFWVisible input.text.error,.setOverlay input.text.error,.setOverlayType input.text.error,.setPublicSearch input.text.error,.setSorting input.text.error{border-bottom-color:#d92c34}.setCSS input.text:first-child,.setDefaultLicense input.text:first-child,.setDropBox input.text:first-child,.setLang input.text:first-child,.setLayout input.text:first-child,.setLocationDecoding input.text:first-child,.setLocationDecodingCachingType input.text:first-child,.setLocationShow input.text:first-child,.setLocationShowPublic input.text:first-child,.setLogin input.text:first-child,.setMapDisplay input.text:first-child,.setMapDisplayPublic input.text:first-child,.setMapIncludeSubalbums input.text:first-child,.setMapProvider input.text:first-child,.setNSFWVisible input.text:first-child,.setOverlay input.text:first-child,.setOverlayType input.text:first-child,.setPublicSearch input.text:first-child,.setSorting input.text:first-child{margin-top:10px}.setCSS input.text:last-child,.setDefaultLicense input.text:last-child,.setDropBox input.text:last-child,.setLang input.text:last-child,.setLayout input.text:last-child,.setLocationDecoding input.text:last-child,.setLocationDecodingCachingType input.text:last-child,.setLocationShow input.text:last-child,.setLocationShowPublic input.text:last-child,.setLogin input.text:last-child,.setMapDisplay input.text:last-child,.setMapDisplayPublic input.text:last-child,.setMapIncludeSubalbums input.text:last-child,.setMapProvider input.text:last-child,.setNSFWVisible input.text:last-child,.setOverlay input.text:last-child,.setOverlayType input.text:last-child,.setPublicSearch input.text:last-child,.setSorting input.text:last-child{margin-bottom:10px}.setCSS textarea,.setDefaultLicense textarea,.setDropBox textarea,.setLang textarea,.setLayout textarea,.setLocationDecoding textarea,.setLocationDecodingCachingType textarea,.setLocationShow textarea,.setLocationShowPublic textarea,.setLogin textarea,.setMapDisplay textarea,.setMapDisplayPublic textarea,.setMapIncludeSubalbums textarea,.setMapProvider textarea,.setNSFWVisible textarea,.setOverlay textarea,.setOverlayType textarea,.setPublicSearch textarea,.setSorting textarea{padding:9px;width:calc(100% - 18px);height:100px;background-color:transparent;color:#fff;border:1px solid #666;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0;resize:vertical}.setCSS textarea:focus,.setDefaultLicense textarea:focus,.setDropBox textarea:focus,.setLang textarea:focus,.setLayout textarea:focus,.setLocationDecoding textarea:focus,.setLocationDecodingCachingType textarea:focus,.setLocationShow textarea:focus,.setLocationShowPublic textarea:focus,.setLogin textarea:focus,.setMapDisplay textarea:focus,.setMapDisplayPublic textarea:focus,.setMapIncludeSubalbums textarea:focus,.setMapProvider textarea:focus,.setNSFWVisible textarea:focus,.setOverlay textarea:focus,.setOverlayType textarea:focus,.setPublicSearch textarea:focus,.setSorting textarea:focus{border-color:#2293ec}.setCSS .choice,.setDefaultLicense .choice,.setDropBox .choice,.setLang .choice,.setLayout .choice,.setLocationDecoding .choice,.setLocationDecodingCachingType .choice,.setLocationShow .choice,.setLocationShowPublic .choice,.setLogin .choice,.setMapDisplay .choice,.setMapDisplayPublic .choice,.setMapIncludeSubalbums .choice,.setMapProvider .choice,.setNSFWVisible .choice,.setOverlay .choice,.setOverlayType .choice,.setPublicSearch .choice,.setSorting .choice{padding:0 30px 15px;width:100%;color:#fff}.setCSS .choice:last-child,.setDefaultLicense .choice:last-child,.setDropBox .choice:last-child,.setLang .choice:last-child,.setLayout .choice:last-child,.setLocationDecoding .choice:last-child,.setLocationDecodingCachingType .choice:last-child,.setLocationShow .choice:last-child,.setLocationShowPublic .choice:last-child,.setLogin .choice:last-child,.setMapDisplay .choice:last-child,.setMapDisplayPublic .choice:last-child,.setMapIncludeSubalbums .choice:last-child,.setMapProvider .choice:last-child,.setNSFWVisible .choice:last-child,.setOverlay .choice:last-child,.setOverlayType .choice:last-child,.setPublicSearch .choice:last-child,.setSorting .choice:last-child{padding-bottom:40px}.setCSS .choice label,.setDefaultLicense .choice label,.setDropBox .choice label,.setLang .choice label,.setLayout .choice label,.setLocationDecoding .choice label,.setLocationDecodingCachingType .choice label,.setLocationShow .choice label,.setLocationShowPublic .choice label,.setLogin .choice label,.setMapDisplay .choice label,.setMapDisplayPublic .choice label,.setMapIncludeSubalbums .choice label,.setMapProvider .choice label,.setNSFWVisible .choice label,.setOverlay .choice label,.setOverlayType .choice label,.setPublicSearch .choice label,.setSorting .choice label{float:left;color:#fff;font-size:14px;font-weight:700}.setCSS .choice label input,.setDefaultLicense .choice label input,.setDropBox .choice label input,.setLang .choice label input,.setLayout .choice label input,.setLocationDecoding .choice label input,.setLocationDecodingCachingType .choice label input,.setLocationShow .choice label input,.setLocationShowPublic .choice label input,.setLogin .choice label input,.setMapDisplay .choice label input,.setMapDisplayPublic .choice label input,.setMapIncludeSubalbums .choice label input,.setMapProvider .choice label input,.setNSFWVisible .choice label input,.setOverlay .choice label input,.setOverlayType .choice label input,.setPublicSearch .choice label input,.setSorting .choice label input{position:absolute;margin:0;opacity:0}.setCSS .choice label .checkbox,.setDefaultLicense .choice label .checkbox,.setDropBox .choice label .checkbox,.setLang .choice label .checkbox,.setLayout .choice label .checkbox,.setLocationDecoding .choice label .checkbox,.setLocationDecodingCachingType .choice label .checkbox,.setLocationShow .choice label .checkbox,.setLocationShowPublic .choice label .checkbox,.setLogin .choice label .checkbox,.setMapDisplay .choice label .checkbox,.setMapDisplayPublic .choice label .checkbox,.setMapIncludeSubalbums .choice label .checkbox,.setMapProvider .choice label .checkbox,.setNSFWVisible .choice label .checkbox,.setOverlay .choice label .checkbox,.setOverlayType .choice label .checkbox,.setPublicSearch .choice label .checkbox,.setSorting .choice label .checkbox{float:left;display:block;width:16px;height:16px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.setCSS .choice label .checkbox .iconic,.setDefaultLicense .choice label .checkbox .iconic,.setDropBox .choice label .checkbox .iconic,.setLang .choice label .checkbox .iconic,.setLayout .choice label .checkbox .iconic,.setLocationDecoding .choice label .checkbox .iconic,.setLocationDecodingCachingType .choice label .checkbox .iconic,.setLocationShow .choice label .checkbox .iconic,.setLocationShowPublic .choice label .checkbox .iconic,.setLogin .choice label .checkbox .iconic,.setMapDisplay .choice label .checkbox .iconic,.setMapDisplayPublic .choice label .checkbox .iconic,.setMapIncludeSubalbums .choice label .checkbox .iconic,.setMapProvider .choice label .checkbox .iconic,.setNSFWVisible .choice label .checkbox .iconic,.setOverlay .choice label .checkbox .iconic,.setOverlayType .choice label .checkbox .iconic,.setPublicSearch .choice label .checkbox .iconic,.setSorting .choice label .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.setCSS .basicModal__button,.setDefaultLicense .basicModal__button,.setDropBox .basicModal__button,.setLang .basicModal__button,.setLayout .basicModal__button,.setLocationDecoding .basicModal__button,.setLocationDecodingCachingType .basicModal__button,.setLocationShow .basicModal__button,.setLocationShowPublic .basicModal__button,.setLogin .basicModal__button,.setMapDisplay .basicModal__button,.setMapDisplayPublic .basicModal__button,.setMapIncludeSubalbums .basicModal__button,.setMapProvider .basicModal__button,.setNSFWVisible .basicModal__button,.setOverlay .basicModal__button,.setOverlayType .basicModal__button,.setPublicSearch .basicModal__button,.setSorting .basicModal__button{color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px}.setCSS .basicModal__button:hover,.setDefaultLicense .basicModal__button:hover,.setDropBox .basicModal__button:hover,.setLang .basicModal__button:hover,.setLayout .basicModal__button:hover,.setLocationDecoding .basicModal__button:hover,.setLocationDecodingCachingType .basicModal__button:hover,.setLocationShow .basicModal__button:hover,.setLocationShowPublic .basicModal__button:hover,.setLogin .basicModal__button:hover,.setMapDisplay .basicModal__button:hover,.setMapDisplayPublic .basicModal__button:hover,.setMapIncludeSubalbums .basicModal__button:hover,.setMapProvider .basicModal__button:hover,.setNSFWVisible .basicModal__button:hover,.setOverlay .basicModal__button:hover,.setOverlayType .basicModal__button:hover,.setPublicSearch .basicModal__button:hover,.setSorting .basicModal__button:hover{background:#2293ec;color:#fff;cursor:pointer}.setCSS .basicModal__button_MORE,.setDefaultLicense .basicModal__button_MORE,.setDropBox .basicModal__button_MORE,.setLang .basicModal__button_MORE,.setLayout .basicModal__button_MORE,.setLocationDecoding .basicModal__button_MORE,.setLocationDecodingCachingType .basicModal__button_MORE,.setLocationShow .basicModal__button_MORE,.setLocationShowPublic .basicModal__button_MORE,.setLogin .basicModal__button_MORE,.setMapDisplay .basicModal__button_MORE,.setMapDisplayPublic .basicModal__button_MORE,.setMapIncludeSubalbums .basicModal__button_MORE,.setMapProvider .basicModal__button_MORE,.setNSFWVisible .basicModal__button_MORE,.setOverlay .basicModal__button_MORE,.setOverlayType .basicModal__button_MORE,.setPublicSearch .basicModal__button_MORE,.setSorting .basicModal__button_MORE{color:#b22027;border-radius:5px}.setCSS .basicModal__button_MORE:hover,.setDefaultLicense .basicModal__button_MORE:hover,.setDropBox .basicModal__button_MORE:hover,.setLang .basicModal__button_MORE:hover,.setLayout .basicModal__button_MORE:hover,.setLocationDecoding .basicModal__button_MORE:hover,.setLocationDecodingCachingType .basicModal__button_MORE:hover,.setLocationShow .basicModal__button_MORE:hover,.setLocationShowPublic .basicModal__button_MORE:hover,.setLogin .basicModal__button_MORE:hover,.setMapDisplay .basicModal__button_MORE:hover,.setMapDisplayPublic .basicModal__button_MORE:hover,.setMapIncludeSubalbums .basicModal__button_MORE:hover,.setMapProvider .basicModal__button_MORE:hover,.setNSFWVisible .basicModal__button_MORE:hover,.setOverlay .basicModal__button_MORE:hover,.setOverlayType .basicModal__button_MORE:hover,.setPublicSearch .basicModal__button_MORE:hover,.setSorting .basicModal__button_MORE:hover{background:#b22027;color:#fff}.setCSS input:hover,.setDefaultLicense input:hover,.setDropBox input:hover,.setLang input:hover,.setLayout input:hover,.setLocationDecoding input:hover,.setLocationDecodingCachingType input:hover,.setLocationShow input:hover,.setLocationShowPublic input:hover,.setLogin input:hover,.setMapDisplay input:hover,.setMapDisplayPublic input:hover,.setMapIncludeSubalbums input:hover,.setMapProvider input:hover,.setNSFWVisible input:hover,.setOverlay input:hover,.setOverlayType input:hover,.setPublicSearch input:hover,.setSorting input:hover{border-bottom:1px solid #2293ec}.setCSS .select,.setDefaultLicense .select,.setDropBox .select,.setLang .select,.setLayout .select,.setLocationDecoding .select,.setLocationDecodingCachingType .select,.setLocationShow .select,.setLocationShowPublic .select,.setLogin .select,.setMapDisplay .select,.setMapDisplayPublic .select,.setMapIncludeSubalbums .select,.setMapProvider .select,.setNSFWVisible .select,.setOverlay .select,.setOverlayType .select,.setPublicSearch .select,.setSorting .select{position:relative;margin:1px 5px;padding:0;width:110px;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.setCSS .select select,.setDefaultLicense .select select,.setDropBox .select select,.setLang .select select,.setLayout .select select,.setLocationDecoding .select select,.setLocationDecodingCachingType .select select,.setLocationShow .select select,.setLocationShowPublic .select select,.setLogin .select select,.setMapDisplay .select select,.setMapDisplayPublic .select select,.setMapIncludeSubalbums .select select,.setMapProvider .select select,.setNSFWVisible .select select,.setOverlay .select select,.setOverlayType .select select,.setPublicSearch .select select,.setSorting .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background-color:transparent;background-image:none;-moz-appearance:none;-webkit-appearance:none;appearance:none}.setCSS .select select option,.setDefaultLicense .select select option,.setDropBox .select select option,.setLang .select select option,.setLayout .select select option,.setLocationDecoding .select select option,.setLocationDecodingCachingType .select select option,.setLocationShow .select select option,.setLocationShowPublic .select select option,.setLogin .select select option,.setMapDisplay .select select option,.setMapDisplayPublic .select select option,.setMapIncludeSubalbums .select select option,.setMapProvider .select select option,.setNSFWVisible .select select option,.setOverlay .select select option,.setOverlayType .select select option,.setPublicSearch .select select option,.setSorting .select select option{margin:0;padding:0;background:#fff;color:#333;-webkit-transition:none;-o-transition:none;transition:none}.setCSS .select select:disabled,.setDefaultLicense .select select:disabled,.setDropBox .select select:disabled,.setLang .select select:disabled,.setLayout .select select:disabled,.setLocationDecoding .select select:disabled,.setLocationDecodingCachingType .select select:disabled,.setLocationShow .select select:disabled,.setLocationShowPublic .select select:disabled,.setLogin .select select:disabled,.setMapDisplay .select select:disabled,.setMapDisplayPublic .select select:disabled,.setMapIncludeSubalbums .select select:disabled,.setMapProvider .select select:disabled,.setNSFWVisible .select select:disabled,.setOverlay .select select:disabled,.setOverlayType .select select:disabled,.setPublicSearch .select select:disabled,.setSorting .select select:disabled{color:#000;cursor:not-allowed}.setCSS .select::after,.setDefaultLicense .select::after,.setDropBox .select::after,.setLang .select::after,.setLayout .select::after,.setLocationDecoding .select::after,.setLocationDecodingCachingType .select::after,.setLocationShow .select::after,.setLocationShowPublic .select::after,.setLogin .select::after,.setMapDisplay .select::after,.setMapDisplayPublic .select::after,.setMapIncludeSubalbums .select::after,.setMapProvider .select::after,.setNSFWVisible .select::after,.setOverlay .select::after,.setOverlayType .select::after,.setPublicSearch .select::after,.setSorting .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.setCSS .switch,.setDefaultLicense .switch,.setDropBox .switch,.setLang .switch,.setLayout .switch,.setLocationDecoding .switch,.setLocationDecodingCachingType .switch,.setLocationShow .switch,.setLocationShowPublic .switch,.setLogin .switch,.setMapDisplay .switch,.setMapDisplayPublic .switch,.setMapIncludeSubalbums .switch,.setMapProvider .switch,.setNSFWVisible .switch,.setOverlay .switch,.setOverlayType .switch,.setPublicSearch .switch,.setSorting .switch{position:relative;display:inline-block;width:42px;height:22px;bottom:4px}.setCSS .switch input,.setDefaultLicense .switch input,.setDropBox .switch input,.setLang .switch input,.setLayout .switch input,.setLocationDecoding .switch input,.setLocationDecodingCachingType .switch input,.setLocationShow .switch input,.setLocationShowPublic .switch input,.setLogin .switch input,.setMapDisplay .switch input,.setMapDisplayPublic .switch input,.setMapIncludeSubalbums .switch input,.setMapProvider .switch input,.setNSFWVisible .switch input,.setOverlay .switch input,.setOverlayType .switch input,.setPublicSearch .switch input,.setSorting .switch input{opacity:0;width:0;height:0}.setCSS .slider,.setDefaultLicense .slider,.setDropBox .slider,.setLang .slider,.setLayout .slider,.setLocationDecoding .slider,.setLocationDecodingCachingType .slider,.setLocationShow .slider,.setLocationShowPublic .slider,.setLogin .slider,.setMapDisplay .slider,.setMapDisplayPublic .slider,.setMapIncludeSubalbums .slider,.setMapProvider .slider,.setNSFWVisible .slider,.setOverlay .slider,.setOverlayType .slider,.setPublicSearch .slider,.setSorting .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);background:rgba(0,0,0,.3);-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.setCSS .slider:before,.setDefaultLicense .slider:before,.setDropBox .slider:before,.setLang .slider:before,.setLayout .slider:before,.setLocationDecoding .slider:before,.setLocationDecodingCachingType .slider:before,.setLocationShow .slider:before,.setLocationShowPublic .slider:before,.setLogin .slider:before,.setMapDisplay .slider:before,.setMapDisplayPublic .slider:before,.setMapIncludeSubalbums .slider:before,.setMapProvider .slider:before,.setNSFWVisible .slider:before,.setOverlay .slider:before,.setOverlayType .slider:before,.setPublicSearch .slider:before,.setSorting .slider:before{position:absolute;content:"";height:14px;width:14px;left:3px;bottom:3px;background-color:#2293ec;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.setCSS input:checked+.slider,.setDefaultLicense input:checked+.slider,.setDropBox input:checked+.slider,.setLang input:checked+.slider,.setLayout input:checked+.slider,.setLocationDecoding input:checked+.slider,.setLocationDecodingCachingType input:checked+.slider,.setLocationShow input:checked+.slider,.setLocationShowPublic input:checked+.slider,.setLogin input:checked+.slider,.setMapDisplay input:checked+.slider,.setMapDisplayPublic input:checked+.slider,.setMapIncludeSubalbums input:checked+.slider,.setMapProvider input:checked+.slider,.setNSFWVisible input:checked+.slider,.setOverlay input:checked+.slider,.setOverlayType input:checked+.slider,.setPublicSearch input:checked+.slider,.setSorting input:checked+.slider{background-color:#2293ec}.setCSS input:checked+.slider:before,.setDefaultLicense input:checked+.slider:before,.setDropBox input:checked+.slider:before,.setLang input:checked+.slider:before,.setLayout input:checked+.slider:before,.setLocationDecoding input:checked+.slider:before,.setLocationDecodingCachingType input:checked+.slider:before,.setLocationShow input:checked+.slider:before,.setLocationShowPublic input:checked+.slider:before,.setLogin input:checked+.slider:before,.setMapDisplay input:checked+.slider:before,.setMapDisplayPublic input:checked+.slider:before,.setMapIncludeSubalbums input:checked+.slider:before,.setMapProvider input:checked+.slider:before,.setNSFWVisible input:checked+.slider:before,.setOverlay input:checked+.slider:before,.setOverlayType input:checked+.slider:before,.setPublicSearch input:checked+.slider:before,.setSorting input:checked+.slider:before{-ms-transform:translateX(20px);-webkit-transform:translateX(20px);transform:translateX(20px);background-color:#fff}.setCSS .slider.round,.setDefaultLicense .slider.round,.setDropBox .slider.round,.setLang .slider.round,.setLayout .slider.round,.setLocationDecoding .slider.round,.setLocationDecodingCachingType .slider.round,.setLocationShow .slider.round,.setLocationShowPublic .slider.round,.setLogin .slider.round,.setMapDisplay .slider.round,.setMapDisplayPublic .slider.round,.setMapIncludeSubalbums .slider.round,.setMapProvider .slider.round,.setNSFWVisible .slider.round,.setOverlay .slider.round,.setOverlayType .slider.round,.setPublicSearch .slider.round,.setSorting .slider.round{border-radius:20px}.setCSS .slider.round:before,.setDefaultLicense .slider.round:before,.setDropBox .slider.round:before,.setLang .slider.round:before,.setLayout .slider.round:before,.setLocationDecoding .slider.round:before,.setLocationDecodingCachingType .slider.round:before,.setLocationShow .slider.round:before,.setLocationShowPublic .slider.round:before,.setLogin .slider.round:before,.setMapDisplay .slider.round:before,.setMapDisplayPublic .slider.round:before,.setMapIncludeSubalbums .slider.round:before,.setMapProvider .slider.round:before,.setNSFWVisible .slider.round:before,.setOverlay .slider.round:before,.setOverlayType .slider.round:before,.setPublicSearch .slider.round:before,.setSorting .slider.round:before{border-radius:50%}#fullSettings{width:100%;max-width:700px;margin-left:auto;margin-right:auto}#fullSettings .setting_category{font-size:20px;width:100%;padding-top:10px;padding-left:4px;border-bottom:1px dotted #222;margin-top:20px;color:#fff;font-weight:700;text-transform:capitalize}#fullSettings .setting_line{font-size:14px;width:100%}#fullSettings .setting_line:first-child,#fullSettings .setting_line:last-child{padding-top:50px}#fullSettings .setting_line p{min-width:550px;margin:0;color:#ccc;display:inline-block;width:100%}#fullSettings .setting_line p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}#fullSettings .setting_line p:last-of-type{margin:0}#fullSettings .setting_line p.warning{margin-bottom:30px;color:#d92c34;font-weight:700;font-size:18px;text-align:justify;line-height:22px}#fullSettings .setting_line span.text{display:inline-block;padding:9px 4px;width:calc(50% - 12px);background-color:transparent;color:#fff;border:none}#fullSettings .setting_line span.text_icon{width:5%}#fullSettings .setting_line span.text_icon .iconic{width:15px;height:14px;margin:0 10px 0 1px;fill:#fff}#fullSettings .setting_line input.text{padding:9px 2px;width:calc(50% - 4px);background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0}#fullSettings .setting_line input.text:focus{border-bottom-color:#2293ec}#fullSettings .setting_line input:hover{border-bottom:1px solid #2293ec}#fullSettings .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:100%;min-width:50px;border-radius:5px}#fullSettings .basicModal__button:hover{cursor:pointer}#fullSettings .basicModal__button_SAVE{color:#b22027}#fullSettings .basicModal__button_SAVE:hover{background:#b22027;color:#fff}.users_view{width:80%;max-width:700px;margin-left:auto;margin-right:auto}.users_view_line{font-size:14px;width:100%}.users_view_line:first-child,.users_view_line:last-child{padding-top:50px}.users_view_line p{width:550px;margin:0 0 5%;color:#ccc;display:inline-block}.users_view_line p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.users_view_line p.line,.users_view_line p:last-of-type{margin:0}.users_view_line span.text{display:inline-block;padding:9px 4px;width:40%;background-color:transparent;color:#fff;border:none}.users_view_line span.text_icon{width:5%}.users_view_line span.text_icon .iconic{width:15px;height:14px;margin:0 15px 0 1px;fill:#fff}.users_view_line input.text{padding:9px 2px;width:40%;background-color:transparent;color:#fff;border:none;border-bottom:1px solid #222;border-radius:0;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.05);box-shadow:0 1px 0 rgba(255,255,255,.05);outline:0;margin-bottom:10px}.users_view_line input.text:focus{border-bottom-color:#2293ec}.users_view_line input.text.error{border-bottom-color:#d92c34}.users_view_line .choice label input:checked~.checkbox .iconic{opacity:1;-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.users_view_line .choice{display:inline-block;width:5%;color:#fff}.users_view_line .choice input{position:absolute;margin:0;opacity:0}.users_view_line .choice .checkbox{display:inline-block;width:16px;height:16px;margin-top:10px;margin-left:2px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.users_view_line .choice .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.users_view_line .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:10%;min-width:50px;border-radius:0}.users_view_line .basicModal__button:hover{cursor:pointer}.users_view_line .basicModal__button_OK{color:#2293ec;border-radius:5px 0 0 5px}.users_view_line .basicModal__button_OK:hover{background:#2293ec;color:#fff}.users_view_line .basicModal__button_DEL{color:#b22027;border-radius:0 5px 5px 0}.users_view_line .basicModal__button_DEL:hover{background:#b22027;color:#fff}.users_view_line .basicModal__button_CREATE{width:20%;color:#090;border-radius:5px}.users_view_line .basicModal__button_CREATE:hover{background:#090;color:#fff}.users_view_line input:hover{border-bottom:1px solid #2293ec}.users_view_line .select{position:relative;margin:1px 5px;padding:0;width:110px;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.users_view_line .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background:0 0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.users_view_line .select select option{margin:0;padding:0;background:#fff;color:#333;-webkit-transition:none;-o-transition:none;transition:none}.users_view_line .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.u2f_view{width:80%;max-width:700px;margin-left:auto;margin-right:auto}.u2f_view_line{font-size:14px;width:100%}.u2f_view_line:first-child,.u2f_view_line:last-child{padding-top:50px}.u2f_view_line p{width:550px;margin:0 0 5%;color:#ccc;display:inline-block}.u2f_view_line p a{color:rgba(255,255,255,.9);text-decoration:none;border-bottom:1px dashed #888}.u2f_view_line p.line,.u2f_view_line p:last-of-type{margin:0}.u2f_view_line p.single{text-align:center}.u2f_view_line span.text{display:inline-block;padding:9px 4px;width:80%;background-color:transparent;color:#fff;border:none}.u2f_view_line span.text_icon{width:5%}.u2f_view_line span.text_icon .iconic{width:15px;height:14px;margin:0 15px 0 1px;fill:#fff}.u2f_view_line .choice label input:checked~.checkbox .iconic{opacity:1;-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.u2f_view_line .choice{display:inline-block;width:5%;color:#fff}.u2f_view_line .choice input{position:absolute;margin:0;opacity:0}.u2f_view_line .choice .checkbox{display:inline-block;width:16px;height:16px;margin-top:10px;margin-left:2px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.u2f_view_line .choice .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.u2f_view_line .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:20%;min-width:50px;border-radius:0}.u2f_view_line .basicModal__button:hover{cursor:pointer}.u2f_view_line .basicModal__button_OK{color:#2293ec;border-radius:5px 0 0 5px}.u2f_view_line .basicModal__button_OK:hover{background:#2293ec;color:#fff}.u2f_view_line .basicModal__button_DEL{color:#b22027;border-radius:0 5px 5px 0}.u2f_view_line .basicModal__button_DEL:hover{background:#b22027;color:#fff}.u2f_view_line .basicModal__button_CREATE{width:100%;color:#090;border-radius:5px}.u2f_view_line .basicModal__button_CREATE:hover{background:#090;color:#fff}.u2f_view_line input:hover{border-bottom:1px solid #2293ec}.u2f_view_line .select{position:relative;margin:1px 5px;padding:0;width:110px;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:11px;line-height:16px;overflow:hidden;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.u2f_view_line .select select{margin:0;padding:4px 8px;width:120%;color:#fff;font-size:11px;line-height:16px;border:0;outline:0;-webkit-box-shadow:none;box-shadow:none;border-radius:0;background:0 0;-moz-appearance:none;-webkit-appearance:none;appearance:none}.u2f_view_line .select select option{margin:0;padding:0;background:#fff;color:#333;-webkit-transition:none;-o-transition:none;transition:none}.u2f_view_line .select::after{position:absolute;content:"≡";right:8px;top:4px;color:#2293ec;font-size:16px;line-height:16px;font-weight:700;pointer-events:none}.signInKeyLess{display:block;padding:10px;position:absolute;cursor:pointer}.signInKeyLess .iconic{display:inline-block;margin:0;width:20px;height:20px;fill:#818181}.signInKeyLess .iconic.ionicons{margin:0 8px -2px 0;width:18px;height:18px}.signInKeyLess:hover .iconic{fill:#fff}.logs_diagnostics_view{width:1200px;margin-left:auto;margin-right:auto;color:#ccc;font-size:12px;line-height:14px}.logs_diagnostics_view pre{font-family:monospace;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.clear_logs_update{width:1200px;padding-left:30px;margin:20px auto}.clear_logs_update .basicModal__button,.logs_diagnostics_view .basicModal__button{color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px}.clear_logs_update .iconic,.logs_diagnostics_view .iconic{display:inline-block;margin:0 10px 0 1px;width:13px;height:12px;fill:#2293ec}.clear_logs_update .button_left,.logs_diagnostics_view .button_left{margin-left:24px;width:400px}.sharing_view{width:600px;margin-left:auto;margin-right:auto;margin-top:20px}.sharing_view .sharing_view_line{width:100%;display:block;clear:left}.sharing_view .col-xs-1,.sharing_view .col-xs-10,.sharing_view .col-xs-11,.sharing_view .col-xs-12,.sharing_view .col-xs-2,.sharing_view .col-xs-3,.sharing_view .col-xs-4,.sharing_view .col-xs-5,.sharing_view .col-xs-6,.sharing_view .col-xs-7,.sharing_view .col-xs-8,.sharing_view .col-xs-9{float:left;position:relative;min-height:1px}.sharing_view .col-xs-2{width:10%;padding-right:3%;padding-left:3%}.sharing_view .col-xs-5{width:42%}.sharing_view .btn-block+.btn-block{margin-top:5px}.sharing_view .btn-block{display:block;width:100%}.sharing_view .btn-default{color:#2293ec;border-color:#2293ec;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.sharing_view .btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.sharing_view select[multiple],.sharing_view select[size]{height:150px}.sharing_view .form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;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 .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}.sharing_view .iconic{display:inline-block;width:15px;height:14px;fill:#2293ec}.sharing_view .iconic .iconic.ionicons{margin:0 8px -2px 0;width:18px;height:18px}.sharing_view .blue .iconic{fill:#2293ec}.sharing_view .grey .iconic{fill:#b4b4b4}.sharing_view p{width:100%;color:#ccc;text-align:center;font-size:14px;display:block}.sharing_view p.with{padding:15px 0}.sharing_view span.text{display:inline-block;padding:0 2px;width:40%;background-color:transparent;color:#fff;border:none}.sharing_view span.text:last-of-type{width:5%}.sharing_view span.text .iconic{width:15px;height:14px;margin:0 10px 0 1px;fill:#fff}.sharing_view .basicModal__button{margin-top:10px;color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px}.sharing_view .basicModal__button:hover{background:#2293ec;color:#fff;cursor:pointer}.sharing_view input:hover{border-bottom:1px solid #2293ec}.sharing_view .choice label input:checked~.checkbox .iconic{opacity:1;-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1)}.sharing_view .choice{display:inline-block;width:5%;margin:0 10px;color:#fff}.sharing_view .choice input{position:absolute;margin:0;opacity:0}.sharing_view .choice .checkbox{display:inline-block;width:16px;height:16px;margin-top:10px;margin-left:2px;background:rgba(0,0,0,.5);border-radius:3px;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.7);box-shadow:0 0 0 1px rgba(0,0,0,.7)}.sharing_view .choice .checkbox .iconic{-webkit-box-sizing:border-box;box-sizing:border-box;fill:#2293ec;padding:2px;opacity:0;-ms-transform:scale(0);-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1),-webkit-transform .2s cubic-bezier(.51,.92,.24,1);-o-transition:opacity .2s cubic-bezier(.51,.92,.24,1),transform .2s cubic-bezier(.51,.92,.24,1)}.sharing_view .select{position:relative;padding:0;color:#fff;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.02);box-shadow:0 1px 0 rgba(255,255,255,.02);font-size:14px;line-height:16px;outline:0;vertical-align:middle;background:rgba(0,0,0,.3);display:inline-block}.sharing_view .borderBlue{border:1px solid #2293ec}#multiselect{position:absolute;background-color:rgba(0,94,204,.3);border:1px solid #005ecc;border-radius:3px;z-index:5}.justified-layout{margin:30px 0 0 30px;width:100%;position:relative}.unjustified-layout{margin:25px -5px -5px 25px;width:100%;position:relative;overflow:hidden}.justified-layout>.photo{position:absolute;--lychee-default-height:320px;margin:0}.unjustified-layout>.photo{float:left;max-height:240px;margin:5px}.justified-layout>.photo>.thumbimg,.justified-layout>.photo>.thumbimg>img,.unjustified-layout>.photo>.thumbimg,.unjustified-layout>.photo>.thumbimg>img{width:100%;height:100%;border:none;-o-object-fit:cover;object-fit:cover}.justified-layout>.photo>.overlay,.unjustified-layout>.photo>.overlay{width:100%;bottom:0;margin:0}.justified-layout>.photo>.overlay>h1,.unjustified-layout>.photo>.overlay>h1{width:auto;margin-right:15px}#footer{z-index:3;left:0;right:0;bottom:0;-webkit-transition:color .3s,opacity .3s ease-out,margin-left .5s,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s,margin-left .5s,-webkit-transform .3s ease-out,-webkit-box-shadow .3s;-o-transition:color .3s,opacity .3s ease-out,transform .3s ease-out,box-shadow .3s,margin-left .5s;padding:5px 0;text-align:center;position:absolute;background:#1d1d1d}#footer p{color:#ccc;font-weight:400;font-size:.75em;line-height:26px}#footer p a,#footer p a:visited{color:#ccc}#footer p.home_copyright,#footer p.hosted_by{text-transform:uppercase}.hide_footer{display:none}@font-face{font-family:socials;src:url(fonts/socials.eot?egvu10);src:url(fonts/socials.eot?egvu10#iefix) format("embedded-opentype"),url(fonts/socials.ttf?egvu10) format("truetype"),url(fonts/socials.woff?egvu10) format("woff"),url(fonts/socials.svg?egvu10#socials) format("svg");font-weight:400;font-style:normal}#socials_footer{padding:0;text-align:center;left:0;right:0}.socialicons{display:inline-block;font-size:18px;font-family:socials!important;speak:none;color:#ccc;text-decoration:none;margin:15px 15px 5px;transition:.3s;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s}.socialicons:hover{color:#b5b5b5;-ms-transform:scale(1.3);transform:scale(1.3);-webkit-transform:scale(1.3)}#twitter:before{content:"\ea96"}#instagram:before{content:"\ea92"}#youtube:before{content:"\ea9d"}#flickr:before{content:"\eaa4"}#facebook:before{content:"\ea91"}.directLinks input.text{width:calc(100% - 30px);color:rgba(255,255,255,.6);padding:2px}.directLinks .basicModal__button{display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);width:25px;height:25px;border-radius:5px;border-bottom:0;padding:3px 0 0;margin-top:-5px;float:right}.directLinks .basicModal__button .iconic{fill:#2293ec;width:16px;height:16px}.directLinks .basicModal__button:hover{background:#2293ec;cursor:pointer}.directLinks .basicModal__button:hover .iconic{fill:#fff}.directLinks .imageLinks{margin-top:-30px;padding-bottom:40px}.directLinks .imageLinks p{padding:10px 30px 0;font-size:12px;line-height:15px}.directLinks .imageLinks .basicModal__button{margin-top:-8px}.downloads{padding:30px}.downloads .basicModal__button{color:#2293ec;display:inline-block;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.02),inset 1px 0 0 rgba(0,0,0,.2);border-radius:5px;border-bottom:0;margin:5px 0}.downloads .basicModal__button .iconic{fill:#2293ec;margin:0 10px 0 1px;width:11px;height:10px}.downloads .basicModal__button:hover{color:#fff;background:#2293ec;cursor:pointer}.downloads .basicModal__button:hover .iconic{fill:#fff}.leaflet-image-layer,.leaflet-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane,.leaflet-pane>canvas,.leaflet-pane>svg,.leaflet-tile,.leaflet-tile-container,.leaflet-zoom-box{position:absolute;left:0;top:0}.leaflet-container{overflow:hidden;-webkit-tap-highlight-color:transparent;background:#ddd;outline:0;font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::-moz-selection{background:0 0}.leaflet-tile::selection{background:0 0}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:1600px;height:1600px;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-overlay-pane svg,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer{max-width:none!important;max-height:none!important}.leaflet-container.leaflet-touch-zoom{-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{-ms-touch-action:pinch-zoom;touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{-ms-touch-action:none;touch-action:none}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4);color:#0078a8}.leaflet-tile{-webkit-filter:inherit;filter:inherit;visibility:hidden}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{width:0;height:0;-webkit-box-sizing:border-box;box-sizing:border-box;z-index:800}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto;float:left;clear:both}.leaflet-bottom,.leaflet-top{position:absolute;z-index:1000;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-right .leaflet-control{float:right;margin-right:10px}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-fade-anim .leaflet-tile{will-change:opacity}.leaflet-fade-anim .leaflet-popup{opacity:0;-webkit-transition:opacity .2s linear;-o-transition:opacity .2s linear;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.leaflet-zoom-anim .leaflet-zoom-animated{will-change:transform;-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1);-o-transition:transform .25s cubic-bezier(0,0,.25,1);transition:transform .25s cubic-bezier(0,0,.25,1),-webkit-transform .25s cubic-bezier(0,0,.25,1)}.leaflet-pan-anim .leaflet-tile,.leaflet-zoom-anim .leaflet-tile{-webkit-transition:none;-o-transition:none;transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:-webkit-grab;cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-control,.leaflet-popup-pane{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.leaflet-image-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-image-layer.leaflet-interactive,.leaflet-marker-icon.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container a.leaflet-active{outline:orange solid 2px}.leaflet-zoom-box{border:2px dotted #38f;background:rgba(255,255,255,.5)}.leaflet-bar{-webkit-box-shadow:0 1px 5px rgba(0,0,0,.65);box-shadow:0 1px 5px rgba(0,0,0,.65);border-radius:4px}.leaflet-bar a,.leaflet-bar a:hover{background-color:#fff;border-bottom:1px solid #ccc;width:26px;height:26px;line-height:26px;display:block;text-align:center;text-decoration:none;color:#000}.leaflet-bar a,.leaflet-control-layers-toggle{background-position:50% 50%;background-repeat:no-repeat;display:block}.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;border-bottom:none}.leaflet-bar a.leaflet-disabled{cursor:default;background-color:#f4f4f4;color:#bbb}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:bold 18px 'Lucida Console',Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{-webkit-box-shadow:0 1px 5px rgba(0,0,0,.4);box-shadow:0 1px 5px rgba(0,0,0,.4);background:#fff;border-radius:5px}.leaflet-control-layers-toggle{background-image:url(images/layers.png);width:36px;height:36px}.leaflet-retina .leaflet-control-layers-toggle{background-image:url(images/layers-2x.png);background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;color:#333;background:#fff}.leaflet-control-layers-scrollbar{overflow-y:scroll;overflow-x:hidden;padding-right:5px}.leaflet-control-layers-selector{margin-top:2px;position:relative;top:1px}.leaflet-control-layers label{display:block}.leaflet-control-layers-separator{height:0;border-top:1px solid #ddd;margin:5px -10px 5px -6px}.leaflet-default-icon-path{background-image:url(images/marker-icon.png)}.leaflet-container .leaflet-control-attribution{background:rgba(255,255,255,.7);margin:0}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333}.leaflet-control-attribution a{text-decoration:none}.leaflet-control-attribution a:hover{text-decoration:underline}.leaflet-container .leaflet-control-attribution,.leaflet-container .leaflet-control-scale{font-size:11px}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{border:2px solid #777;border-top:none;line-height:1.1;padding:2px 5px 1px;font-size:11px;white-space:nowrap;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;background:rgba(255,255,255,.5)}.leaflet-control-scale-line:not(:first-child){border-top:2px solid #777;border-bottom:none;margin-top:-2px}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers{-webkit-box-shadow:none;box-shadow:none}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}.leaflet-popup-content-wrapper{padding:1px;text-align:left;border-radius:12px}.leaflet-popup-content{margin:13px 19px;line-height:1.4}.leaflet-popup-content p{margin:18px 0}.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;color:#333;-webkit-box-shadow:0 3px 14px rgba(0,0,0,.4);box-shadow:0 3px 14px rgba(0,0,0,.4)}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;padding:4px 4px 0 0;border:none;text-align:center;width:18px;height:14px;font:700 16px/14px Tahoma,Verdana,sans-serif;color:#c3c3c3;text-decoration:none;background:0 0}.leaflet-container a.leaflet-popup-close-button:hover{color:#999}.leaflet-popup-scrolled{overflow:auto;border-bottom:1px solid #ddd;border-top:1px solid #ddd}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto}.leaflet-oldie .leaflet-popup-tip-container{margin-top:-1px}.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{background:#fff;border:1px solid #666}.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 1px 3px rgba(0,0,0,.4)}.leaflet-tooltip.leaflet-clickable{cursor:pointer;pointer-events:auto}.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before,.leaflet-tooltip-top:before{position:absolute;pointer-events:none;border:6px solid transparent;background:0 0;content:""}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-12px;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-12px;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-12px;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-12px;border-right-color:#fff}.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-anim .leaflet-marker-shadow{-webkit-transition:opacity .3s ease-in,-webkit-transform .3s ease-out;-o-transition:transform .3s ease-out,opacity .3s ease-in;transition:transform .3s ease-out,opacity .3s ease-in,-webkit-transform .3s ease-out}.leaflet-cluster-spider-leg{-webkit-transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in;-o-transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in;transition:stroke-dashoffset .3s ease-out,stroke-opacity .3s ease-in}.leaflet-marker-photo{border:2px solid #fff;-webkit-box-shadow:3px 3px 10px #888;box-shadow:3px 3px 10px #888}.leaflet-marker-photo div{width:100%;height:100%;background-size:cover;background-position:center center;background-repeat:no-repeat}.leaflet-marker-photo b{position:absolute;top:-7px;right:-11px;color:#555;background-color:#fff;border-radius:8px;height:12px;min-width:12px;line-height:12px;text-align:center;padding:3px;-webkit-box-shadow:0 3px 14px rgba(0,0,0,.4);box-shadow:0 3px 14px rgba(0,0,0,.4)} \ No newline at end of file diff --git a/public/dist/main.js b/public/dist/main.js index f590703988..0c98d75b86 100644 --- a/public/dist/main.js +++ b/public/dist/main.js @@ -372,7 +372,7 @@ var _templateObject = _taggedTemplateLiteral(["

", " ", ""], ["

", "

"]), _templateObject75 = _taggedTemplateLiteral(["

"], ["

"]), _templateObject76 = _taggedTemplateLiteral(["\n\t\t\t

\n\t\t\t\t", "\n\t\t\t\t\n\t\t\t

\n\t\t"], ["\n\t\t\t

\n\t\t\t\t", "\n\t\t\t\t\n\t\t\t

\n\t\t"]), - _templateObject77 = _taggedTemplateLiteral(["\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t"], ["\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t"]), + _templateObject77 = _taggedTemplateLiteral(["\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t"], ["\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\t", "\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t"]), _templateObject78 = _taggedTemplateLiteral(["url(\"", "\")"], ["url(\"", "\")"]), _templateObject79 = _taggedTemplateLiteral(["linear-gradient(to bottom, rgba(0, 0, 0, .4), rgba(0, 0, 0, .4)), url(\"", "\")"], ["linear-gradient(to bottom, rgba(0, 0, 0, .4), rgba(0, 0, 0, .4)), url(\"", "\")"]), _templateObject80 = _taggedTemplateLiteral(["\n\t\t\t
\n\t\t\t\t", "\n\t\t\t
\n\t\t\t"], ["\n\t\t\t
\n\t\t\t\t", "\n\t\t\t
\n\t\t\t"]), @@ -4223,6 +4223,8 @@ var lychee = { landing_page_enabled: false, // is landing page enabled ? delete_imported: false, + import_via_symlink: false, + skip_duplicates: false, nsfw_visible: true, nsfw_visible_saved: true, @@ -4231,7 +4233,7 @@ var lychee = { album_subtitle_type: "oldstyle", - upload_processing_limit: 2, + upload_processing_limit: 4, // this is device specific config, in this case default is Desktop. header_auto_hide: true, @@ -4307,6 +4309,8 @@ lychee.aboutDialog = function () { }; lychee.init = function () { + var exitview = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + lychee.adjustContentHeight(); api.post("Session::init", {}, function (data) { @@ -4395,7 +4399,8 @@ lychee.init = function () { lychee.downloadable = data.config.downloadable && data.config.downloadable === "1" || false; lychee.share_button_visible = data.config.share_button_visible && data.config.share_button_visible === "1" || false; lychee.delete_imported = data.config.delete_imported && data.config.delete_imported === "1"; - + lychee.import_via_symlink = data.config.import_via_symlink && data.config.import_via_symlink === "1"; + lychee.skip_duplicates = data.config.skip_duplicates && data.config.skip_duplicates === "1"; lychee.nsfw_visible = data.config.nsfw_visible && data.config.nsfw_visible === "1" || false; lychee.nsfw_blur = data.config.nsfw_blur && data.config.nsfw_blur === "1" || false; lychee.nsfw_warning = data.config.nsfw_warning_admin && data.config.nsfw_warning_admin === "1" || false; @@ -4424,7 +4429,10 @@ lychee.init = function () { lychee.admin = !lychee.api_V2; lychee.nsfw_visible_saved = lychee.nsfw_visible; - lychee.upload_processing_limit = parseInt(data.config.upload_processing_limit) || 4; + lychee.upload_processing_limit = parseInt(data.config.upload_processing_limit); + // when null or any non stringified numeric value is sent from the server we get NaN. + // we fix this. + if (isNaN(lychee.upload_processing_limit)) lychee.upload_processing_limit = 4; // leftMenu leftMenu.build(); @@ -4492,8 +4500,10 @@ lychee.init = function () { // should not happen. } - $(window).bind("popstate", lychee.load); - lychee.load(); + if (exitview) { + $(window).bind("popstate", lychee.load); + lychee.load(); + } }); }; @@ -5486,6 +5496,9 @@ lychee.locale = { UPLOAD_FAILED_ERROR: "Upload failed. Server returned an error!", UPLOAD_FAILED_WARNING: "Upload failed. Server returned a warning!", UPLOAD_SKIPPED: "Skipped", + UPLOAD_UPDATED: "Updated", + UPLOAD_IMPORT_SKIPPED_DUPLICATE: "This photo has been skipped because it's already in your library.", + UPLOAD_IMPORT_RESYNCED_DUPLICATE: "This photo has been skipped because it's already in your library, but its metadata has been updated.", UPLOAD_ERROR_CONSOLE: "Please take a look at the console of your browser for further details.", UPLOAD_UNKNOWN: "Server returned an unknown response. Please take a look at the console of your browser for further details.", UPLOAD_ERROR_UNKNOWN: "Upload failed. Server returned an unkown error!", @@ -7897,11 +7910,14 @@ settings.changeCSS = function () { }; settings.save = function (params) { + var exitview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + api.post("Settings::saveAll", params, function (data) { if (data === true) { loadingBar.show("success", lychee.locale["SETTINGS_SUCCESS_UPDATE"]); view.full_settings.init(); - // lychee.init(); + // re-read settings + lychee.init(exitview); } else lychee.error("Check the Logs", params, data); }); }; @@ -7920,7 +7936,7 @@ settings.save_enter = function (e) { cancel.title = lychee.locale["CANCEL"]; action.fn = function () { - settings.save(settings.getValues("#fullSettings")); + settings.save(settings.getValues("#fullSettings"), false); basicModal.close(); }; @@ -8872,17 +8888,52 @@ u2f.list = function () { var upload = {}; -upload.show = function (title, files, callback) { +var choiceDeleteSelector = '.basicModal .choice input[name="delete"]'; +var choiceSymlinkSelector = '.basicModal .choice input[name="symlinks"]'; +var choiceDuplicateSelector = '.basicModal .choice input[name="skipduplicates"]'; +var choiceResyncSelector = '.basicModal .choice input[name="resyncmetadata"]'; +var actionSelector = ".basicModal #basicModal__action"; +var cancelSelector = ".basicModal #basicModal__cancel"; +var lastRowSelector = ".basicModal .rows .row:last-child"; +var prelastRowSelector = ".basicModal .rows .row:nth-last-child(2)"; + +var nRowStatusSelector = function nRowStatusSelector(row) { + return ".basicModal .rows .row:nth-child(" + row + ") .status"; +}; + +var showCloseButton = function showCloseButton() { + $(actionSelector).show(); + // re-activate cancel button to close modal panel if needed + $(cancelSelector).removeClass("basicModal__button--active").hide(); +}; + +upload.show = function (title, files, run_callback) { + var cancel_callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + basicModal.show({ body: build.uploadModal(title, files), buttons: { action: { title: lychee.locale["CLOSE"], class: "hidden", - fn: basicModal.close + fn: function fn() { + if ($(actionSelector).is(":visible")) basicModal.close(); + } + }, + cancel: { + title: lychee.locale["CANCEL"], + class: "red hidden", + fn: function fn() { + // close modal if close button is displayed + if ($(actionSelector).is(":visible")) basicModal.close(); + if (cancel_callback) { + $(cancelSelector).addClass("busy"); + cancel_callback(); + } + } } }, - callback: callback + callback: run_callback }); }; @@ -8907,6 +8958,7 @@ upload.start = { var processing_count = 0; var next_upload = 0; var currently_uploading = false; + var cancelUpload = false; var process = function process(file_num) { var formData = new FormData(); @@ -8914,6 +8966,10 @@ upload.start = { var pre_progress = 0; var progress = 0; + if (file_num === 0) { + $(cancelSelector).show(); + } + var finish = function finish() { window.onbeforeunload = null; @@ -8925,11 +8981,11 @@ upload.start = { upload.notify(lychee.locale["UPLOAD_COMPLETE"]); } else if (error === false && warning === true) { // Warning - $(".basicModal #basicModal__action.hidden").show(); + showCloseButton(); upload.notify(lychee.locale["UPLOAD_COMPLETE"]); } else { // Error - $(".basicModal #basicModal__action.hidden").show(); + showCloseButton(); upload.notify(lychee.locale["UPLOAD_COMPLETE"], lychee.locale["UPLOAD_COMPLETE_FAILED"]); } @@ -8973,7 +9029,7 @@ upload.start = { // Set status if (xhr.status === 200 && isNumber(data)) { // Success - $(".basicModal .rows .row:nth-child(" + (file_num + 1) + ") .status").html(lychee.locale["UPLOAD_FINISHED"]).addClass("success"); + $(nRowStatusSelector(file_num + 1)).html(lychee.locale["UPLOAD_FINISHED"]).addClass("success"); } else { if (xhr.status === 413 || data.substr(0, 6) === "Error:") { if (xhr.status === 413) { @@ -8989,7 +9045,7 @@ upload.start = { error = true; // Error Status - $(".basicModal .rows .row:nth-child(" + (file_num + 1) + ") .status").html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); + $(nRowStatusSelector(file_num + 1)).html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); // Throw error lychee.error(lychee.locale["UPLOAD_FAILED_ERROR"], xhr, data); @@ -8998,7 +9054,7 @@ upload.start = { warning = true; // Warning Status - $(".basicModal .rows .row:nth-child(" + (file_num + 1) + ") .status").html(lychee.locale["UPLOAD_SKIPPED"]).addClass("warning"); + $(nRowStatusSelector(file_num + 1)).html(lychee.locale["UPLOAD_SKIPPED"]).addClass("warning"); // Throw error lychee.error(lychee.locale["UPLOAD_FAILED_WARNING"], xhr, data); @@ -9007,7 +9063,7 @@ upload.start = { error = true; // Error Status - $(".basicModal .rows .row:nth-child(" + (file_num + 1) + ") .status").html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); + $(nRowStatusSelector(file_num + 1)).html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); // Throw error lychee.error(lychee.locale["UPLOAD_ERROR_UNKNOWN"], xhr, data); @@ -9019,7 +9075,7 @@ upload.start = { processing_count--; // Upload next file - if (!currently_uploading && (processing_count < lychee.upload_processing_limit || lychee.upload_processing_limit === 0) && next_upload < files.length) { + if (!currently_uploading && !cancelUpload && (processing_count < lychee.upload_processing_limit || lychee.upload_processing_limit === 0) && next_upload < files.length) { process(next_upload); } @@ -9037,7 +9093,7 @@ upload.start = { // Set progress when progress has changed if (progress > pre_progress) { - $(".basicModal .rows .row:nth-child(" + (file_num + 1) + ") .status").html(progress + "%"); + $(nRowStatusSelector(file_num + 1)).html(progress + "%"); pre_progress = progress; } @@ -9048,12 +9104,12 @@ upload.start = { $(".basicModal .rows").scrollTop(scrollPos); // Set status to processing - $(".basicModal .rows .row:nth-child(" + (file_num + 1) + ") .status").html(lychee.locale["UPLOAD_PROCESSING"]); + $(nRowStatusSelector(file_num + 1)).html(lychee.locale["UPLOAD_PROCESSING"]); processing_count++; currently_uploading = false; // Upload next file - if ((processing_count < lychee.upload_processing_limit || lychee.upload_processing_limit === 0) && next_upload < files.length) { + if (!cancelUpload && (processing_count < lychee.upload_processing_limit || lychee.upload_processing_limit === 0) && next_upload < files.length) { process(next_upload); } } @@ -9076,6 +9132,9 @@ upload.start = { upload.show(lychee.locale["UPLOAD_UPLOADING"], files, function () { // Upload first file process(next_upload); + }, function () { + cancelUpload = true; + error = true; }); }, @@ -9164,15 +9223,23 @@ upload.start = { name: data.path }; - var delete_imported = $('.basicModal .choice input[name="delete"]').prop("checked") ? "1" : "0"; + var delete_imported = $(choiceDeleteSelector).prop("checked") ? "1" : "0"; + var import_via_symlink = $(choiceSymlinkSelector).prop("checked") ? "1" : "0"; + var skip_duplicates = $(choiceDuplicateSelector).prop("checked") ? "1" : "0"; + var resync_metadata = $(choiceResyncSelector).prop("checked") ? "1" : "0"; + var cancelUpload = false; upload.show(lychee.locale["UPLOAD_IMPORT_SERVER"], files, function () { + $(cancelSelector).show(); $(".basicModal .rows .row .status").html(lychee.locale["UPLOAD_IMPORTING"]); var params = { albumID: albumID, path: data.path, - delete_imported: delete_imported + delete_imported: delete_imported, + import_via_symlink: import_via_symlink, + skip_duplicates: skip_duplicates, + resync_metadata: resync_metadata }; if (lychee.api_V2 === false) { @@ -9217,8 +9284,7 @@ upload.start = { if (album.getID() === false) lychee.goto("0");else album.load(albumID); } - // Show close button - $(".basicModal #basicModal__action.hidden").show(); + showCloseButton(); return; }); @@ -9228,7 +9294,7 @@ upload.start = { var lastReadIdx = 0; var currentDir = data.path; var encounteredProblems = false; - var rowCount = 1; + var topSkip = 0; // Worker function invoked from both the response progress // callback and the completion callback. @@ -9254,7 +9320,6 @@ upload.start = { } // Advance the counter past the last valid character. lastReadIdx += newResponse.length; - newResponse.split("\n").forEach(function (resp) { var matches = resp.match(/^Status: (.*): (\d+)$/); if (matches !== null) { @@ -9264,38 +9329,54 @@ upload.start = { // the dialog box. currentDir = matches[1]; $(".basicModal .rows").append(build.uploadNewFile(currentDir)); - rowCount++; + topSkip += $(lastRowSelector).outerHeight(); } - $(".basicModal .rows .row:last-child .status").html(matches[2] + "%"); + $(lastRowSelector + " .status").html(matches[2] + "%"); } else { // Final status report for this directory. - $(".basicModal .rows .row:last-child .status").html(lychee.locale["UPLOAD_FINISHED"]).addClass("success"); + $(lastRowSelector + " .status").html(lychee.locale["UPLOAD_FINISHED"]).addClass("success"); } } else if ((matches = resp.match(/^Problem: (.*): ([^:]*)$/)) !== null) { var rowSelector = void 0; if (currentDir !== matches[1]) { - $(".basicModal .rows .row:last-child").before(build.uploadNewFile(matches[1])); - rowCount++; - rowSelector = ".basicModal .rows .row:nth-last-child(2)"; + $(lastRowSelector).before(build.uploadNewFile(matches[1])); + rowSelector = prelastRowSelector; } else { // The problem is with the directory // itself, so alter its existing line. - rowSelector = ".basicModal .rows .row:last-child"; + rowSelector = lastRowSelector; + topSkip -= $(rowSelector).outerHeight(); } if (matches[2] === "Given path is not a directory" || matches[2] === "Given path is reserved") { $(rowSelector + " .status").html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); + } else if (matches[2] === "Skipped duplicate (resynced metadata)") { + $(rowSelector + " .status").html(lychee.locale["UPLOAD_UPDATED"]).addClass("warning"); + } else if (matches[2] === "Import cancelled") { + $(rowSelector + " .status").html(lychee.locale["UPLOAD_CANCELLED"]).addClass("error"); } else { $(rowSelector + " .status").html(lychee.locale["UPLOAD_SKIPPED"]).addClass("warning"); } - $(rowSelector + " .notice").html(matches[2] === "Given path is not a directory" ? lychee.locale["UPLOAD_IMPORT_NOT_A_DIRECTORY"] : matches[2] === "Given path is reserved" ? lychee.locale["UPLOAD_IMPORT_PATH_RESERVED"] : matches[2] === "Could not read file" ? lychee.locale["UPLOAD_IMPORT_UNREADABLE"] : matches[2] === "Could not import file" ? lychee.locale["UPLOAD_IMPORT_FAILED"] : matches[2] === "Unsupported file type" ? lychee.locale["UPLOAD_IMPORT_UNSUPPORTED"] : matches[2] === "Could not create album" ? lychee.locale["UPLOAD_IMPORT_ALBUM_FAILED"] : matches[2]).show(); + var translations = { + "Given path is not a directory": "UPLOAD_IMPORT_NOT_A_DIRECTORY", + "Given path is reserved": "UPLOAD_IMPORT_PATH_RESERVED", + "Could not read file": "UPLOAD_IMPORT_UNREADABLE", + "Could not import file": "UPLOAD_IMPORT_FAILED", + "Unsupported file type": "UPLOAD_IMPORT_UNSUPPORTED", + "Could not create album": "UPLOAD_IMPORT_ALBUM_FAILED", + "Skipped duplicate": "UPLOAD_IMPORT_SKIPPED_DUPLICATE", + "Skipped duplicate (resynced metadata)": "UPLOAD_IMPORT_RESYNCED_DUPLICATE", + "Import cancelled": "UPLOAD_IMPORT_CANCELLED" + }; + $(rowSelector + " .notice").html(matches[2] in translations ? lychee.locale[translations[matches[2]]] : matches[2]).show(); + topSkip += $(rowSelector).outerHeight(); encounteredProblems = true; } else if (resp === "Warning: Approaching memory limit") { - $(".basicModal .rows .row:last-child").before(build.uploadNewFile(lychee.locale["UPLOAD_IMPORT_LOW_MEMORY"])); - rowCount++; - $(".basicModal .rows .row:nth-last-child(2) .status").html(lychee.locale["UPLOAD_WARNING"]).addClass("warning"); - $(".basicModal .rows .row:nth-last-child(2) .notice").html(lychee.locale["UPLOAD_IMPORT_LOW_MEMORY_EXPL"]).show(); + $(lastRowSelector).before(build.uploadNewFile(lychee.locale["UPLOAD_IMPORT_LOW_MEMORY"])); + topSkip += $(prelastRowSelector).outerHeight(); + $(prelastRowSelector + " .status").html(lychee.locale["UPLOAD_WARNING"]).addClass("warning"); + $(prelastRowSelector + " .notice").html(lychee.locale["UPLOAD_IMPORT_LOW_MEMORY_EXPL"]).show(); } - $(".basicModal .rows").scrollTop((rowCount - 1) * 40); + $(".basicModal .rows").scrollTop(topSkip); }); // forEach (resp) }; // processIncremental @@ -9309,12 +9390,7 @@ upload.start = { if (album.getID() === false) lychee.goto("0");else album.load(albumID); - if (encounteredProblems) { - // Show close button - $(".basicModal #basicModal__action.hidden").show(); - } else { - basicModal.close(); - } + if (encounteredProblems) showCloseButton();else basicModal.close(); }, function (event) { // We received a possibly partial response. // We need to begin by terminating the data with a @@ -9351,15 +9427,14 @@ upload.start = { } catch (e) { // Most likely a SyntaxError due to something // that went wrong on the server side. - $(".basicModal .rows .row:last-child .status").html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); + $(lastRowSelector + " .status").html(lychee.locale["UPLOAD_FAILED"]).addClass("error"); albums.refresh(); upload.notify(lychee.locale["UPLOAD_COMPLETE"], lychee.locale["UPLOAD_COMPLETE_FAILED"]); if (album.getID() === false) lychee.goto("0");else album.load(albumID); - // Show close button - $(".basicModal #basicModal__action.hidden").show(); + showCloseButton(); return; } @@ -9368,12 +9443,18 @@ upload.start = { processIncremental(jsonResponse); }); // api.post } // lychee.api_V2 + }, function () { + if (!cancelUpload) { + api.post("Import::serverCancel", {}, function (resp) { + if (resp === "true") cancelUpload = true; + }); + } }); // upload.show }; // action var msg = lychee.html(_templateObject76, lychee.locale["UPLOAD_IMPORT_SERVER_INSTR"], lychee.locale["UPLOAD_ABSOLUTE_PATH"], lychee.location); if (lychee.api_V2) { - msg += lychee.html(_templateObject77, build.iconic("check"), lychee.locale["UPLOAD_IMPORT_DELETE_ORIGINALS"], lychee.locale["UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL"]); + msg += lychee.html(_templateObject77, build.iconic("check"), lychee.locale["UPLOAD_IMPORT_DELETE_ORIGINALS"], lychee.locale["UPLOAD_IMPORT_DELETE_ORIGINALS_EXPL"], build.iconic("check"), lychee.locale["UPLOAD_IMPORT_VIA_SYMLINK"], lychee.locale["UPLOAD_IMPORT_VIA_SYMLINK_EXPL"], build.iconic("check"), lychee.locale["UPLOAD_IMPORT_SKIP_DUPLICATES"], lychee.locale["UPLOAD_IMPORT_SKIP_DUPLICATES_EXPL"], build.iconic("check"), lychee.locale["UPLOAD_IMPORT_RESYNC_METADATA"], lychee.locale["UPLOAD_IMPORT_RESYNC_METADATA_EXPL"]); } basicModal.show({ @@ -9390,8 +9471,25 @@ upload.start = { } }); + var $delete = $(choiceDeleteSelector); + var $symlinks = $(choiceSymlinkSelector); + var $duplicates = $(choiceDuplicateSelector); + var $resync = $(choiceResyncSelector); + if (lychee.delete_imported) { - $('.basicModal .choice input[name="delete"]').prop("checked", true); + $delete.prop("checked", true); + $symlinks.prop("checked", false).prop("disabled", true); + } else { + if (lychee.import_via_symlink) { + $symlinks.prop("checked", true); + $delete.prop("checked", false).prop("disabled", true); + } + } + if (lychee.skip_duplicates) { + $duplicates.prop("checked", true); + if (lychee.resync_metadata) $resync.prop("checked", true); + } else { + $resync.prop("disabled", true); } }, @@ -9457,6 +9555,31 @@ upload.start = { } }; +upload.check = function () { + var $delete = $(choiceDeleteSelector); + var $symlinks = $(choiceSymlinkSelector); + + if ($delete.prop("checked")) { + $symlinks.prop("checked", false).prop("disabled", true); + } else { + $symlinks.prop("disabled", false); + if ($symlinks.prop("checked")) { + $delete.prop("checked", false).prop("disabled", true); + } else { + $delete.prop("disabled", false); + } + } + + var $duplicates = $(choiceDuplicateSelector); + var $resync = $(choiceResyncSelector); + + if ($duplicates.prop("checked")) { + $resync.prop("disabled", false); + } else { + $resync.prop("checked", false).prop("disabled", true); + } +}; + var users = { json: null }; diff --git a/public/dist/view.js b/public/dist/view.js index 7452d359c2..dc9793f356 100644 --- a/public/dist/view.js +++ b/public/dist/view.js @@ -2738,6 +2738,9 @@ lychee.locale = { UPLOAD_FAILED_ERROR: "Upload failed. Server returned an error!", UPLOAD_FAILED_WARNING: "Upload failed. Server returned a warning!", UPLOAD_SKIPPED: "Skipped", + UPLOAD_UPDATED: "Updated", + UPLOAD_IMPORT_SKIPPED_DUPLICATE: "This photo has been skipped because it's already in your library.", + UPLOAD_IMPORT_RESYNCED_DUPLICATE: "This photo has been skipped because it's already in your library, but its metadata has been updated.", UPLOAD_ERROR_CONSOLE: "Please take a look at the console of your browser for further details.", UPLOAD_UNKNOWN: "Server returned an unknown response. Please take a look at the console of your browser for further details.", UPLOAD_ERROR_UNKNOWN: "Upload failed. Server returned an unkown error!", diff --git a/routes/web.php b/routes/web.php index 9e4a0514e3..7d601dff83 100644 --- a/routes/web.php +++ b/routes/web.php @@ -107,6 +107,7 @@ Route::post('/api/Import::url', [ImportController::class, 'url'])->middleware('upload'); Route::post('/api/Import::server', [ImportController::class, 'server'])->middleware('admin'); +Route::post('/api/Import::serverCancel', [ImportController::class, 'serverCancel'])->middleware('admin'); Route::post('/api/User::List', [Administration\UserController::class, 'list'])->middleware('upload'); Route::post('/api/User::Save', [Administration\UserController::class, 'save'])->middleware('admin');