diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 35af5321339a..f50656dd6d7f 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -10,6 +10,9 @@ on: # schedule: # - cron: '35 2 * * 1' +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 6cdc25043444..579531c4f765 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -2,6 +2,9 @@ name: Validate/Lint on: [push, pull_request] +permissions: + contents: read + jobs: build: runs-on: ${{ matrix.operating-system }} diff --git a/.htaccess b/.htaccess index d1543bd82d1e..c5f0349c0a76 100644 --- a/.htaccess +++ b/.htaccess @@ -1,374 +1,375 @@ -# BEGIN Expires Don't forget to enable mod_headers and mod_expires, you can do so by running a2enmod rewrite and a2enmod headers - - ExpiresActive On - ExpiresDefault "access plus 1 seconds" - ExpiresByType text/html "access plus 1 seconds" - ExpiresByType image/gif "access plus 2592000 seconds" - ExpiresByType image/jpeg "access plus 2592000 seconds" - ExpiresByType image/png "access plus 2592000 seconds" - ExpiresByType text/css "access plus 604800 seconds" - ExpiresByType text/javascript "access plus 216000 seconds" - ExpiresByType application/x-javascript "access plus 216000 seconds" - - - - Order Allow,Deny - Deny from all - - - Require all denied - - - - - Order Allow,Deny - Deny from all - - - Require all denied - - - - - Order Allow,Deny - Deny from all - - - Require all denied - - - - - Order Allow,Deny - Deny from all - - - Require all denied - - -# Disable directory browsing -Options All -Indexes -# END Expires -# BEGIN Caching - - - Header set Access-Control-Allow-Origin: * - - - Header set Access-Control-Allow-Origin: * - Header set Cache-Control "max-age=2592000, public" - - - Header set Access-Control-Allow-Origin: * - Header set Cache-Control "max-age=604800, public" - - - Header set Access-Control-Allow-Origin: * - Header set Cache-Control "max-age=216000, private" - - - Header set Cache-Control "max-age=216000, public, must-revalidate" - - - Header set Access-Control-Allow-Origin: * - Header set Cache-Control "max-age=1, private, must-revalidate" - - -# END Caching - - RewriteEngine on - #VideoHLS for DRM - - RedirectMatch 404 /\.git - #Compatibility - RewriteRule ^view/css/fontawesome-free-5.5.0-web/(.*) node_modules/@fortawesome/fontawesome-free/$1 - RewriteRule ^view/js/jquery-3.5.1.min.js node_modules/jquery/dist/jquery.min.js - RewriteRule ^view/js/seetalert/sweetalert.min.js node_modules/sweetalert/dist/sweetalert.min.js - RewriteRule ^view/js/jquery-ui/(.*) node_modules/jquery-ui-dist/$1 - - - RewriteRule ^videos/webfonts/(fa-.*) view/css/fontawesome-free-5.5.0-web/webfonts/$1 [NC,L] - - RewriteRule ^playLink/?$ view/modePlayLink.php [QSA] - RewriteRule ^videos/([^/]+)/(.*).key$ plugin/VideoHLS/downloadProtection.php?filename=$1&key=$2 [QSA] - - RewriteRule glyphicons-halflings-regular(.+)$ view/bootstrap/fonts/glyphicons-halflings-regular$1 [NC,L] - - RewriteRule ^meet/([0-9]+)/(.+)$ plugin/Meet/iframe.php?meet_schedule_id=$1&roomName=$2 [NC,L,QSA] - RewriteRule ^meet/([0-9]+)$ plugin/Meet/iframe.php?meet_schedule_id=$1 [NC,L,QSA] - RewriteRule ^live/([0-9]+)/(.+)/(.+)$ plugin/Live/?live_servers_id=$1&c=$2&live_index=$3 [NC,L,QSA] - RewriteRule ^live/([0-9]+)/(.+)$ plugin/Live/?live_servers_id=$1&c=$2 [NC,L,QSA] - RewriteRule ^live/?$ plugin/Gallery/view/mainAreaLive.php [NC,L,QSA] - - RewriteRule ^liveLink/([0-9]+).*$ plugin/LiveLinks/view/Live.php?link=$1 [NC,L,QSA] - RewriteRule ^liveLinkEmbed/([0-9]+).*$ plugin/LiveLinks/view/Live.php?link=$1&embed=1 [NC,L,QSA] - - #main Files - RewriteRule ^index.php$ view/index.php [NC,L] - #RewriteRule ^index.php$ /view/index.php [NC,L] - #RewriteRule ^$ view/ [NC,L] - RewriteRule ^bootstrap/(.+)$ view/bootstrap/$1 [NC,L] - RewriteRule bootstrap-select.js.map$ view/bootstrap/bootstrapSelectPicker/js/bootstrap-select.js.map$1 [NC,L] - RewriteRule ^oembed/?(.+)$ view/oembed.php$1 [NC,L] - RewriteRule ^js/(.+)$ view/js/$1 [NC,L] - RewriteRule ^css/(.+)$ view/css/$1 [NC,L] - RewriteRule ^img/(.+)$ view/img/$1 [NC,L] - RewriteRule ^i/(.+)$ view/iframe.php?type=$1 [NC,L,QSA] - RewriteRule ^videos/fonts/(.+)$ view/bootstrap/fonts/$1 [NC,L] - RewriteRule ^page/([0-9]+)/?$ view/?page=$1 [QSA] - RewriteRule ^videoOnly/?$ view/?type=video [NC,L] - RewriteRule ^audioOnly/?$ view/?type=audio [NC,L] - RewriteRule ^download$ view/downloadExternalVideo.php [NC,L] - RewriteRule ^info$ view/info.php [NC,L] - RewriteRule ^version$ view/info.php?version=1 [NC,L] - RewriteRule ^downloadNow$ objects/downloadVideo.php [NC,L] - RewriteRule ^getDownloadProgress$ objects/downloadVideoProgress.php [NC,L] - RewriteRule ^status$ objects/status.json.php [NC,L] - RewriteRule ^menu/([^!#$&'()*+,\/:;=?@[\]]+)/? plugin/TopMenu/seo.php?menuSeoUrlItem=$1 [QSA,L] - RewriteRule ^admin/plugin/(.+)$ plugin/$1 [NC,L] - RewriteRule ^trending/?$ view/trending.php [NC,L,QSA] - - RewriteRule ^about$ view/about.php [NC,L] - RewriteRule ^contact$ view/contact.php [NC,L] - RewriteRule ^sendEmail$ objects/sendEmail.json.php [NC,L] - RewriteRule ^captcha$ objects/getCaptcha.php [NC,L] - RewriteRule ^monitor/(.+)$ objects/ServerMonitor/$1 [NC,L] - RewriteRule ^videosList$ view/videosList.php [NC,L] - RewriteRule ^videosList/video/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/videosList.php?videoName=$1&page=$2 [QSA] - RewriteRule ^videosList/cat/([^!#$&'()*,\/:;=?@[\]]+)/video/([^!#$&'()*+,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/videosList.php?catName=$1&videoName=$2&page=$3 [QSA] - - #for the category name - RewriteRule ^cat/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/?catName=$1 [NC,L,QSA] - RewriteRule ^cat/([^!#$&'()*+,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/?catName=$1&page=$2 [NC,L,QSA] - - RewriteRule ^tag/([0-9-]+)(.*)?$ view/?tags_id=$1 [NC,L,QSA] - - - #for the video name - RewriteRule ^video/([0-9]+)/?$ view/?v=$1 [QSA] - RewriteRule ^video/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?videoName=$1 [QSA] - RewriteRule ^video/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?videoName=$1&page=$2 [QSA] - RewriteRule ^v/([0-9a-zA-Z_.-]+)/?$ view/?v=$1 [QSA] - RewriteRule ^v/([0-9a-zA-Z_.-]+)/page/([0-9]+)/??$ view/?v=$1&page=$2 [QSA] - RewriteRule ^video/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?v=$1 [QSA] - RewriteRule ^video/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?v=$1&page=$3 [QSA] - RewriteRule ^evideo/([a-zA-z0-9=]+)/?$ view/?evideo=$1 [QSA] - - #for the video name - RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/video/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/?catName=$1&videoName=$2 [QSA] - RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/video/([^!#$&'()*+,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/?catName=$1&videoName=$2&page=$3 [QSA] - #for the embeded video name - RewriteRule ^videoEmbeded/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] - RewriteRule ^videoEmbeded/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] - RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/videoEmbeded/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?catName=$1&videoName=$2 [QSA] - RewriteRule ^videoEmbed/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] - RewriteRule ^videoEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] - RewriteRule ^vEmbed/([0-9a-zA-Z_.-]+)/?$ view/videoEmbeded.php?v=$1 [QSA] - RewriteRule ^videoEmbed/([0-9a-zA-Z_.-]+)/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?v=$1 [QSA] - RewriteRule ^evideoEmbed/([a-zA-z0-9=]+)/?$ view/videoEmbeded.php?evideo=$1 [QSA] - - RewriteRule ^plugin/([^!#$&'()*+,\/:;=?@[\]]+)/(.*)?$ plugin/$1/$2 [NC,L] - - RewriteRule ^upload$ view/mini-upload-form/ [NC,L] - RewriteRule ^fileUpload$ view/mini-upload-form/upload.php [NC,L] - RewriteRule ^uploadPoster/([0-9]+)/(jpg|gif)$ objects/uploadPoster.php?video_id=$1&type=$2 [NC,L] - - #for the Article name - RewriteRule ^article/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?videoName=$1 [QSA] - RewriteRule ^article/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?videoName=$1&page=$2 [QSA] - RewriteRule ^article/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?v=$1 [QSA] - RewriteRule ^article/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?v=$1&page=$3 [QSA] - - #for the embeded article name - RewriteRule ^articleEmbed/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] - RewriteRule ^articleEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] - RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/articleEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?catName=$1&videoName=$2 [QSA] - RewriteRule ^articleEmbed/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] - RewriteRule ^articleEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] - RewriteRule ^articleEmbed/([0-9a-zA-Z_.-]+)/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?v=$1 [QSA] - - #edit your own user - RewriteRule ^user$ view/user.php [NC,L] - RewriteRule ^user/([0-9]+)/foto.png$ view/userGetPhoto.php?users_id=$1 [QSA] - - #manager user - RewriteRule ^users$ view/managerUsers.php [NC,L] - RewriteRule ^users.json$ objects/users.json.php [NC,L] - RewriteRule ^updateUser$ objects/userUpdate.json.php [NC,L] - RewriteRule ^savePhoto$ objects/userSavePhoto.php [NC,L] - RewriteRule ^saveBackground$ objects/userSaveBackground.php [NC,L] - RewriteRule ^addNewUser$ objects/userAddNew.json.php [NC,L] - RewriteRule ^deleteUser$ objects/userDelete.json.php [NC,L] - RewriteRule ^recoverPass$ objects/userRecoverPass.php [NC,L] - RewriteRule ^saveRecoverPassword$ objects/userRecoverPassSave.json.php [NC,L] - RewriteRule ^signUp$ view/signUp.php [NC,L] - RewriteRule ^createUser$ objects/userCreate.json.php [NC,L] - - - RewriteRule ^usersGroups$ view/managerUsersGroups.php [NC,L] - RewriteRule ^usersGroups.json$ objects/usersGroups.json.php [NC,L] - RewriteRule ^addNewUserGroups$ objects/userGroupsAddNew.json.php [NC,L] - RewriteRule ^deleteUserGroups$ objects/userGroupsDelete.json.php [NC,L] - - #manager category - RewriteRule ^categories$ view/managerCategories.php [NC,L] - RewriteRule ^categories.json$ objects/categories.json.php [NC,L] - RewriteRule ^addNewCategory$ objects/categoryAddNew.json.php [NC,L] - RewriteRule ^deleteCategory$ objects/categoryDelete.json.php [NC,L] - RewriteRule ^listCategories$ view/listCategories.php [NC,L] - - #manager plugin - RewriteRule ^plugins$ view/managerPlugins.php [NC,L] - RewriteRule ^plugins.json$ objects/plugins.json.php [NC,L] - RewriteRule ^pluginsAvailable.json$ objects/pluginsAvailable.json.php [NC,L] - RewriteRule ^pluginImport.json$ objects/pluginImport.json.php [NC,L] - RewriteRule ^switchPlugin$ objects/pluginSwitch.json.php [NC,L] - RewriteRule ^addDataObjectPlugin.json$ objects/pluginAddDataObject.json.php [NC,L] - RewriteRule ^runDBScriptPlugin.json$ objects/pluginRunDatabaseScript.json.php [NC,L] - - #manager playList - RewriteRule ^epg.xml$ plugin/PlayLists/epg.xml.php [NC,L,QSA] - RewriteRule ^epg.json$ plugin/PlayLists/epg.json.php [NC,L,QSA] - RewriteRule ^epg.html$ plugin/PlayLists/epg.html.php [NC,L,QSA] - RewriteRule ^epg$ plugin/PlayLists/epg.php [NC,L,QSA] - RewriteRule ^tv$ plugin/PlayLists/tv.php [NC,L,QSA] - RewriteRule ^iptv$ plugin/PlayLists/iptv.php [NC,L,QSA] - RewriteRule ^iptv/([^/]+)/?$ plugin/PlayLists/iptv.php?channelName=$1 [NC,L,QSA] - RewriteRule ^playLists.json$ objects/playlists.json.php [NC,L] - RewriteRule ^playListsVideos.json$ objects/playlistsVideos.json.php [NC,L] - RewriteRule ^playListsFromUser.json/([0-9]+)/?$ objects/playlistsFromUser.json.php?users_id=$1 [NC,L] - RewriteRule ^addNewPlayList$ objects/playlistAddNew.json.php [NC,L] - RewriteRule ^playListAddVideo.json$ objects/playListAddVideo.json.php [NC,L] - RewriteRule ^playlist/([0-9]+)/([0-9]+)/?$ view/?playlist_id=$1&playlist_index=$2 [NC,L] - RewriteRule ^playlist/([0-9]+)/?$ view/?playlist_id=$1 [NC,L] - RewriteRule ^removeVideoFromPlaylist/?$ objects/playlistRemoveVideo.php [NC,L] - RewriteRule ^removePlaylist/?$ objects/playlistRemove.php [NC,L] - RewriteRule ^renamePlaylist/?$ objects/playlistRename.php [NC,L] - RewriteRule ^sortPlaylist/?$ objects/playlistSort.php [NC,L] - RewriteRule ^mrss/?$ feed/index.php?mrss=1 [QSA] - RewriteRule ^roku.json$ feed/index.php?roku=1 [QSA] - RewriteRule ^channel/([^/]+)/roku.json$ feed/index.php?channelName=$1&roku=1 [QSA] - RewriteRule ^channel/([^/]+)/feed/?$ feed/index.php?channelName=$1 [QSA] - RewriteRule ^channel/([^/]+)/rss/?$ feed/index.php?channelName=$1 [QSA] - RewriteRule ^channel/([^/]+)/mrss/?$ feed/index.php?channelName=$1&mrss=1 [QSA] - RewriteRule ^channel/([^/]+) view/channel.php?channelName=$1 [QSA] - RewriteRule ^channel/?$ view/channel.php [QSA] - RewriteRule ^channels/?$ view/channels.php [NC,L] - - #playlist alias - RewriteRule ^programs.json$ objects/playlists.json.php [QSA] - RewriteRule ^program/([0-9]+)/([0-9]+)(/.*)?$ view/?playlist_id=$1&playlist_index=$2 [QSA] - RewriteRule ^program/([0-9]+)(/.*)?$ view/?playlist_id=$1 [QSA] - RewriteRule ^viewProgram/([0-9]+).*?$ view/channelProgram.php?program_id=$1 [QSA] - RewriteRule ^favorite/?$ view/?playlist_name=favorite [QSA] - RewriteRule ^watch-later/?$ view/?playlist_name=watch-later [QSA] - - #manager videos - RewriteRule ^orphanFiles$ view/orphanFiles.php [NC,L] - RewriteRule ^mvideos$ view/managerVideos.php [NC,L] - RewriteRule ^videos.json$ objects/videos.json.php [NC,L] - RewriteRule ^videosAndroid.json$ objects/videosAndroid.json.php [NC,L] - RewriteRule ^videoAndroid.json$ objects/videoAndroid.json.php [NC,L] - RewriteRule ^deleteVideo$ objects/videoDelete.json.php [NC,L] - RewriteRule ^addNewVideo$ objects/videoAddNew.json.php [NC,L] - RewriteRule ^refreshVideo$ objects/videoRefresh.json.php [NC,L] - RewriteRule ^setStatusVideo$ objects/videoStatus.json.php [NC,L] - RewriteRule ^setCategoryVideo$ objects/videoCategory.json.php [NC,L] - RewriteRule ^rotateVideo$ objects/videoRotate.json.php [NC,L] - - - # Subscribes - RewriteRule ^subscribes$ view/managerSubscribes.php [NC,L] - RewriteRule ^subscribes.json$ objects/subscribes.json.php [NC,L] - RewriteRule ^subscribe.json$ objects/subscribe.json.php [NC,L] - RewriteRule ^notifySubscribers.json$ objects/notifySubscribers.json.php [NC,L] - - - RewriteRule ^aVideoQueueEncoder.json$ objects/aVideoQueueEncoder.json.php [NC,L] - RewriteRule ^aVideoEncoder.json$ objects/aVideoEncoder.json.php [NC,L] - RewriteRule ^aVideoEncoderChunk.json$ objects/aVideoEncoderChunk.json.php [NC,L] - - #comment - RewriteRule ^comments$ view/managerComments.php [NC,L] - RewriteRule ^saveComment$ objects/commentAddNew.json.php [NC,L] - RewriteRule ^comments.json/([0-9]+)$ objects/comments.json.php?video_id=$1 [NC,L] - - RewriteRule ^login$ objects/login.json.php [NC,L] - RewriteRule ^logoff$ objects/logoff.php [NC,L] - - RewriteRule ^like$ objects/like.json.php?like=1 [QSA] - RewriteRule ^dislike$ objects/like.json.php?like=-1 [QSA] - - - #manager configuration - - RewriteRule ^update/?$ view/update.php [NC,L] - RewriteRule ^siteConfigurations$ view/configurations.php [NC,L] - RewriteRule ^updateConfig$ objects/configurationUpdate.json.php [NC,L] - - RewriteRule ^charts$ view/charts.php [NC,L] - - RewriteRule ^help$ view/help.php [NC,L] - - # YouTube Sync - RewriteRule ^youtubeUpload$ objects/youtubeUpload.json.php [NC,L] - - RewriteRule ^googleAdView$ view/googleAdView.php [NC,L] - - RewriteRule ^notifications.json$ objects/notifications.json.php [NC,L] - - RewriteRule ^sitemap.xml$ view/sitemap.xml.php [NC,L] - RewriteRule ^robots.txt$ view/robots.txt.php [NC,L] - RewriteRule ^manifest.json$ view/manifest.json.php [NC,L] - - RewriteRule ^videos/(.*)/index.m3u8$ view/hls.php?videoDirectory=$1 [NC,L,QSA] - RewriteRule ^videos/(.*)/index.m3u8.mp4$ view/hls.php?playHLSasMP4=1&videoDirectory=$1 [NC,L,QSA] - - RewriteRule ^vast.xml/?([0-9]+)?$ plugin/AD_Server/VAST.php?campaign_has_videos_id=$1 [NC,L] - - - - RewriteRule ^videos/([_A-Za-z0-9.-]+/)?([^!#$&'()*+,\/:;=?@[\]]+(\.(mp4|webm|m3u8|mp3|ogg)))$ view/xsendfile.php?file=$2 [QSA] - RewriteRule ^videos/cache/download/([_A-Za-z0-9.-]+/)?([^!#$&'()*+,\/:;=?@[\]]+(\.(mp4|webm|m3u8|mp3|ogg)))$ view/xsendfile.php?file=$2&cacheDownload=1 [QSA] - - - # if image do not exists - RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC] - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule (.*)$ img/image404.php?image=$1 [NC,L] - - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteCond %{REQUEST_FILENAME} !-l - RewriteRule .*$ view/error.php [NC,L] - - - - # Compress HTML, CSS, JavaScript, Text, XML and fonts - AddOutputFilterByType DEFLATE application/javascript - AddOutputFilterByType DEFLATE application/rss+xml - AddOutputFilterByType DEFLATE application/vnd.ms-fontobject - AddOutputFilterByType DEFLATE application/x-font - AddOutputFilterByType DEFLATE application/x-font-opentype - AddOutputFilterByType DEFLATE application/x-font-otf - AddOutputFilterByType DEFLATE application/x-font-truetype - AddOutputFilterByType DEFLATE application/x-font-ttf - AddOutputFilterByType DEFLATE application/x-javascript - AddOutputFilterByType DEFLATE application/xhtml+xml - AddOutputFilterByType DEFLATE application/xml - AddOutputFilterByType DEFLATE font/opentype - AddOutputFilterByType DEFLATE font/otf - AddOutputFilterByType DEFLATE font/ttf - AddOutputFilterByType DEFLATE image/svg+xml - AddOutputFilterByType DEFLATE image/x-icon - AddOutputFilterByType DEFLATE text/css - AddOutputFilterByType DEFLATE text/html - AddOutputFilterByType DEFLATE text/javascript - AddOutputFilterByType DEFLATE text/plain - AddOutputFilterByType DEFLATE text/xml - - -AddType text/vtt .vtt -#php_value post_max_size 4G -#php_value upload_max_filesize 4G +# BEGIN Expires Don't forget to enable mod_headers and mod_expires, you can do so by running a2enmod rewrite and a2enmod headers + + ExpiresActive On + ExpiresDefault "access plus 1 seconds" + ExpiresByType text/html "access plus 1 seconds" + ExpiresByType image/gif "access plus 2592000 seconds" + ExpiresByType image/jpeg "access plus 2592000 seconds" + ExpiresByType image/png "access plus 2592000 seconds" + ExpiresByType text/css "access plus 604800 seconds" + ExpiresByType text/javascript "access plus 216000 seconds" + ExpiresByType application/x-javascript "access plus 216000 seconds" + + + + Order Allow,Deny + Deny from all + + + Require all denied + + + + + Order Allow,Deny + Deny from all + + + Require all denied + + + + + Order Allow,Deny + Deny from all + + + Require all denied + + + + + Order Allow,Deny + Deny from all + + + Require all denied + + +# Disable directory browsing +Options All -Indexes +# END Expires +# BEGIN Caching + + + Header set Access-Control-Allow-Origin: * + + + Header set Access-Control-Allow-Origin: * + Header set Cache-Control "max-age=2592000, public" + + + Header set Access-Control-Allow-Origin: * + Header set Cache-Control "max-age=604800, public" + + + Header set Access-Control-Allow-Origin: * + Header set Cache-Control "max-age=216000, private" + + + Header set Cache-Control "max-age=216000, public, must-revalidate" + + + Header set Access-Control-Allow-Origin: * + Header set Cache-Control "max-age=1, private, must-revalidate" + + +# END Caching + + RewriteEngine on + #VideoHLS for DRM + + RedirectMatch 404 /\.git + #Compatibility + RewriteRule ^view/css/fontawesome-free-5.5.0-web/(.*) node_modules/@fortawesome/fontawesome-free/$1 + RewriteRule ^view/js/jquery-3.5.1.min.js node_modules/jquery/dist/jquery.min.js + RewriteRule ^view/js/seetalert/sweetalert.min.js node_modules/sweetalert/dist/sweetalert.min.js + RewriteRule ^view/js/jquery-ui/(.*) node_modules/jquery-ui-dist/$1 + + + RewriteRule ^videos/webfonts/(fa-.*) view/css/fontawesome-free-5.5.0-web/webfonts/$1 [NC,L] + + RewriteRule ^playLink/?$ view/modePlayLink.php [QSA] + RewriteRule ^videos/([^/]+)/(.*).key$ plugin/VideoHLS/downloadProtection.php?filename=$1&key=$2 [QSA] + + RewriteRule glyphicons-halflings-regular(.+)$ view/bootstrap/fonts/glyphicons-halflings-regular$1 [NC,L] + + RewriteRule ^meet/([0-9]+)/(.+)$ plugin/Meet/iframe.php?meet_schedule_id=$1&roomName=$2 [NC,L,QSA] + RewriteRule ^meet/([0-9]+)$ plugin/Meet/iframe.php?meet_schedule_id=$1 [NC,L,QSA] + RewriteRule ^live/([0-9]+)/(.+)/ls/([0-9]+)/?$ plugin/Live/?live_servers_id=$1&c=$2&live_schedule=$3 [NC,L,QSA] + RewriteRule ^live/([0-9]+)/(.+)/(.+)$ plugin/Live/?live_servers_id=$1&c=$2&live_index=$3 [NC,L,QSA] + RewriteRule ^live/([0-9]+)/(.+)$ plugin/Live/?live_servers_id=$1&c=$2 [NC,L,QSA] + RewriteRule ^live/?$ plugin/Gallery/view/mainAreaLive.php [NC,L,QSA] + + RewriteRule ^liveLink/([0-9]+).*$ plugin/LiveLinks/view/Live.php?link=$1 [NC,L,QSA] + RewriteRule ^liveLinkEmbed/([0-9]+).*$ plugin/LiveLinks/view/Live.php?link=$1&embed=1 [NC,L,QSA] + + #main Files + RewriteRule ^index.php$ view/index.php [NC,L] + #RewriteRule ^index.php$ /view/index.php [NC,L] + #RewriteRule ^$ view/ [NC,L] + RewriteRule ^bootstrap/(.+)$ view/bootstrap/$1 [NC,L] + RewriteRule bootstrap-select.js.map$ view/bootstrap/bootstrapSelectPicker/js/bootstrap-select.js.map$1 [NC,L] + RewriteRule ^oembed/?(.+)$ view/oembed.php$1 [NC,L] + RewriteRule ^js/(.+)$ view/js/$1 [NC,L] + RewriteRule ^css/(.+)$ view/css/$1 [NC,L] + RewriteRule ^img/(.+)$ view/img/$1 [NC,L] + RewriteRule ^i/(.+)$ view/iframe.php?type=$1 [NC,L,QSA] + RewriteRule ^videos/fonts/(.+)$ view/bootstrap/fonts/$1 [NC,L] + RewriteRule ^page/([0-9]+)/?$ view/?page=$1 [QSA] + RewriteRule ^videoOnly/?$ view/?type=video [NC,L] + RewriteRule ^audioOnly/?$ view/?type=audio [NC,L] + RewriteRule ^download$ view/downloadExternalVideo.php [NC,L] + RewriteRule ^info$ view/info.php [NC,L] + RewriteRule ^version$ view/info.php?version=1 [NC,L] + RewriteRule ^downloadNow$ objects/downloadVideo.php [NC,L] + RewriteRule ^getDownloadProgress$ objects/downloadVideoProgress.php [NC,L] + RewriteRule ^status$ objects/status.json.php [NC,L] + RewriteRule ^menu/([^!#$&'()*+,\/:;=?@[\]]+)/? plugin/TopMenu/seo.php?menuSeoUrlItem=$1 [QSA,L] + RewriteRule ^admin/plugin/(.+)$ plugin/$1 [NC,L] + RewriteRule ^trending/?$ view/trending.php [NC,L,QSA] + + RewriteRule ^about$ view/about.php [NC,L] + RewriteRule ^contact$ view/contact.php [NC,L] + RewriteRule ^sendEmail$ objects/sendEmail.json.php [NC,L] + RewriteRule ^captcha$ objects/getCaptcha.php [NC,L] + RewriteRule ^monitor/(.+)$ objects/ServerMonitor/$1 [NC,L] + RewriteRule ^videosList$ view/videosList.php [NC,L] + RewriteRule ^videosList/video/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/videosList.php?videoName=$1&page=$2 [QSA] + RewriteRule ^videosList/cat/([^!#$&'()*,\/:;=?@[\]]+)/video/([^!#$&'()*+,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/videosList.php?catName=$1&videoName=$2&page=$3 [QSA] + + #for the category name + RewriteRule ^cat/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/?catName=$1 [NC,L,QSA] + RewriteRule ^cat/([^!#$&'()*+,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/?catName=$1&page=$2 [NC,L,QSA] + + RewriteRule ^tag/([0-9-]+)(.*)?$ view/?tags_id=$1 [NC,L,QSA] + + + #for the video name + RewriteRule ^video/([0-9]+)/?$ view/?v=$1 [QSA] + RewriteRule ^video/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?videoName=$1 [QSA] + RewriteRule ^video/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?videoName=$1&page=$2 [QSA] + RewriteRule ^v/([0-9a-zA-Z_.-]+)/?$ view/?v=$1 [QSA] + RewriteRule ^v/([0-9a-zA-Z_.-]+)/page/([0-9]+)/??$ view/?v=$1&page=$2 [QSA] + RewriteRule ^video/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?v=$1 [QSA] + RewriteRule ^video/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?v=$1&page=$3 [QSA] + RewriteRule ^evideo/([a-zA-z0-9=]+)/?$ view/?evideo=$1 [QSA] + + #for the video name + RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/video/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/?catName=$1&videoName=$2 [QSA] + RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/video/([^!#$&'()*+,\/:;=?@[\]]+)/page/([0-9]+)/?$ view/?catName=$1&videoName=$2&page=$3 [QSA] + #for the embeded video name + RewriteRule ^videoEmbeded/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] + RewriteRule ^videoEmbeded/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] + RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/videoEmbeded/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?catName=$1&videoName=$2 [QSA] + RewriteRule ^videoEmbed/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] + RewriteRule ^videoEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] + RewriteRule ^vEmbed/([0-9a-zA-Z_.-]+)/?$ view/videoEmbeded.php?v=$1 [QSA] + RewriteRule ^videoEmbed/([0-9a-zA-Z_.-]+)/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?v=$1 [QSA] + RewriteRule ^evideoEmbed/([a-zA-z0-9=]+)/?$ view/videoEmbeded.php?evideo=$1 [QSA] + + RewriteRule ^plugin/([^!#$&'()*+,\/:;=?@[\]]+)/(.*)?$ plugin/$1/$2 [NC,L] + + RewriteRule ^upload$ view/mini-upload-form/ [NC,L] + RewriteRule ^fileUpload$ view/mini-upload-form/upload.php [NC,L] + RewriteRule ^uploadPoster/([0-9]+)/(jpg|gif)$ objects/uploadPoster.php?video_id=$1&type=$2 [NC,L] + + #for the Article name + RewriteRule ^article/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?videoName=$1 [QSA] + RewriteRule ^article/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?videoName=$1&page=$2 [QSA] + RewriteRule ^article/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/?$ view/?v=$1 [QSA] + RewriteRule ^article/([0-9a-zA-Z_.-]+)/([^!#$&'()*,\/:;=?@[\]]+)/page/([0-9]+)/??$ view/?v=$1&page=$3 [QSA] + + #for the embeded article name + RewriteRule ^articleEmbed/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] + RewriteRule ^articleEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] + RewriteRule ^cat/([^!#$&'()*,\/:;=?@[\]]+)/articleEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?catName=$1&videoName=$2 [QSA] + RewriteRule ^articleEmbed/([0-9a-zA-Z_.-]+)/? view/videoEmbeded.php?v=$1 [QSA] + RewriteRule ^articleEmbed/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?videoName=$1 [QSA] + RewriteRule ^articleEmbed/([0-9a-zA-Z_.-]+)/([^!#$&'()*+,\/:;=?@[\]]+)/?$ view/videoEmbeded.php?v=$1 [QSA] + + #edit your own user + RewriteRule ^user$ view/user.php [NC,L] + RewriteRule ^user/([0-9]+)/foto.png$ view/userGetPhoto.php?users_id=$1 [QSA] + + #manager user + RewriteRule ^users$ view/managerUsers.php [NC,L] + RewriteRule ^users.json$ objects/users.json.php [NC,L] + RewriteRule ^updateUser$ objects/userUpdate.json.php [NC,L] + RewriteRule ^savePhoto$ objects/userSavePhoto.php [NC,L] + RewriteRule ^saveBackground$ objects/userSaveBackground.php [NC,L] + RewriteRule ^addNewUser$ objects/userAddNew.json.php [NC,L] + RewriteRule ^deleteUser$ objects/userDelete.json.php [NC,L] + RewriteRule ^recoverPass$ objects/userRecoverPass.php [NC,L] + RewriteRule ^saveRecoverPassword$ objects/userRecoverPassSave.json.php [NC,L] + RewriteRule ^signUp$ view/signUp.php [NC,L] + RewriteRule ^createUser$ objects/userCreate.json.php [NC,L] + + + RewriteRule ^usersGroups$ view/managerUsersGroups.php [NC,L] + RewriteRule ^usersGroups.json$ objects/usersGroups.json.php [NC,L] + RewriteRule ^addNewUserGroups$ objects/userGroupsAddNew.json.php [NC,L] + RewriteRule ^deleteUserGroups$ objects/userGroupsDelete.json.php [NC,L] + + #manager category + RewriteRule ^categories$ view/managerCategories.php [NC,L] + RewriteRule ^categories.json$ objects/categories.json.php [NC,L] + RewriteRule ^addNewCategory$ objects/categoryAddNew.json.php [NC,L] + RewriteRule ^deleteCategory$ objects/categoryDelete.json.php [NC,L] + RewriteRule ^listCategories$ view/listCategories.php [NC,L] + + #manager plugin + RewriteRule ^plugins$ view/managerPlugins.php [NC,L] + RewriteRule ^plugins.json$ objects/plugins.json.php [NC,L] + RewriteRule ^pluginsAvailable.json$ objects/pluginsAvailable.json.php [NC,L] + RewriteRule ^pluginImport.json$ objects/pluginImport.json.php [NC,L] + RewriteRule ^switchPlugin$ objects/pluginSwitch.json.php [NC,L] + RewriteRule ^addDataObjectPlugin.json$ objects/pluginAddDataObject.json.php [NC,L] + RewriteRule ^runDBScriptPlugin.json$ objects/pluginRunDatabaseScript.json.php [NC,L] + + #manager playList + RewriteRule ^epg.xml$ plugin/PlayLists/epg.xml.php [NC,L,QSA] + RewriteRule ^epg.json$ plugin/PlayLists/epg.json.php [NC,L,QSA] + RewriteRule ^epg.html$ plugin/PlayLists/epg.html.php [NC,L,QSA] + RewriteRule ^epg$ plugin/PlayLists/epg.php [NC,L,QSA] + RewriteRule ^tv$ plugin/PlayLists/tv.php [NC,L,QSA] + RewriteRule ^iptv$ plugin/PlayLists/iptv.php [NC,L,QSA] + RewriteRule ^iptv/([^/]+)/?$ plugin/PlayLists/iptv.php?channelName=$1 [NC,L,QSA] + RewriteRule ^playLists.json$ objects/playlists.json.php [NC,L] + RewriteRule ^playListsVideos.json$ objects/playlistsVideos.json.php [NC,L] + RewriteRule ^playListsFromUser.json/([0-9]+)/?$ objects/playlistsFromUser.json.php?users_id=$1 [NC,L] + RewriteRule ^addNewPlayList$ objects/playlistAddNew.json.php [NC,L] + RewriteRule ^playListAddVideo.json$ objects/playListAddVideo.json.php [NC,L] + RewriteRule ^playlist/([0-9]+)/([0-9]+)/?$ view/?playlist_id=$1&playlist_index=$2 [NC,L] + RewriteRule ^playlist/([0-9]+)/?$ view/?playlist_id=$1 [NC,L] + RewriteRule ^removeVideoFromPlaylist/?$ objects/playlistRemoveVideo.php [NC,L] + RewriteRule ^removePlaylist/?$ objects/playlistRemove.php [NC,L] + RewriteRule ^renamePlaylist/?$ objects/playlistRename.php [NC,L] + RewriteRule ^sortPlaylist/?$ objects/playlistSort.php [NC,L] + RewriteRule ^mrss/?$ feed/index.php?mrss=1 [QSA] + RewriteRule ^roku.json$ feed/index.php?roku=1 [QSA] + RewriteRule ^channel/([^/]+)/roku.json$ feed/index.php?channelName=$1&roku=1 [QSA] + RewriteRule ^channel/([^/]+)/feed/?$ feed/index.php?channelName=$1 [QSA] + RewriteRule ^channel/([^/]+)/rss/?$ feed/index.php?channelName=$1 [QSA] + RewriteRule ^channel/([^/]+)/mrss/?$ feed/index.php?channelName=$1&mrss=1 [QSA] + RewriteRule ^channel/([^/]+) view/channel.php?channelName=$1 [QSA] + RewriteRule ^channel/?$ view/channel.php [QSA] + RewriteRule ^channels/?$ view/channels.php [NC,L] + + #playlist alias + RewriteRule ^programs.json$ objects/playlists.json.php [QSA] + RewriteRule ^program/([0-9]+)/([0-9]+)(/.*)?$ view/?playlist_id=$1&playlist_index=$2 [QSA] + RewriteRule ^program/([0-9]+)(/.*)?$ view/?playlist_id=$1 [QSA] + RewriteRule ^viewProgram/([0-9]+).*?$ view/channelProgram.php?program_id=$1 [QSA] + RewriteRule ^favorite/?$ view/?playlist_name=favorite [QSA] + RewriteRule ^watch-later/?$ view/?playlist_name=watch-later [QSA] + + #manager videos + RewriteRule ^orphanFiles$ view/orphanFiles.php [NC,L] + RewriteRule ^mvideos$ view/managerVideos.php [NC,L] + RewriteRule ^videos.json$ objects/videos.json.php [NC,L] + RewriteRule ^videosAndroid.json$ objects/videosAndroid.json.php [NC,L] + RewriteRule ^videoAndroid.json$ objects/videoAndroid.json.php [NC,L] + RewriteRule ^deleteVideo$ objects/videoDelete.json.php [NC,L] + RewriteRule ^addNewVideo$ objects/videoAddNew.json.php [NC,L] + RewriteRule ^refreshVideo$ objects/videoRefresh.json.php [NC,L] + RewriteRule ^setStatusVideo$ objects/videoStatus.json.php [NC,L] + RewriteRule ^setCategoryVideo$ objects/videoCategory.json.php [NC,L] + RewriteRule ^rotateVideo$ objects/videoRotate.json.php [NC,L] + + + # Subscribes + RewriteRule ^subscribes$ view/managerSubscribes.php [NC,L] + RewriteRule ^subscribes.json$ objects/subscribes.json.php [NC,L] + RewriteRule ^subscribe.json$ objects/subscribe.json.php [NC,L] + RewriteRule ^notifySubscribers.json$ objects/notifySubscribers.json.php [NC,L] + + + RewriteRule ^aVideoQueueEncoder.json$ objects/aVideoQueueEncoder.json.php [NC,L] + RewriteRule ^aVideoEncoder.json$ objects/aVideoEncoder.json.php [NC,L] + RewriteRule ^aVideoEncoderChunk.json$ objects/aVideoEncoderChunk.json.php [NC,L] + + #comment + RewriteRule ^comments$ view/managerComments.php [NC,L] + RewriteRule ^saveComment$ objects/commentAddNew.json.php [NC,L] + RewriteRule ^comments.json/([0-9]+)$ objects/comments.json.php?video_id=$1 [NC,L] + + RewriteRule ^login$ objects/login.json.php [NC,L] + RewriteRule ^logoff$ objects/logoff.php [NC,L] + + RewriteRule ^like$ objects/like.json.php?like=1 [QSA] + RewriteRule ^dislike$ objects/like.json.php?like=-1 [QSA] + + + #manager configuration + + RewriteRule ^update/?$ view/update.php [NC,L] + RewriteRule ^siteConfigurations$ view/configurations.php [NC,L] + RewriteRule ^updateConfig$ objects/configurationUpdate.json.php [NC,L] + + RewriteRule ^charts$ view/charts.php [NC,L] + + RewriteRule ^help$ view/help.php [NC,L] + + # YouTube Sync + RewriteRule ^youtubeUpload$ objects/youtubeUpload.json.php [NC,L] + + RewriteRule ^googleAdView$ view/googleAdView.php [NC,L] + + RewriteRule ^notifications.json$ objects/notifications.json.php [NC,L] + + RewriteRule ^sitemap.xml$ view/sitemap.xml.php [NC,L] + RewriteRule ^robots.txt$ view/robots.txt.php [NC,L] + RewriteRule ^manifest.json$ view/manifest.json.php [NC,L] + + RewriteRule ^videos/(.*)/index.m3u8$ view/hls.php?videoDirectory=$1 [NC,L,QSA] + RewriteRule ^videos/(.*)/index.m3u8.mp4$ view/hls.php?playHLSasMP4=1&videoDirectory=$1 [NC,L,QSA] + + RewriteRule ^vast.xml/?([0-9]+)?$ plugin/AD_Server/VAST.php?campaign_has_videos_id=$1 [NC,L] + + + + RewriteRule ^videos/([_A-Za-z0-9.-]+/)?([^!#$&'()*+,\/:;=?@[\]]+(\.(mp4|webm|m3u8|mp3|ogg)))$ view/xsendfile.php?file=$2 [QSA] + RewriteRule ^videos/cache/download/([_A-Za-z0-9.-]+/)?([^!#$&'()*+,\/:;=?@[\]]+(\.(mp4|webm|m3u8|mp3|ogg)))$ view/xsendfile.php?file=$2&cacheDownload=1 [QSA] + + + # if image do not exists + RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC] + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule (.*)$ img/image404.php?image=$1 [NC,L] + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-l + RewriteRule .*$ view/error.php [NC,L] + + + + # Compress HTML, CSS, JavaScript, Text, XML and fonts + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE application/vnd.ms-fontobject + AddOutputFilterByType DEFLATE application/x-font + AddOutputFilterByType DEFLATE application/x-font-opentype + AddOutputFilterByType DEFLATE application/x-font-otf + AddOutputFilterByType DEFLATE application/x-font-truetype + AddOutputFilterByType DEFLATE application/x-font-ttf + AddOutputFilterByType DEFLATE application/x-javascript + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE font/opentype + AddOutputFilterByType DEFLATE font/otf + AddOutputFilterByType DEFLATE font/ttf + AddOutputFilterByType DEFLATE image/svg+xml + AddOutputFilterByType DEFLATE image/x-icon + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/javascript + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/xml + + +AddType text/vtt .vtt +#php_value post_max_size 4G +#php_value upload_max_filesize 4G diff --git a/admin/health_check.php b/admin/health_check.php index 5447b1ce18ea..6280d9836271 100644 --- a/admin/health_check.php +++ b/admin/health_check.php @@ -1,16 +1,14 @@ [], 'PHP' => [], 'Apache' => []]; $version = phpversion(); $phpMinVersion = '7.3.0'; @@ -69,7 +66,7 @@ function _isAPPInstalled($appName){ $XSendFile = url_get_contents($XSendFileURL); $XSendFileOriginal = file_get_contents($XSendFilePath); //var_dump($XSendFileURL, $XSendFilePath, $XSendFile, $XSendFileOriginal);exit; -if($XSendFile===$XSendFileOriginal){ +if ($XSendFile === $XSendFileOriginal) { $messages['Apache'][] = "XSendFIle is enabled"; } else { $messages['Apache'][] = ["XSendFIle is not enabled", 'https://github.com/WWBN/AVideo/wiki/Install-Apache-XSendFIle']; @@ -101,6 +98,20 @@ function _isAPPInstalled($appName){ $messages['Apache'][] = [$value[0], 'We could not check your installed modules. We recommend you to use apache as a module NOT as a FPM']; } } +/* +if(_isSocketPresentOnCrontab()){ + $messages['Server'][] = "Socket is installed on your crontab"; +}else{ + $messages['Server'][] = ["Socket is NOT installed on your crontab, open your terminal and type 'crontab -e', than add the code: ", "@reboot sleep 60;nohup php {$global['systemRootPath']}plugin/YPTSocket/server.php &"]; +} + +if(_isSchedulerPresentOnCrontab()){ + $messages['Server'][] = "Scheduler plugin is installed on your crontab"; +}else{ + $messages['Server'][] = ["Scheduler plugin is NOT installed on your crontab, open your terminal and type 'crontab -e', than add the code: ", "* * * * * php {$global['systemRootPath']}plugin/Scheduler/run.php"]; +} + * + */ foreach ($linuxApps as $value) { $response = _isAPPInstalled($value[0]); @@ -171,7 +182,7 @@ function _isAPPInstalled($appName){
- ' . PHP_OS . ''; ?> +' . PHP_OS . ''; ?>
@@ -184,48 +195,48 @@ function _isAPPInstalled($appName){
- +
+ } else { + ?>
+ } + } + ?>
- +
- +
-
'; - } - if ($count % 3 === 0) { - echo '
'; - } - } - ?> +
'; + } + if ($count % 3 === 0) { + echo '
'; + } + } + ?>
@@ -238,40 +249,40 @@ function _isAPPInstalled($appName){
- +
+ } else { + ?>
+ } + } + ?>
- +
- +
- +
@@ -284,40 +295,40 @@ function _isAPPInstalled($appName){
- +
+ } else { + ?>
+ } + } + ?>
- +
- +
- +
diff --git a/feed/mrss.php b/feed/mrss.php index 3073e9bdc05a..4fa5efb0d885 100644 --- a/feed/mrss.php +++ b/feed/mrss.php @@ -51,7 +51,7 @@ - + " bitrate="128" type="" expression="full" duration=""> diff --git a/install/checkMaxOpenFiles.php b/install/checkMaxOpenFiles.php new file mode 100644 index 000000000000..187d38d1a98a --- /dev/null +++ b/install/checkMaxOpenFiles.php @@ -0,0 +1,7 @@ + {$file}"); + +echo PHP_EOL."Dump file created at {$file}".PHP_EOL; diff --git a/install/mysqlRestore.php b/install/mysqlRestore.php new file mode 100644 index 000000000000..6d46741a3a05 --- /dev/null +++ b/install/mysqlRestore.php @@ -0,0 +1,67 @@ +query($createSQL); +$global['mysqli']->select_db($mysqlDatabase); + +if (php_sapi_name() !== 'cli') { + return die('Command Line only'); +} + +ob_end_flush(); + +$globPattern = "{$global['systemRootPath']}videos/mysqldump-*.sql"; +echo "Searching [{$globPattern}]" . PHP_EOL; +$glob = glob($globPattern); +foreach ($glob as $key => $file) { + echo "($key) {$file}" . PHP_EOL; +} + +echo "Type the number of what file you want to restore or just press enter to get the latest" . PHP_EOL; +$option = trim(readline("")); + +if ($option === '') { + $filename = end($glob); +} else { + $option = intval($option); + $filename = $glob[$option]; +} + +echo 'We will make a backup first ...' . PHP_EOL; + +$file = "{$global['systemRootPath']}videos/" . 'mysqlBackupBeforeRestore-' . date('YmdHis') . '.sql'; +passthru("mysqldump --opt -u '{$mysqlUser}' -p'{$mysqlPass}' -h {$mysqlHost} {$mysqlDatabase} > {$file}"); +echo PHP_EOL . "Backup file created at {$file}" . PHP_EOL; + +executeFile($filename); + +function executeFile($filename) { + global $global; + $templine = ''; + // Read in entire file + $lines = file($filename); + // Loop through each line + foreach ($lines as $line) { + // Skip it if it's a comment + if (substr($line, 0, 2) == '--' || $line == '') + continue; + + // Add this line to the current segment + $templine .= $line; + // If it has a semicolon at the end, it's the end of the query + if (substr(trim($line), -1, 1) == ';') { + // Perform the query + if (!$global['mysqli']->query($templine)) { + echo ('sqlDAL::executeFile ' . $filename . ' Error performing query \'' . $templine . '\': ' . $global['mysqli']->error . '

'); + } + // Reset temp variable to empty + $templine = ''; + } + } +} diff --git a/install/stopDDOSAtackIps.php b/install/stopDDOSAtackIps.php index 4fde8482b712..5fdffc1d7b91 100644 --- a/install/stopDDOSAtackIps.php +++ b/install/stopDDOSAtackIps.php @@ -1,5 +1,11 @@ &1', $output, $return_var); echo json_encode($output) . PHP_EOL; - echo '--------------'. PHP_EOL; + echo '--------------' . PHP_EOL; if ($output[0] === 'Rule inserted') { $newRules[] = $ip; } @@ -73,13 +118,41 @@ function tailShell($filepath, $lines = 1) { $totalNew = count($newRules); //echo PHP_EOL . date('Y-m-d H:i:s').' Found ' . $total . PHP_EOL; //echo PHP_EOL . $totalNew . ' New IPs added: ' . implode(', ', $newRules) . PHP_EOL; + + if ($totalNew) { + $timeout = $defaultTimeout/4; + $linesCount = intval($defaultLines/4); + echo "*** {$totalNew} new rules inserted" . PHP_EOL; + } - if($totalNew){ - //exec('/etc/init.d/apache2 restart'); - exec('/etc/init.d/mysql stop'); - }else{ + if ($totalNew && !$mySQLIsStopped) { + $load = percentloadavg(); + echo '*** sys_getloadavg: '.$load[0] . PHP_EOL; + if ($load[0] > 0.80) { + //exec('/etc/init.d/apache2 restart'); + echo '*** STOP MySQL' . PHP_EOL; + $mySQLIsStopped = 1; + exec('/etc/init.d/mysql stop'); + } + } else if (empty($totalNew) && $mySQLIsStopped) { + echo '*** Start MySQL 1' . PHP_EOL; + $mySQLIsStopped = 0; exec('/etc/init.d/mysql start'); + $timeout = $defaultTimeout; + $linesCount = $defaultLines; + }else if($mySQLIsStopped){ + $load = percentloadavg(); + echo '*** sys_getloadavg: '.$load[0] . PHP_EOL; + if ($load[0] < 0.50) { + echo '*** Start MySQL 2' . PHP_EOL; + $mySQLIsStopped = 0; + exec('/etc/init.d/mysql start'); + $timeout = $defaultTimeout; + $linesCount = $defaultLines; + } } - - sleep(2); + if ($totalNew) { + echo "*******" . PHP_EOL . PHP_EOL; + } + sleep($timeout); } \ No newline at end of file diff --git a/objects/ICS.php b/objects/ICS.php new file mode 100644 index 000000000000..bf01f63d31d6 --- /dev/null +++ b/objects/ICS.php @@ -0,0 +1,170 @@ + + * + * ICS.php + * ============================================================================= + * Use this class to create an .ics file. + * + * + * Usage + * ----------------------------------------------------------------------------- + * Basic usage - generate ics file contents (see below for available properties): + * $ics = new ICS($props); + * $ics_file_contents = $ics->to_string(); + * + * Setting properties after instantiation + * $ics = new ICS(); + * $ics->set('summary', 'My awesome event'); + * + * You can also set multiple properties at the same time by using an array: + * $ics->set(array( + * 'dtstart' => 'now + 30 minutes', + * 'dtend' => 'now + 1 hour' + * )); + * + * Available properties + * ----------------------------------------------------------------------------- + * description + * String description of the event. + * dtend + * A date/time stamp designating the end of the event. You can use either a + * DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). + * dtstart + * A date/time stamp designating the start of the event. You can use either a + * DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). + * location + * String address or description of the location of the event. + * summary + * String short summary of the event - usually used as the title. + * url + * A url to attach to the the event. Make sure to add the protocol (http:// + * or https://). + */ + +class ICS { + const DT_FORMAT = 'Ymd\THis\Z'; + + protected $properties = array(); + private $available_properties = array( + 'description', + 'dtend', + 'dtstart', + 'location', + 'summary', + 'url', + 'valarm' + ); + + public function __construct($props) { + $this->set($props); + } + + public function set($key, $val = false) { + if (is_array($key)) { + foreach ($key as $k => $v) { + $this->set($k, $v); + } + } else { + if (in_array($key, $this->available_properties)) { + $this->properties[$key] = $this->sanitize_val($val, $key); + } + } + } + + public function to_string() { + $rows = $this->build_props(); + return implode("\r\n", $rows); + } + + private function build_props() { + // Build ICS properties - add header + $ics_props = array( + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//hacksw/handcal//NONSGML v1.0//EN', + 'CALSCALE:GREGORIAN', + 'BEGIN:VEVENT' + ); + + // Build ICS properties - add header + $props = array(); + foreach($this->properties as $k => $v) { + $props[strtoupper($k . ($k === 'url' ? ';VALUE=URI' : ''))] = $v; + } + + // Set some default values + $props['DTSTAMP'] = $this->format_timestamp('now'); + $props['UID'] = uniqid(); + + // Append properties + foreach ($props as $k => $v) { + if($k=='VALARM'){ + $ics_props[] = "BEGIN:VALARM"; + $ics_props[] = "$k:$v"; + if(!empty($props['DESCRIPTION'])){ + $ics_props[] = "ACTION:DISPLAY"; + }else{ + $ics_props[] = "ACTION:AUDIO"; + } + $ics_props[] = "END:VALARM"; + }else{ + $ics_props[] = "$k:$v"; + } + } + + // Build ICS properties - add footer + $ics_props[] = 'END:VEVENT'; + $ics_props[] = 'END:VCALENDAR'; + + return $ics_props; + } + + private function sanitize_val($val, $key = false) { + switch($key) { + case 'dtend': + case 'dtstamp': + case 'dtstart': + $val = $this->format_timestamp($val); + break; + default: + $val = $this->escape_string($val); + } + + return $val; + } + + private function format_timestamp($timestamp) { + $dt = new DateTime($timestamp); + $dt->setTimezone(new DateTimeZone('UTC')); + return $dt->format(self::DT_FORMAT); + } + + private function escape_string($str) { + return preg_replace('/([\,;])/','\\\$1', $str); + } +} \ No newline at end of file diff --git a/objects/Object.php b/objects/Object.php index 01e2e3201243..f9d9f7df6804 100644 --- a/objects/Object.php +++ b/objects/Object.php @@ -328,7 +328,8 @@ public function save() } $sql .= " VALUES (" . implode(", ", $fields) . ")"; } - //if(static::getTableName() == 'subscriptions') echo $sql; + //if(static::getTableName() == 'Scheduler_commands'){ echo $sql;var_dump($this->parameters);exit;} + //echo $sql;var_dump($this->parameters);exit; $insert_row = sqlDAL::writeSql($sql); if ($insert_row) { diff --git a/objects/functionGetHamburgerButton.php b/objects/functionGetHamburgerButton.php new file mode 100644 index 000000000000..3af054392521 --- /dev/null +++ b/objects/functionGetHamburgerButton.php @@ -0,0 +1,162 @@ + + + + + + diff --git a/objects/functions.php b/objects/functions.php index 33ef2104056b..8e641d3618d7 100644 --- a/objects/functions.php +++ b/objects/functions.php @@ -166,7 +166,7 @@ function secondsToHumanTiming($time, $precision = 0) { ]; /** - * For detection propouse only + * For detection purposes only */ __('year'); __('month'); @@ -545,8 +545,9 @@ function partition(array $list, $totalItens) { return $partition; } -function sendSiteEmail($to, $subject, $message) { +function sendSiteEmail($to, $subject, $message, $fromEmail = '', $fromName = '') { global $advancedCustom; + $resp = false; if (empty($to)) { return false; } @@ -564,13 +565,18 @@ function sendSiteEmail($to, $subject, $message) { _error_log("sendSiteEmail [" . count($to) . "] {$subject}"); global $config, $global; //require_once $global['systemRootPath'] . 'objects/include_phpmailer.php'; - $contactEmail = $config->getContactEmail(); + if (empty($fromEmail)) { + $fromEmail = $config->getContactEmail(); + } + if (empty($fromName)) { + $fromName = $config->getWebSiteTitle(); + } $webSiteTitle = $config->getWebSiteTitle(); try { if (!is_array($to)) { $mail = new \PHPMailer\PHPMailer\PHPMailer(); setSiteSendMessage($mail); - $mail->setFrom($contactEmail, $webSiteTitle); + $mail->setFrom($fromEmail, $fromName); $mail->Subject = $subject . " - " . $webSiteTitle; $mail->msgHTML($message); @@ -593,7 +599,7 @@ function sendSiteEmail($to, $subject, $message) { foreach ($pieces as $piece) { $mail = new \PHPMailer\PHPMailer\PHPMailer(); setSiteSendMessage($mail); - $mail->setFrom($contactEmail, $webSiteTitle); + $mail->setFrom($fromEmail, $fromName); $mail->Subject = $subject . " - " . $webSiteTitle; $mail->msgHTML($message); $count = 0; @@ -618,6 +624,7 @@ function sendSiteEmail($to, $subject, $message) { } catch (Exception $e) { _error_log($e->getMessage()); //Boring error messages from anything else! } + return $resp; } function sendSiteEmailAsync($to, $subject, $message) { @@ -3929,7 +3936,13 @@ function _mysql_connect() { if (!_mysql_is_open()) { //_error_log('MySQL Connect '. json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS))); $mysql_connect_was_closed = 0; - $global['mysqli'] = new mysqli($mysqlHost, $mysqlUser, $mysqlPass, $mysqlDatabase, @$mysqlPort); + $global['mysqli'] = new mysqli($mysqlHost, $mysqlUser, $mysqlPass, '', @$mysqlPort); + if (isCommandLineInterface() && !empty($global['createDatabase'])) { + $createSQL = "CREATE DATABASE IF NOT EXISTS {$mysqlDatabase};"; + _error_log($createSQL); + $global['mysqli']->query($createSQL); + } + $global['mysqli']->select_db($mysqlDatabase); if (!empty($global['mysqli_charset'])) { $global['mysqli']->set_charset($global['mysqli_charset']); } @@ -5726,7 +5739,7 @@ function forbiddenPage($message = '', $logMessage = false, $unlockPassword = '', $headers = headers_list(); // get list of headers foreach ($headers as $header) { // iterate over that list of headers - if (stripos($header, 'Content-Type') !== FALSE) { // if the current header hasthe String "Content-Type" in it + if (stripos($header, 'Content-Type:') !== FALSE) { // if the current header hasthe String "Content-Type" in it $headerParts = explode(':', $header); // split the string, getting an array $headerValue = trim($headerParts[1]); // take second part as value $contentType = $headerValue; @@ -6972,6 +6985,7 @@ function getStatsNotifications($force_recreate = false, $listItIfIsAdminOrOwner } } $cache = ObjectYPT::setCache($cacheName, $json); + Live::unfinishAllFromStats(); //_error_log('Live::createStatsCache ' . json_encode($cache)); } else { //_error_log('getStatsNotifications: 2 cached result'); @@ -8173,3 +8187,105 @@ function pluginsRequired($arrayPluginName, $featureName = '') { } return $obj; } + +function _strtotime($datetime) { + if (is_int($datetime)) { + return $datetime; + } + return strtotime($datetime); +} + +function _isSocketPresentOnCrontab() { + foreach (getValidCrontabLines() as $line) { + if (!empty($line) && preg_match('/plugin\/YPTSocket\/server.php/', $line)) { + return true; + } + } + return false; +} + +function _isSchedulerPresentOnCrontab() { + foreach (getValidCrontabLines() as $line) { + if (!empty($line) && preg_match('/plugin\/Scheduler\/run.php/', $line)) { + return true; + } + } + return false; +} + +function getValidCrontabLines() { + global $_validCrontabLines; + if (empty($validCrontabLines)) { + $crontab = shell_exec('crontab -l'); + $crontabLines = preg_split("/\r\n|\n|\r/", $crontab); + $_validCrontabLines = array(); + + foreach ($crontabLines as $line) { + $line = trim($line); + if (!empty($line) && !preg_match('/^#/', $line)) { + $_validCrontabLines[] = $line; + } + } + } + return $_validCrontabLines; +} + +/** + * + * @param type $strOrArray + * @return type return an array with the valid emails. + */ +function is_email($strOrArray) { + if (empty($strOrArray)) { + return array(); + } + if (!is_array($strOrArray)) { + $strOrArray = array($strOrArray); + } + $valid_emails = array(); + foreach ($strOrArray as $email) { + if (is_numeric($email)) { + $email = User::getEmailDb($email); + } + if (filter_var($email, FILTER_VALIDATE_EMAIL)) { + $valid_emails[] = $email; + } + } + return $valid_emails; +} + +/** + * https://codepen.io/ainalem/pen/LJYRxz + * @global type $global + * @param type $id + * @param type $type 1 to 8 [1=x, 2=<-, 3=close, 4=x, 5=<-, 6=x, 7=x, 8=x] + * @param type $parameters + * @return type + */ +function getHamburgerButton($id = '', $type = 0, $parameters = 'class="btn btn-default hamburger"', $startActive = false, $invert = false) { + global $global; + if ($type === 'x') { + $XOptions = array(1, 4, 6, 7, 8); + $type = $XOptions[rand(0, 4)]; + }else if($type === '<-'){ + $XOptions = array(2, 5); + $type = $XOptions[rand(0, 1)]; + } + $type = intval($type); + if (empty($type) || ($type < 1 && $type > 8)) { + $type = rand(1, 8); + } + if (empty($id)) { + $id = uniqid(); + } + $filePath = $global['systemRootPath'] . 'objects/functionGetHamburgerButton.php'; + return getIncludeFileContent($filePath, array('type' => $type, 'id' => $id, 'parameters' => $parameters, 'startActive' => $startActive, 'invert' => $invert)); +} + +function getUserOnlineLabel($users_id, $class='', $style=''){ + if(AVideoPlugin::isEnabledByName('YPTSocket')){ + return YPTSocket::getUserOnlineLabel($users_id, $class, $style); + }else{ + return ''; + } +} \ No newline at end of file diff --git a/objects/mysql_dal.php b/objects/mysql_dal.php index e4b9e841d8a9..0d72675fa7cd 100644 --- a/objects/mysql_dal.php +++ b/objects/mysql_dal.php @@ -100,6 +100,7 @@ public static function writeSql($preparedStatement, $formats = "", $values = []) " formats = ". json_encode($formats)); return false; } + //var_dump($preparedStatement, $formats, $values);exit; if (!sqlDAL::eval_mysql_bind($stmt, $formats, $values)) { log_error("[sqlDAL::writeSql] eval_mysql_bind failed: values and params in stmt don't match ({$preparedStatement}) with formats ({$formats})"); return false; diff --git a/objects/user.php b/objects/user.php index e5670ecb971d..834a53753c1e 100644 --- a/objects/user.php +++ b/objects/user.php @@ -267,6 +267,16 @@ public static function getEmail_() { return false; } } + + public static function _getEmail() { + return self::getEmail_(); + } + + static function getEmailDb($users_id) { + $user = self::getUserDB($users_id); + return @$user['email']; + } + public function getBdId() { return $this->id; @@ -593,11 +603,7 @@ public static function getBackground($id = "") { } public static function getMail() { - if (self::isLogged()) { - return $_SESSION['user']['email']; - } else { - return false; - } + self::getEmail_(); } public function save($updateUserGroups = false) { diff --git a/plugin/CustomizeAdvanced/CustomizeAdvanced.php b/plugin/CustomizeAdvanced/CustomizeAdvanced.php index 62b0f43032c6..4491459067aa 100644 --- a/plugin/CustomizeAdvanced/CustomizeAdvanced.php +++ b/plugin/CustomizeAdvanced/CustomizeAdvanced.php @@ -1,520 +1,521 @@ - Help"; - return $txt . $help; - } - - public function getName() { - return "CustomizeAdvanced"; - } - - public function getUUID() { - return "55a4fa56-8a30-48d4-a0fb-8aa6b3f69033"; - } - - public function getPluginVersion() { - return "1.0"; - } - - public function getEmptyDataObject() { - global $global; - $obj = new stdClass(); - $obj->logoMenuBarURL = ""; - $obj->encoderNetwork = "https://network.wwbn.net/"; - $obj->useEncoderNetworkRecomendation = false; - $obj->doNotShowEncoderNetwork = true; - $obj->doNotShowUploadButton = false; - $obj->uploadButtonDropdownIcon = "fas fa-video"; - $obj->uploadButtonDropdownText = ""; - $obj->encoderNetworkLabel = ""; - $obj->doNotShowUploadMP4Button = true; - $obj->disablePDFUpload = false; - $obj->disableImageUpload = false; - $obj->disableZipUpload = true; - $obj->disableMP4Upload = false; - $obj->disableMP3Upload = false; - $obj->uploadMP4ButtonLabel = ""; - $obj->doNotShowImportMP4Button = true; - $obj->importMP4ButtonLabel = ""; - $obj->doNotShowEncoderButton = false; - $obj->encoderButtonLabel = ""; - $obj->doNotShowEmbedButton = false; - $obj->embedBackgroundColor = "white"; - $obj->embedButtonLabel = ""; - $obj->embedCodeTemplate = '
'; - $obj->embedCodeTemplateObject = '
'; - $obj->htmlCodeTemplate = '{title}'; - $obj->BBCodeTemplate = '[url={permaLink}][img]{imgSRC}[/img]{title}[/url]'; - - $o = new stdClass(); - $o->type = array(-1 => __("Basic Controls"), 0 => __("No Controls"), 1 => __("All controls")); - $o->value = 1; - $obj->embedControls = $o; - $obj->embedAutoplay = false; - $obj->embedLoop = false; - $obj->embedStartMuted = false; - $obj->embedShowinfo = true; - - $obj->doNotShowEncoderHLS = false; - $obj->doNotShowEncoderResolutionLow = false; - $obj->doNotShowEncoderResolutionSD = false; - $obj->doNotShowEncoderResolutionHD = false; - $obj->openEncoderInIFrame = false; - $obj->showOnlyEncoderAutomaticResolutions = true; - $obj->doNotShowEncoderAutomaticHLS = false; - $obj->doNotShowEncoderAutomaticMP4 = false; - $obj->doNotShowEncoderAutomaticWebm = false; - $obj->doNotShowEncoderAutomaticAudio = false; - $obj->saveOriginalVideoResolution = false; - self::addDataObjectHelper('saveOriginalVideoResolution', 'Do not save original video', 'This option will make your encoder at the end trancode the video into the original format resolution'); - $obj->doNotShowExtractAudio = false; - $obj->doNotShowCreateVideoSpectrum = false; - $obj->doNotShowLeftMenuAudioAndVideoButtons = false; - $obj->doNotShowWebsiteOnContactForm = false; - $obj->doNotUseXsendFile = false; - $obj->makeVideosInactiveAfterEncode = false; - $obj->makeVideosUnlistedAfterEncode = false; - $obj->usePermalinks = false; - $obj->useVideoIDOnSEOLinks = true; - $obj->disableAnimatedGif = false; - $obj->removeBrowserChannelLinkFromMenu = false; - $obj->EnableMinifyJS = false; - $obj->disableShareAndPlaylist = false; - $obj->disableShareOnly = false; - $obj->disableEmailSharing = false; - $obj->splitBulkEmailSend = 50; - $obj->disableComments = false; - $obj->commentsMaxLength = 200; - $obj->commentsNoIndex = false; - $obj->disableYoutubePlayerIntegration = false; - $obj->utf8Encode = false; - $obj->utf8Decode = false; - $o = new stdClass(); - $o->type = "textarea"; - $o->value = ""; - $obj->menuBarHTMLCode = $o; - $o->type = "textarea"; - $o->value = ""; - $obj->underMenuBarHTMLCode = $o; - $o->type = "textarea"; - $o->value = ""; - $obj->footerHTMLCode = $o; - $obj->signInOnRight = true; - $obj->signInOnLeft = true; - $obj->forceCategory = false; - $obj->showCategoryTopImages = true; - $obj->autoPlayAjax = false; - - $plugins = Plugin::getAllEnabled(); - //import external plugins configuration options - foreach ($plugins as $value) { - $p = AVideoPlugin::loadPlugin($value['dirName']); - if (is_object($p)) { - $foreginObjects = $p->getCustomizeAdvancedOptions(); - if ($foreginObjects) { - foreach ($foreginObjects as $optionName => $defaultValue) - $obj->{$optionName} = $defaultValue; - } - } - } - - $obj->disableInstallPWAButton = false; - $obj->disablePlayLink = false; - $obj->disableHelpLeftMenu = false; - $obj->disableAboutLeftMenu = false; - $obj->disableContactLeftMenu = false; - $obj->disableAnimations = false; - $obj->disableNavbar = false; - $obj->disableNavBarInsideIframe = true; - $obj->autoHideNavbar = true; - $obj->autoHideNavbarInSeconds = 0; - $obj->videosCDN = ""; - $obj->useFFMPEGToGenerateThumbs = false; - $obj->thumbsWidthPortrait = 170; - $obj->thumbsHeightPortrait = 250; - $obj->thumbsWidthLandscape = 640; - $obj->thumbsHeightLandscape = 360; - $obj->usePreloadLowResolutionImages = false; - $obj->showImageDownloadOption = false; - $obj->doNotDisplayViews = false; - $obj->doNotDisplayLikes = false; - $obj->doNotDisplayCategoryLeftMenu = false; - $obj->doNotDisplayCategory = false; - $obj->doNotDisplayGroupsTags = false; - $obj->doNotDisplayPluginsTags = false; - $obj->showNotRatedLabel = false; - $obj->showShareMenuOpenByDefault = false; - - foreach ($global['social_medias'] as $key => $value) { - eval("\$obj->showShareButton_{$key} = true;"); - } - - $obj->askRRatingConfirmationBeforePlay_G = false; - $obj->askRRatingConfirmationBeforePlay_PG = false; - $obj->askRRatingConfirmationBeforePlay_PG13 = false; - $obj->askRRatingConfirmationBeforePlay_R = false; - $obj->askRRatingConfirmationBeforePlay_NC17 = true; - $obj->askRRatingConfirmationBeforePlay_MA = true; - $obj->filterRRating = false; - - - $obj->doNotShowLeftHomeButton = false; - $obj->doNotShowLeftTrendingButton = false; - - $obj->CategoryLabel = "Categories"; - $obj->ShowAllVideosOnCategory = false; - $obj->hideCategoryVideosCount = false; - $obj->hideEditAdvancedFromVideosManager = false; - - //ver 7.1 - $obj->paidOnlyUsersTellWhatVideoIs = false; - $obj->paidOnlyShowLabels = false; - $obj->paidOnlyLabel = "Premium"; - $obj->paidOnlyFreeLabel = "Free"; - $obj->removeSubscribeButton = false; - $obj->removeThumbsUpAndDown = false; - - $o = new stdClass(); - $o->type = "textarea"; - $o->value = ""; - $obj->videoNotFoundText = $o; - $obj->siteMapRowsLimit = 100; - $obj->siteMapUTF8Fix = false; - $obj->showPrivateVideosOnSitemap = false; - $obj->enableOldPassHashCheck = true; - $obj->disableHTMLDescription = false; - $obj->disableVideoSwap = false; - $obj->makeSwapVideosOnlyForAdmin = false; - $obj->disableCopyEmbed = false; - $obj->disableDownloadVideosList = false; - $obj->videosManegerRowCount = "[10, 25, 50, -1]"; //An Array of Integer which will be shown in the dropdown box to choose the row count. Default value is [10, 25, 50, -1]. -1 means all. When passing an Integer value the dropdown box will disapear. - $obj->videosListRowCount = "[10, 20, 30, 40, 50]"; //An Array of Integer which will be shown in the dropdown box to choose the row count. Default value is [10, 25, 50, -1]. -1 means all. When passing an Integer value the dropdown box will disapear. - $obj->videosManegerBulkActionButtons = true; - - $parse = parse_url($global['webSiteRootURL']); - $domain = str_replace(".", "", $parse['host']); - $obj->twitter_site = "@{$domain}"; - $obj->twitter_player = true; - $obj->twitter_summary_large_image = false; - $obj->footerStyle = "position: fixed;bottom: 0;width: 100%;"; - $obj->disableVideoTags = false; - $obj->doNotAllowEncoderOverwriteStatus = false; - $obj->doNotAllowUpdateVideoId = false; - $obj->makeVideosIDHarderToGuess = false; - self::addDataObjectHelper('makeVideosIDHarderToGuess', 'Make the videos ID harder to guess', 'This will change the videos_id on the URL to a crypted value. this crypt user your $global[salt] (configuration.php), so make sure you keep it save in case you need to restore your site, otherwise all the shared links will be lost'); - - - - $o = new stdClass(); - $o->type = DateTimeZone::listIdentifiers(DateTimeZone::ALL); - $o->value = 0; - $obj->timeZone = $o; - - - $obj->keywords = "AVideo, videos, live, movies"; - $obj->doNotSaveCacheOnFilesystem = false; - - - $o = new stdClass(); - $o->type = "textarea"; - $o->value = "Allow: /plugin/Live/?* -Allow: /plugin/PlayLists/*.css -Allow: /plugin/PlayLists/*.js -Allow: /plugin/TopMenu/*.css -Allow: /plugin/TopMenu/*.js -Allow: /plugin/SubtitleSwitcher/*.css -Allow: /plugin/SubtitleSwitcher/*.js -Allow: /plugin/Gallery/*.css -Allow: /plugin/Gallery/*.js -Allow: /plugin/YouPHPFlix2/*.png -Allow: /plugin/Live/*.css -Allow: /plugin/Live/*.js -Allow: /plugin/*.css -Allow: /plugin/*.js -Allow: .js -Allow: .css -Disallow: /user -Disallow: /plugin -Disallow: /mvideos -Disallow: /usersGroups -Disallow: /charts -Disallow: /upload -Disallow: /comments -Disallow: /subscribes -Disallow: /update -Disallow: /locale -Disallow: /objects/* -Allow: /plugin/Live/?* -Allow: /plugin/LiveLink/?* -Allow: /plugin/PlayLists/*.css -Allow: /plugin/PlayLists/*.js -Allow: /plugin/TopMenu/*.css -Allow: /plugin/TopMenu/*.js -Allow: /plugin/SubtitleSwitcher/*.css -Allow: /plugin/SubtitleSwitcher/*.js -Allow: /plugin/Gallery/*.css -Allow: /plugin/Gallery/*.js -Allow: /plugin/YouPHPFlix2/*.png -Allow: /plugin/Live/*.css -Allow: /plugin/Live/*.js -Allow: /plugin/*.css -Allow: /plugin/*.js -Allow: .js -Allow: .css"; - $obj->robotsTXT = $o; - self::addDataObjectHelper('robotsTXT', 'robots.txt file content', 'robots.txt is a plain text file that follows the Robots Exclusion Standard. A robots.txt file consists of one or more rules. Each rule blocks (or allows) access for a given crawler to a specified file path in that website.'); - - - return $obj; - } - - public function getHelp() { - if (User::isAdmin()) { - return "

CustomizeAdvanced (admin)

" . $this->getDescription() . "

"; - } - return ""; - } - - public function getModeYouTube($videos_id) { - global $global, $config; - $obj = $this->getDataObject(); - $video = Video::getVideo($videos_id, "viewable", true); - if (!empty($video['rrating']) && empty($_GET['rrating'])) { - $suffix = strtoupper(str_replace("-", "", $video['rrating'])); - eval("\$show = \$obj->askRRatingConfirmationBeforePlay_$suffix;"); - if (!empty($show)) { - include "{$global['systemRootPath']}plugin/CustomizeAdvanced/confirmRating.php"; - exit; - } - } - } - - public function getEmbed($videos_id) { - return $this->getModeYouTube($videos_id); - } - - public function getFooterCode() { - global $global; - - $obj = $this->getDataObject(); - $content = ''; - if ($obj->autoHideNavbar && !isEmbed()) { - $content .= ''; - $content .= ''; - } - if ($obj->autoHideNavbarInSeconds && !isEmbed()) { - $content .= ''; - } - return $content; - } - - public function getHTMLMenuRight() { - global $global; - $obj = $this->getDataObject(); - if ($obj->filterRRating) { - include $global['systemRootPath'] . 'plugin/CustomizeAdvanced/menuRight.php'; - } - } - - public function getHTMLMenuLeft() { - global $global; - $obj = $this->getDataObject(); - if ($obj->filterRRating) { - include $global['systemRootPath'] . 'plugin/CustomizeAdvanced/menuLeft.php'; - } - } - - public static function getVideoWhereClause() { - $sql = ""; - $obj = AVideoPlugin::getObjectData("CustomizeAdvanced"); - if ($obj->filterRRating && isset($_GET['rrating'])) { - if ($_GET['rrating'] === "0") { - $sql .= " AND v.rrating = ''"; - } else if (in_array($_GET['rrating'], Video::$rratingOptions)) { - $sql .= " AND v.rrating = '{$_GET['rrating']}'"; - } - } - return $sql; - } - - public function getVideosManagerListButton() { - $btn = ""; - if (User::isAdmin()) { - $btn = ''; - $btn .= ''; - } - return $btn; - } - - public function getHeadCode() { - global $global; - $obj = $this->getDataObject(); - - if($obj->makeVideosIDHarderToGuess){ - if(isVideo()){ - if(!empty($global['makeVideosIDHarderToGuessNotDecrypted'])){ - unset($global['makeVideosIDHarderToGuessNotDecrypted']); - forbiddenPage(__('Invalid ID')); - } - } - } - - $baseName = basename($_SERVER['REQUEST_URI']); - - $js = ""; - if(empty($obj->autoPlayAjax)){ - $js .= ""; - }else{ - $js .= ""; - } - if ($baseName === 'mvideos') { - $js .= ""; - $js .= ""; - } - return $js; - } - - public function onReceiveFile($videos_id) { - Video::updateFilesize($videos_id); - return true; - } - -} - -class SocialMedias{ - public $href; - public $class; - public $title; - public $iclass; - public $img; - public $onclick; - - function __construct($iclass, $img='') { - $this->iclass = $iclass; - $this->img = $img; - } - - - function getHref() { - return $this->href; - } - - function getClass() { - return $this->class; - } - - function getTitle() { - return $this->title; - } - - function getIclass() { - return $this->iclass; - } - - function getImg() { - return $this->img; - } - - function getOnclick() { - return $this->onclick; - } - - function setHref($href): void { - $this->href = $href; - } - - function setClass($class): void { - $this->class = $class; - } - - function setTitle($title): void { - $this->title = $title; - } - - function setIclass($iclass): void { - $this->iclass = $iclass; - } - - function setImg($img): void { - $this->img = $img; - } - - function setOnclick($onclick): void { - $this->onclick = $onclick; - } - - -} - -$global['social_medias'] = array( - 'Facebook'=>new SocialMedias('fab fa-facebook-square', ''), - 'Twitter'=>new SocialMedias('fab fa-twitter', ''), - 'Tumblr'=>new SocialMedias('fab fa-tumblr', ''), - 'Pinterest'=>new SocialMedias('fab fa-pinterest-p', ''), - 'Reddit'=>new SocialMedias('fab fa-reddit-alien', ''), - 'LinkedIn'=>new SocialMedias('fab fa-linkedin-in', ''), - 'Wordpress'=>new SocialMedias('fab fa-wordpress-simple', ''), - 'Pinboard'=>new SocialMedias('fas fa-thumbtack', ''), - 'Gab'=>new SocialMedias('', getURL('view/img/gab.png')), - 'CloutHub'=>new SocialMedias('', getURL('view/img/cloutHub.png')), -); \ No newline at end of file + Help"; + return $txt . $help; + } + + public function getName() { + return "CustomizeAdvanced"; + } + + public function getUUID() { + return "55a4fa56-8a30-48d4-a0fb-8aa6b3f69033"; + } + + public function getPluginVersion() { + return "1.0"; + } + + public function getEmptyDataObject() { + global $global; + $obj = new stdClass(); + $obj->logoMenuBarURL = ""; + $obj->encoderNetwork = "https://network.wwbn.net/"; + $obj->useEncoderNetworkRecomendation = false; + $obj->doNotShowEncoderNetwork = true; + $obj->doNotShowUploadButton = false; + $obj->uploadButtonDropdownIcon = "fas fa-video"; + $obj->uploadButtonDropdownText = ""; + $obj->encoderNetworkLabel = ""; + $obj->doNotShowUploadMP4Button = true; + $obj->disablePDFUpload = false; + $obj->disableImageUpload = false; + $obj->disableZipUpload = true; + $obj->disableMP4Upload = false; + $obj->disableMP3Upload = false; + $obj->uploadMP4ButtonLabel = ""; + $obj->doNotShowImportMP4Button = true; + $obj->importMP4ButtonLabel = ""; + $obj->doNotShowEncoderButton = false; + $obj->encoderButtonLabel = ""; + $obj->doNotShowEmbedButton = false; + $obj->embedBackgroundColor = "white"; + $obj->embedButtonLabel = ""; + $obj->embedCodeTemplate = '
'; + $obj->embedCodeTemplateObject = '
'; + $obj->htmlCodeTemplate = '{title}'; + $obj->BBCodeTemplate = '[url={permaLink}][img]{imgSRC}[/img]{title}[/url]'; + + $o = new stdClass(); + $o->type = array(-1 => __("Basic Controls"), 0 => __("No Controls"), 1 => __("All controls")); + $o->value = 1; + $obj->embedControls = $o; + $obj->embedAutoplay = false; + $obj->embedLoop = false; + $obj->embedStartMuted = false; + $obj->embedShowinfo = true; + + $obj->doNotShowEncoderHLS = false; + $obj->doNotShowEncoderResolutionLow = false; + $obj->doNotShowEncoderResolutionSD = false; + $obj->doNotShowEncoderResolutionHD = false; + $obj->openEncoderInIFrame = false; + $obj->showOnlyEncoderAutomaticResolutions = true; + $obj->doNotShowEncoderAutomaticHLS = false; + $obj->doNotShowEncoderAutomaticMP4 = false; + $obj->doNotShowEncoderAutomaticWebm = false; + $obj->doNotShowEncoderAutomaticAudio = false; + $obj->saveOriginalVideoResolution = false; + self::addDataObjectHelper('saveOriginalVideoResolution', 'Do not save original video', 'This option will make your encoder at the end trancode the video into the original format resolution'); + $obj->doNotShowExtractAudio = false; + $obj->doNotShowCreateVideoSpectrum = false; + $obj->doNotShowLeftMenuAudioAndVideoButtons = false; + $obj->doNotShowWebsiteOnContactForm = false; + $obj->doNotUseXsendFile = false; + $obj->makeVideosInactiveAfterEncode = false; + $obj->makeVideosUnlistedAfterEncode = false; + $obj->usePermalinks = false; + $obj->useVideoIDOnSEOLinks = true; + $obj->disableAnimatedGif = false; + $obj->removeBrowserChannelLinkFromMenu = false; + $obj->EnableMinifyJS = false; + $obj->disableShareAndPlaylist = false; + $obj->disableShareOnly = false; + $obj->disableEmailSharing = false; + $obj->splitBulkEmailSend = 50; + $obj->disableComments = false; + $obj->commentsMaxLength = 200; + $obj->commentsNoIndex = false; + $obj->disableYoutubePlayerIntegration = false; + $obj->utf8Encode = false; + $obj->utf8Decode = false; + $o = new stdClass(); + $o->type = "textarea"; + $o->value = ""; + $obj->menuBarHTMLCode = $o; + $o->type = "textarea"; + $o->value = ""; + $obj->underMenuBarHTMLCode = $o; + $o->type = "textarea"; + $o->value = ""; + $obj->footerHTMLCode = $o; + $obj->signInOnRight = true; + $obj->signInOnLeft = true; + $obj->forceCategory = false; + $obj->showCategoryTopImages = true; + $obj->autoPlayAjax = false; + + $plugins = Plugin::getAllEnabled(); + //import external plugins configuration options + foreach ($plugins as $value) { + $p = AVideoPlugin::loadPlugin($value['dirName']); + if (is_object($p)) { + $foreginObjects = $p->getCustomizeAdvancedOptions(); + if ($foreginObjects) { + foreach ($foreginObjects as $optionName => $defaultValue) + $obj->{$optionName} = $defaultValue; + } + } + } + + $obj->disableInstallPWAButton = false; + $obj->disablePlayLink = false; + $obj->disableHelpLeftMenu = false; + $obj->disableAboutLeftMenu = false; + $obj->disableContactLeftMenu = false; + $obj->disableAnimations = false; + $obj->disableNavbar = false; + $obj->disableNavBarInsideIframe = true; + $obj->autoHideNavbar = true; + $obj->autoHideNavbarInSeconds = 0; + $obj->videosCDN = ""; + $obj->useFFMPEGToGenerateThumbs = false; + $obj->thumbsWidthPortrait = 170; + $obj->thumbsHeightPortrait = 250; + $obj->thumbsWidthLandscape = 640; + $obj->thumbsHeightLandscape = 360; + $obj->usePreloadLowResolutionImages = false; + $obj->showImageDownloadOption = false; + $obj->doNotDisplayViews = false; + $obj->doNotDisplayLikes = false; + $obj->doNotDisplayCategoryLeftMenu = false; + $obj->doNotDisplayCategory = false; + $obj->doNotDisplayGroupsTags = false; + $obj->doNotDisplayPluginsTags = false; + $obj->showNotRatedLabel = false; + $obj->showShareMenuOpenByDefault = false; + + foreach ($global['social_medias'] as $key => $value) { + eval("\$obj->showShareButton_{$key} = true;"); + } + + $obj->askRRatingConfirmationBeforePlay_G = false; + $obj->askRRatingConfirmationBeforePlay_PG = false; + $obj->askRRatingConfirmationBeforePlay_PG13 = false; + $obj->askRRatingConfirmationBeforePlay_R = false; + $obj->askRRatingConfirmationBeforePlay_NC17 = true; + $obj->askRRatingConfirmationBeforePlay_MA = true; + $obj->filterRRating = false; + + $obj->doNotShowLeftHomeButton = false; + $obj->doNotShowLeftTrendingButton = false; + + $obj->CategoryLabel = "Categories"; + $obj->ShowAllVideosOnCategory = false; + $obj->hideCategoryVideosCount = false; + $obj->hideEditAdvancedFromVideosManager = false; + + //ver 7.1 + $obj->paidOnlyUsersTellWhatVideoIs = false; + $obj->paidOnlyShowLabels = false; + $obj->paidOnlyLabel = "Premium"; + $obj->paidOnlyFreeLabel = "Free"; + $obj->removeSubscribeButton = false; + $obj->removeThumbsUpAndDown = false; + + $o = new stdClass(); + $o->type = "textarea"; + $o->value = ""; + $obj->videoNotFoundText = $o; + $obj->siteMapRowsLimit = 100; + $obj->siteMapUTF8Fix = false; + $obj->showPrivateVideosOnSitemap = false; + $obj->enableOldPassHashCheck = true; + $obj->disableHTMLDescription = false; + $obj->disableVideoSwap = false; + $obj->makeSwapVideosOnlyForAdmin = false; + $obj->disableCopyEmbed = false; + $obj->disableDownloadVideosList = false; + $obj->videosManegerRowCount = "[10, 25, 50, -1]"; //An Array of Integer which will be shown in the dropdown box to choose the row count. Default value is [10, 25, 50, -1]. -1 means all. When passing an Integer value the dropdown box will disapear. + $obj->videosListRowCount = "[10, 20, 30, 40, 50]"; //An Array of Integer which will be shown in the dropdown box to choose the row count. Default value is [10, 25, 50, -1]. -1 means all. When passing an Integer value the dropdown box will disapear. + $obj->videosManegerBulkActionButtons = true; + + $parse = parse_url($global['webSiteRootURL']); + $domain = str_replace(".", "", $parse['host']); + $obj->twitter_site = "@{$domain}"; + $obj->twitter_player = true; + $obj->twitter_summary_large_image = false; + $obj->footerStyle = "position: fixed;bottom: 0;width: 100%;"; + $obj->disableVideoTags = false; + $obj->doNotAllowEncoderOverwriteStatus = false; + $obj->doNotAllowUpdateVideoId = false; + $obj->makeVideosIDHarderToGuess = false; + self::addDataObjectHelper('makeVideosIDHarderToGuess', 'Make the videos ID harder to guess', 'This will change the videos_id on the URL to a crypted value. this crypt user your $global[salt] (configuration.php), so make sure you keep it save in case you need to restore your site, otherwise all the shared links will be lost'); + + $o = new stdClass(); + $o->type = DateTimeZone::listIdentifiers(DateTimeZone::ALL); + $o->value = 0; + $obj->timeZone = $o; + + $obj->keywords = "AVideo, videos, live, movies"; + $obj->doNotSaveCacheOnFilesystem = false; + + $o = new stdClass(); + $o->type = "textarea"; + $o->value = "Allow: /plugin/Live/?* +Allow: /plugin/PlayLists/*.css +Allow: /plugin/PlayLists/*.js +Allow: /plugin/TopMenu/*.css +Allow: /plugin/TopMenu/*.js +Allow: /plugin/SubtitleSwitcher/*.css +Allow: /plugin/SubtitleSwitcher/*.js +Allow: /plugin/Gallery/*.css +Allow: /plugin/Gallery/*.js +Allow: /plugin/YouPHPFlix2/*.png +Allow: /plugin/Live/*.css +Allow: /plugin/Live/*.js +Allow: /plugin/*.css +Allow: /plugin/*.js +Allow: .js +Allow: .css +Disallow: /user +Disallow: /plugin +Disallow: /mvideos +Disallow: /usersGroups +Disallow: /charts +Disallow: /upload +Disallow: /comments +Disallow: /subscribes +Disallow: /update +Disallow: /locale +Disallow: /objects/* +Allow: /plugin/Live/?* +Allow: /plugin/LiveLink/?* +Allow: /plugin/PlayLists/*.css +Allow: /plugin/PlayLists/*.js +Allow: /plugin/TopMenu/*.css +Allow: /plugin/TopMenu/*.js +Allow: /plugin/SubtitleSwitcher/*.css +Allow: /plugin/SubtitleSwitcher/*.js +Allow: /plugin/Gallery/*.css +Allow: /plugin/Gallery/*.js +Allow: /plugin/YouPHPFlix2/*.png +Allow: /plugin/Live/*.css +Allow: /plugin/Live/*.js +Allow: /plugin/*.css +Allow: /plugin/*.js +Allow: .js +Allow: .css"; + $obj->robotsTXT = $o; + self::addDataObjectHelper('robotsTXT', 'robots.txt file content', 'robots.txt is a plain text file that follows the Robots Exclusion Standard. A robots.txt file consists of one or more rules. Each rule blocks (or allows) access for a given crawler to a specified file path in that website.'); + + return $obj; + } + + public function getHelp() { + if (User::isAdmin()) { + return "

CustomizeAdvanced (admin)

" . $this->getDescription() . "

"; + } + return ""; + } + + public function getModeYouTube($videos_id) { + global $global, $config; + $obj = $this->getDataObject(); + $video = Video::getVideo($videos_id, "viewable", true); + if (!empty($video['rrating']) && empty($_GET['rrating'])) { + $suffix = strtoupper(str_replace("-", "", $video['rrating'])); + eval("\$show = \$obj->askRRatingConfirmationBeforePlay_$suffix;"); + if (!empty($show)) { + include "{$global['systemRootPath']}plugin/CustomizeAdvanced/confirmRating.php"; + exit; + } + } + } + + public function getEmbed($videos_id) { + return $this->getModeYouTube($videos_id); + } + + public function getFooterCode() { + global $global; + + $obj = $this->getDataObject(); + $content = ''; + if ($obj->autoHideNavbar && !isEmbed()) { + $content .= ''; + $content .= ''; + } + if ($obj->autoHideNavbarInSeconds && !isEmbed()) { + $content .= ''; + } + return $content; + } + + public function getHTMLMenuRight() { + global $global, $config,$advancedCustom; + $obj = $this->getDataObject(); + if (!empty($obj->menuBarHTMLCode->value)) { + echo $obj->menuBarHTMLCode->value; + } + if ($obj->filterRRating) { + include $global['systemRootPath'] . 'plugin/CustomizeAdvanced/menuRight.php'; + } + if (User::canUpload() && empty($obj->doNotShowUploadButton)) { + include $global['systemRootPath'] . 'view/include/navbarUpload.php'; + } else { + include $global['systemRootPath'] . 'view/include/navbarNotUpload.php'; + } + } + + public function getHTMLMenuLeft() { + global $global; + $obj = $this->getDataObject(); + if ($obj->filterRRating) { + include $global['systemRootPath'] . 'plugin/CustomizeAdvanced/menuLeft.php'; + } + } + + public static function getVideoWhereClause() { + $sql = ""; + $obj = AVideoPlugin::getObjectData("CustomizeAdvanced"); + if ($obj->filterRRating && isset($_GET['rrating'])) { + if ($_GET['rrating'] === "0") { + $sql .= " AND v.rrating = ''"; + } else if (in_array($_GET['rrating'], Video::$rratingOptions)) { + $sql .= " AND v.rrating = '{$_GET['rrating']}'"; + } + } + return $sql; + } + + public function getVideosManagerListButton() { + $btn = ""; + if (User::isAdmin()) { + $btn = ''; + $btn .= ''; + } + return $btn; + } + + public function getHeadCode() { + global $global; + $obj = $this->getDataObject(); + + if ($obj->makeVideosIDHarderToGuess) { + if (isVideo()) { + if (!empty($global['makeVideosIDHarderToGuessNotDecrypted'])) { + unset($global['makeVideosIDHarderToGuessNotDecrypted']); + forbiddenPage(__('Invalid ID')); + } + } + } + + $baseName = basename($_SERVER['REQUEST_URI']); + + $js = ""; + if (empty($obj->autoPlayAjax)) { + $js .= ""; + } else { + $js .= ""; + } + if ($baseName === 'mvideos') { + $js .= ""; + $js .= ""; + } + return $js; + } + + public function onReceiveFile($videos_id) { + Video::updateFilesize($videos_id); + return true; + } + +} + +class SocialMedias { + + public $href; + public $class; + public $title; + public $iclass; + public $img; + public $onclick; + + function __construct($iclass, $img = '') { + $this->iclass = $iclass; + $this->img = $img; + } + + function getHref() { + return $this->href; + } + + function getClass() { + return $this->class; + } + + function getTitle() { + return $this->title; + } + + function getIclass() { + return $this->iclass; + } + + function getImg() { + return $this->img; + } + + function getOnclick() { + return $this->onclick; + } + + function setHref($href): void { + $this->href = $href; + } + + function setClass($class): void { + $this->class = $class; + } + + function setTitle($title): void { + $this->title = $title; + } + + function setIclass($iclass): void { + $this->iclass = $iclass; + } + + function setImg($img): void { + $this->img = $img; + } + + function setOnclick($onclick): void { + $this->onclick = $onclick; + } + +} + +$global['social_medias'] = array( + 'Facebook' => new SocialMedias('fab fa-facebook-square', ''), + 'Twitter' => new SocialMedias('fab fa-twitter', ''), + 'Tumblr' => new SocialMedias('fab fa-tumblr', ''), + 'Pinterest' => new SocialMedias('fab fa-pinterest-p', ''), + 'Reddit' => new SocialMedias('fab fa-reddit-alien', ''), + 'LinkedIn' => new SocialMedias('fab fa-linkedin-in', ''), + 'Wordpress' => new SocialMedias('fab fa-wordpress-simple', ''), + 'Pinboard' => new SocialMedias('fas fa-thumbtack', ''), + 'Gab' => new SocialMedias('', getURL('view/img/gab.png')), + 'CloutHub' => new SocialMedias('', getURL('view/img/cloutHub.png')), +); diff --git a/plugin/Gallery/style.css b/plugin/Gallery/style.css index 72af13bd815b..daf0ba9fb2a2 100644 --- a/plugin/Gallery/style.css +++ b/plugin/Gallery/style.css @@ -1,220 +1,224 @@ - -.gallery .duration { - position: absolute; - background: rgba(0, 0, 0, 0.6)!important; - padding: 3px; - color: #FFF; - top: 5px; - left: 25px; - font-size: 0.9em; - border-radius: 5px; -} -.gallery .title, -.videosDetails .title { - font-size: 1em; - margin: 0; - padding: 0; - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - line-height: 16px; /* fallback */ - max-height: 32px; /* fallback */ - min-height: 32px; /* fallback */ - -webkit-line-clamp: 2; /* number of lines to show */ - - -webkit-box-orient: vertical; -} -.gallery .watch-view-count { - font-size: 0.8em; - font-weight: normal; - border: 0; - margin: 0; - padding: 0; -} -.galleryVideo .group { - overflow: hidden; - text-overflow: ellipsis; -} - -.mainArea{ - padding: 15px; -} - -h3.galleryTitle{ - padding: 15px 5px; -} - -.aspectRatio16_9 { - position: relative; - display: block; - width: 100%; - height: 0; - padding-bottom: 56.25%; - overflow: hidden; -} - -.aspectRatio16_9 img{ - text-indent:-9999px; - width: 100%; - display: block; - margin-left: auto; - margin-right: auto; -} - -.thumbsGIF{ - text-indent:-9999px; - width: 100%; - margin-left: auto; - margin-right: auto; -} - -.firstRow{ - margin-bottom: 10px; - padding-bottom: 25px; - border-bottom: solid 1px #EEE; -} - -.galeryDetails{ - font-size: smaller; -} - -.galeryDetails div{ - float: left; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - padding-right: 5px; - margin: 2px 0; -} - -.firstRow .galeryDetails div{ - font-size: 1em; -} - -.galeryDetails div.userName{ - width: 100%; -} -.fixPadding{ - padding: 0 5px; -} - -.popover-content, .popover-content>div{ - white-space: normal !important; - width: auto; - color: inherit !important; -} -.popover-content>div{ - overflow-y: auto; - height: 140px; -} - -.mainAreaDescription{ - position:relative; - height:100%; - width: 110%; - padding-right: 10%; - overflow-x:hidden; - overflow-y:scroll; - max-height: 17vw; -} -.mainAreaDescriptionContainer{ - position: relative; - overflow: hidden; -} -a.h6{ - text-decoration: none !important; -} - -.popover-title { - color: black; - font-size: 1em; -} - -.popover-content{ - color: black !important; - font-size: 0.8em; -} - -.gallery .label{ - border-radius: 0; -} -.gallery .label:first-child{ - border-top-left-radius: 0.25em; - border-bottom-left-radius: 0.25em; -} -.gallery .label:last-child{ - border-top-right-radius: 0.25em; - border-bottom-right-radius: 0.25em; -} - -.galleryTitle a.btn-default:hover{ - background-color: transparent; -} - -.galeryRowElement .galleryVideo { - margin-bottom: 10px; -} - -.galleryVideoButtons{ - position: absolute; - right: 5px; - top: 5px; - z-index: 1025; - display: none; -} -.galleryVideo .galleryVideoButtons button{ - opacity: 0.5; -} -.galleryVideo:hover .galleryVideoButtons{ - display: block !important; -} -.galleryVideo .galleryVideoButtons button:hover{ - opacity: 1; -} - -.gallerySerieOverlay{ - position: absolute; - left: 0; - top: 0; - z-index: 1020; - width: 100%; - height: 100%; - background-color: rgba(0,0,0,0); - color: rgba(0,0,0,0); - -webkit-box-align:center; - -webkit-box-pack:center; - display:-webkit-box; - font-weight: bold; -} -.gallerySerieOverlay:hover{ - background-color: rgba(0,0,0,0.5); - color: #FFF; -} -.gallerySerieOverlayTotal{ - position: absolute; - right: 0; - top: 0; - width: 25%; - height: 100%; - background-color: rgba(0,0,0,0.5); - color: #FFF; - -webkit-box-align:center; - -webkit-box-pack:center; - display:-webkit-box; - font-weight: bold; -} -.galleryTags .label{ - display: table-cell; - font-size: 0.9em; -} -.galleryTags{ - margin: 0 !important; -} - -.isChannelToGallery .addChannelToGallery, .removeChannelFromGallery{ - display: none; -} - -.isChannelToGallery .removeChannelFromGallery { - display: inline-block; + +.gallery .duration { + position: absolute; + background: rgba(0, 0, 0, 0.6)!important; + padding: 3px; + color: #FFF; + top: 5px; + left: 25px; + font-size: 0.9em; + border-radius: 5px; +} +.gallery .title, +.videosDetails .title { + font-size: 1em; + margin: 0; + padding: 5px 0 0 0; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + line-height: 1em; /* fallback */ + max-height: 32px; /* fallback */ + min-height: 32px; /* fallback */ + -webkit-line-clamp: 2; /* number of lines to show */ + -webkit-box-orient: vertical; +} +.gallery .watch-view-count { + font-size: 0.8em; + font-weight: normal; + border: 0; + margin: 0; + padding: 0; +} +.galleryVideo .group { + overflow: hidden; + text-overflow: ellipsis; +} + +.mainArea{ + padding: 15px; +} + +h3.galleryTitle{ + padding: 15px 5px; +} + +.aspectRatio16_9 { + position: relative; + display: block; + width: 100%; + height: 0; + padding-bottom: 56.25%; + overflow: hidden; +} + +.aspectRatio16_9 img{ + text-indent:-9999px; + width: 100%; + display: block; + margin-left: auto; + margin-right: auto; +} + +.thumbsGIF{ + text-indent:-9999px; + width: 100%; + margin-left: auto; + margin-right: auto; +} + +.firstRow{ + margin-bottom: 10px; + padding-bottom: 25px; + border-bottom: solid 1px #EEE; +} + +.galeryDetails{ + font-size: smaller; +} + +.galeryDetails div{ + float: left; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding-right: 5px; + margin: 2px 0; +} + +.firstRow .galeryDetails div{ + font-size: 1em; +} + +.galeryDetails div.userName{ + width: 100%; +} +.fixPadding{ + padding: 0 5px; +} + +.popover-content, .popover-content>div{ + white-space: normal !important; + width: auto; + color: inherit !important; +} +.popover-content>div{ + overflow-y: auto; + height: 140px; +} + +.mainAreaDescription{ + position:relative; + height:100%; + width: 110%; + padding-right: 10%; + overflow-x:hidden; + overflow-y:scroll; + max-height: 17vw; +} +.mainAreaDescriptionContainer{ + position: relative; + overflow: hidden; +} +a.h6{ + text-decoration: none !important; +} + +.popover-title { + color: black; + font-size: 1em; +} + +.popover-content{ + color: black !important; + font-size: 0.8em; +} + +.gallery .label{ + border-radius: 0; +} +.gallery .label:first-child{ + border-top-left-radius: 0.25em; + border-bottom-left-radius: 0.25em; +} +.gallery .label:last-child{ + border-top-right-radius: 0.25em; + border-bottom-right-radius: 0.25em; +} + +.galleryTitle a.btn-default:hover{ + background-color: transparent; +} + +.galeryRowElement .galleryVideo { + margin-bottom: 10px; +} + +.galleryVideoButtons{ + position: absolute; + right: 5px; + top: 5px; + z-index: 1025; + display: none; + +} +.galleryVideo .galleryVideoButtons button{ + opacity: 0.5; + display: inline-grid; + padding: 2px; + justify-content: center; + width: 24px; +} +.galleryVideo:hover .galleryVideoButtons{ + display: block !important; +} +.galleryVideo .galleryVideoButtons button:hover{ + opacity: 1; +} + +.gallerySerieOverlay{ + position: absolute; + left: 0; + top: 0; + z-index: 1020; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0); + color: rgba(0,0,0,0); + -webkit-box-align:center; + -webkit-box-pack:center; + display:-webkit-box; + font-weight: bold; +} +.gallerySerieOverlay:hover{ + background-color: rgba(0,0,0,0.5); + color: #FFF; +} +.gallerySerieOverlayTotal{ + position: absolute; + right: 0; + top: 0; + width: 25%; + height: 100%; + background-color: rgba(0,0,0,0.5); + color: #FFF; + -webkit-box-align:center; + -webkit-box-pack:center; + display:-webkit-box; + font-weight: bold; +} +.galleryTags .label{ + display: table-cell; + font-size: 0.9em; +} +.galleryTags{ + margin: 0 !important; +} + +.isChannelToGallery .addChannelToGallery, .removeChannelFromGallery{ + display: none; +} + +.isChannelToGallery .removeChannelFromGallery { + display: inline-block; } \ No newline at end of file diff --git a/plugin/Gallery/view/BigVideo.php b/plugin/Gallery/view/BigVideo.php index a87cb9ac3e51..02cc470167b9 100644 --- a/plugin/Gallery/view/BigVideo.php +++ b/plugin/Gallery/view/BigVideo.php @@ -1,306 +1,306 @@ -BigVideo && empty($_GET['showOnly'])) { - - if (!empty($obj->useSuggestedVideosAsCarouselInBigVideo)) { - //getAllVideos($status = "viewable", $showOnlyLoggedUserVideos = false, $ignoreGroup = false, $videosArrayId = array(), $getStatistcs = false, $showUnlisted = false, $activeUsersOnly = true) - //$videoRows = Video::getAllVideosLight("viewable", !$obj->hidePrivateVideos, false, true); - $_REQUEST['rowCount'] = 20; - $_REQUEST['current'] = 1; - $videoRows = Video::getAllVideos("viewable", false, !$obj->hidePrivateVideos, array(), false, false, true, true); - } - if (empty($videoRows)) { - $videoRows = array($video); - } - $class = ''; - $classInner = ''; - if (count($videoRows) > 1) { - $class = 'carousel slide'; - $classInner = 'carousel-inner'; - } - ?> - - -
-
- 1) { - ?> - - - - -
- getName(); - $videoRow['clean_category'] = $category->getClean_name(); - $videoRow['iconClass'] = $category->getIconClass(); - $videoRow['videoCreation'] = $videoRow['created']; - $name = User::getNameIdentificationById($videoRow['users_id']); - if (empty($get)) { - $get = array(); - } - $bigVideoAd = getAdsLeaderBoardBigVideo(); - $colClass1 = "col-sm-5"; - $colClass2 = "col-sm-7"; - $colClass3 = ""; - if (!empty($bigVideoAd)) { - $colClass1 = "col-sm-4"; - $colClass2 = "col-sm-8"; - $colClass3 = "col-sm-6"; - } - $isserie = Video::isSerie($videoRow['id']); - - $isserieClass = ""; - if ($isserie) { - $isserieClass = "isserie"; - } - ?> -
"> -
-
- -
-
- - - -
-
-
- -
-
- -
-
-
- showCategoryTag)) { - ?> - " data-toggle="tooltip" title=""> - - - - - - - showTags)) { - $videoRow['tags'] = Video::getTags($videoRow['id']); - if (!empty($videoRow['tags'])) { - foreach ($videoRow['tags'] as $value2) { - if (!empty($value2->label) && $value2->label === __("Group")) { - ?>text; ?> -
- - doNotDisplayViews)) { - if (AVideoPlugin::isEnabledByName('LiveUsers')) { - echo getLiveUsersLabelVideo($videoRow['id'], $videoRow['views_count'], "", ""); - } else { - ?> -
- - - - -
- -
- - -
- - -
- -
- - -
- - - -
- - - -
- - -
- -
-
-
- -
-
-
-
-
- -
-
-
- - - BigVideo && empty($_GET['showOnly'])) { + + if (!empty($obj->useSuggestedVideosAsCarouselInBigVideo)) { + //getAllVideos($status = "viewable", $showOnlyLoggedUserVideos = false, $ignoreGroup = false, $videosArrayId = array(), $getStatistcs = false, $showUnlisted = false, $activeUsersOnly = true) + //$videoRows = Video::getAllVideosLight("viewable", !$obj->hidePrivateVideos, false, true); + $_REQUEST['rowCount'] = 20; + $_REQUEST['current'] = 1; + $videoRows = Video::getAllVideos("viewable", false, !$obj->hidePrivateVideos, array(), false, false, true, true); + } + if (empty($videoRows)) { + $videoRows = array($video); + } + $class = ''; + $classInner = ''; + if (count($videoRows) > 1) { + $class = 'carousel slide'; + $classInner = 'carousel-inner'; + } + ?> + + +
+
+ 1) { + ?> + + + + +
+ getName(); + $videoRow['clean_category'] = $category->getClean_name(); + $videoRow['iconClass'] = $category->getIconClass(); + $videoRow['videoCreation'] = $videoRow['created']; + $name = User::getNameIdentificationById($videoRow['users_id']); + if (empty($get)) { + $get = array(); + } + $bigVideoAd = getAdsLeaderBoardBigVideo(); + $colClass1 = "col-sm-5"; + $colClass2 = "col-sm-7"; + $colClass3 = ""; + if (!empty($bigVideoAd)) { + $colClass1 = "col-sm-4"; + $colClass2 = "col-sm-8"; + $colClass3 = "col-sm-6"; + } + $isserie = Video::isSerie($videoRow['id']); + + $isserieClass = ""; + if ($isserie) { + $isserieClass = "isserie"; + } + ?> +
"> +
+
+ +
+
+ + + +
+
+
+ +
+
+ +
+
+
+ showCategoryTag)) { + ?> + " data-toggle="tooltip" title=""> + + + + + + + showTags)) { + $videoRow['tags'] = Video::getTags($videoRow['id']); + if (!empty($videoRow['tags'])) { + foreach ($videoRow['tags'] as $value2) { + if (!empty($value2->label) && $value2->label === __("Group")) { + ?>text; ?> +
+ + doNotDisplayViews)) { + if (AVideoPlugin::isEnabledByName('LiveUsers')) { + echo getLiveUsersLabelVideo($videoRow['id'], $videoRow['views_count'], "", ""); + } else { + ?> +
+ + + + +
+ +
+ + +
+ + +
+ +
+ + +
+ + + +
+ + + +
+ + +
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+ + + webRTC_PushRTMP = false; self::addDataObjectHelper('webRTC_PushRTMP', 'PushRTMP', 'Self Hosted only If it is unchecked we will restream the Webcam instead of pushing it'); + $o = new stdClass(); + $o->type = "textarea"; + $o->value = "Hi {UserIdentification}, + +This is a friendly reminder that the live {liveTitle} will start in {timeToStart}. + +Click here to join our live."; + $obj->reminderText = $o; + return $obj; } @@ -1428,6 +1438,11 @@ public static function getLinkToLiveFromChannelNameAndLiveServer($channelName, $ $url = "{$global['webSiteRootURL']}live/{$live_servers_id}/" . urlencode($channelName); + $live_schedule_id = intval($live_schedule_id); + if (!empty($live_schedule_id)) { + $url = "{$url}/ls/{$live_schedule_id}"; + } + if (!empty($live_index)) { $url .= '/' . urlencode($live_index); } elseif (!isset($live_index) && !empty($_REQUEST['live_index'])) { @@ -1437,10 +1452,6 @@ public static function getLinkToLiveFromChannelNameAndLiveServer($channelName, $ if (!empty($_REQUEST['playlists_id_live'])) { $url = addQueryStringParameter($url, 'playlists_id_live', $_REQUEST['playlists_id_live']); } - $live_schedule_id = intval($live_schedule_id); - if (!empty($live_schedule_id)) { - $url = addQueryStringParameter($url, 'live_schedule', $live_schedule_id); - } //return "{$global['webSiteRootURL']}plugin/Live/?live_servers_id={$live_servers_id}&c=" . urlencode($channelName); return $url; @@ -1510,6 +1521,22 @@ public function getPluginMenu() { } return $btn; } + + public static function unfinishAllFromStats($force_recreate = false){ + $stats = self::getStats($force_recreate); + + foreach ($stats as $server) { + foreach ($server as $live) { + if(!empty($live->key)){ + $row = LiveTransmitionHistory::getLatest($live->key, @$live->live_servers_id); + if(!empty($row['finished'])){ + LiveTransmitionHistory::unfinishFromTransmitionHistoryId($row['id']); + } + } + } + } + + } public static function getStats($force_recreate = false) { global $getStatsLive, $_getStats, $getStatsObject; @@ -1587,8 +1614,8 @@ public static function getStats($force_recreate = false) { } public static function isAdaptive($key) { - if(!is_string($key)){ - _error_log('isAdaptive ERROR '._json_encode($key)); + if (!is_string($key)) { + _error_log('isAdaptive ERROR ' . _json_encode($key)); return false; } if (preg_match('/_(hi|low|mid)$/i', $key)) { @@ -1750,7 +1777,12 @@ public static function getLiveTransmitionObjectFromKey($key) { if (empty($livet)) { $getLiveTransmitionObjectFromKey[$parts[0]] = false; } else { - $lt = new LiveTransmition($livet['id']); + if (!empty($livet['live_schedule_id'])) { + $lt = new Live_schedule($livet['live_schedule_id']); + } else { + $lt = new LiveTransmition($livet['id']); + } + $getLiveTransmitionObjectFromKey[$parts[0]] = $lt; } } @@ -2704,7 +2736,7 @@ public static function on_publish($liveTransmitionHistory_id) { $lt = new LiveTransmitionHistory($liveTransmitionHistory_id); $users_id = $lt->getUsers_id(); $live_servers_id = $lt->getLive_servers_id(); - + _error_log("on_publish: liveTransmitionHistory_id={$liveTransmitionHistory_id} users_id={$users_id} live_servers_id={$live_servers_id} "); AVideoPlugin::onLiveStream($users_id, $live_servers_id); } @@ -3246,36 +3278,36 @@ public static function getMediaSessionPosters($users_id, $live_servers_id, $live } return false; } - - public static function getInfo($key, $live_servers_id = null){ - + + public static function getInfo($key, $live_servers_id = null, $live_index = '') { + $array = array( - 'key' => $key, - 'live_schedule_id' => 0, - 'users_id' => 0, - 'live_servers_id' => $live_servers_id, - 'history' => false, - 'isLive' => false, - 'isFinished' => false, - 'finishedDateTime' => __('Not finished'), - 'finishedSecondsAgo' => 0, - 'finishedHumanAgo' => __('Not finished'), - 'isStarded' => false, - 'startedDateTime' => __('Not started'), - 'startedSecondsAgo' => 0, - 'startedHumanAgo' => __('Not started'), + 'key' => $key, + 'live_schedule_id' => 0, + 'users_id' => 0, + 'live_servers_id' => $live_servers_id, + 'history' => false, + 'isLive' => false, + 'isFinished' => false, + 'finishedDateTime' => __('Not finished'), + 'finishedSecondsAgo' => 0, + 'finishedHumanAgo' => __('Not finished'), + 'isStarded' => false, + 'startedDateTime' => __('Not started'), + 'startedSecondsAgo' => 0, + 'startedHumanAgo' => __('Not started'), ); - + $lt = LiveTransmition::getFromKey($key); - if(empty($lt)){ + if (empty($lt)) { return $array; } $array['transmission'] = $lt; $array['live_schedule_id'] = $lt['live_schedule_id']; $array['users_id'] = $lt['users_id']; - + $lth = LiveTransmitionHistory::getLatest($key, $live_servers_id); - if(empty($lth)){ + if (empty($lth)) { return $array; } $array['history'] = $lth; @@ -3283,18 +3315,168 @@ public static function getInfo($key, $live_servers_id = null){ $array['isStarded'] = true; $array['startedDateTime'] = $lth['created']; $array['startedSecondsAgo'] = secondsIntervalFromNow($lth['created'], true); - $array['startedHumanAgo'] = __('Started').' '.humanTimingAgo($lth['created']); - - if(!empty($lth['finished'])){ - $array['isLive'] = false; - $array['isFinished'] = true; - $array['finishedDateTime'] = $livet['finished']; - $array['finishedSecondsAgo'] = secondsIntervalFromNow($lth['finished'], true); - $array['finishedHumanAgo'] = __('Finished').' '.humanTimingAgo($lth['finished']); + $array['startedHumanAgo'] = __('Started') . ' ' . humanTimingAgo($lth['created']); + + if (!empty($lth['finished'])) { + $isKeyLiveInStats = self::isKeyLiveInStats($key, $live_servers_id, $live_index); + if(empty($isKeyLiveInStats)){ + $array['isLive'] = false; + $array['isFinished'] = true; + $array['finishedDateTime'] = $lth['finished']; + $array['finishedSecondsAgo'] = secondsIntervalFromNow($lth['finished'], true); + $array['finishedHumanAgo'] = __('Finished') . ' ' . humanTimingAgo($lth['finished']); + }else{ + LiveTransmitionHistory::unfinishFromTransmitionHistoryId($lth['id']); + } } + + $array['displayTime'] = ''; + if ($array['isFinished']) { + $array['displayTime'] = $array['finishedHumanAgo']; + if(!empty($lt['scheduled_time'])){ + $time = getTimeInTimezone($lt['scheduled_time'], $lt['timezone']); + $displayTime = strtotime($array['finishedDateTime']); + + //var_dump($time, $displayTime, $lt['scheduled_time'], $lt['timezone'], $array['finishedDateTime']);exit; + if($time > $displayTime){ + $array['displayTime'] = __('Will start in') . ' ' . humanTiming($time). ", {$lt['scheduled_time']}, {$lt['timezone']}"; + } + } + } else if ($array['isStarded']) { + $array['displayTime'] = $array['startedHumanAgo']; + } + return $array; } + public static function setLiveScheduleReminder($live_schedule_id, $minutesEarlier = 0, $deleteIfExists = false) { + + $obj = new stdClass(); + $obj->error = true; + $obj->msg = ''; + $obj->deleted = false; + $obj->scheduler_commands_id = 0; + $obj->deleted_id = 0; + + if (!User::isLogged()) { + $obj->msg = __('Must be logged'); + return $obj; + } + + if (!AVideoPlugin::isEnabledByName('Scheduler')) { + $obj->msg = 'Scheduler is disabled'; + return $obj; + } + + if (empty($live_schedule_id)) { + $obj->msg = 'live_schedule_id cannot be empty'; + return $obj; + } + + $ls = new Live_schedule($live_schedule_id); + $to_users_id = User::getId(); + $users_id = Live_schedule::getUsers_idOrCompany($live_schedule_id); + + if (empty($users_id)) { + $obj->msg = 'users_id cannot be empty'; + return $obj; + } + + $date_to_execute = strtotime($ls->getScheduled_time() . " -{$minutesEarlier} minutes"); + + $reminders = self::getLiveScheduleReminders($live_schedule_id); + foreach ($reminders as $value) { + if (strtotime($value['date_to_execute']) === $date_to_execute) { + if ($deleteIfExists) { + $e = new Scheduler_commands($value['id']); + $obj->deleted_id = $value['id']; + $obj->deleted = $e->delete(); + $obj->error = empty($obj->deleted); + } else { + $obj->msg = __('Reminder already set'); + } + return $obj; + } + } + + + $objLive = AVideoPlugin::getDataObject('Live'); + $emailEmailBody = __($objLive->reminderText->value, true); + $UserIdentification = User::getNameIdentification(); + $liveTitle = Live::getTitleFromUsers_Id($users_id); + $link = Live::getLinkToLiveFromUsers_id($users_id); + $timeToStart = humanTiming($ls->getScheduled_time()); + $emailEmailBody = str_replace(array('{UserIdentification}', '{liveTitle}', '{link}', '{timeToStart}'), array($UserIdentification, $liveTitle, $link, $timeToStart), $emailEmailBody); + + $emailTo = $to_users_id; + $emailSubject = $ls->getTitle() . ' - ' . __('Live reminder'); + $emailFrom = $users_id; + $emailFromName = User::getNameIdentificationById($users_id); + + $type = self::getLiveScheduleReminderBaseNameType($live_schedule_id, $minutesEarlier); + $type = "{$type}_{$users_id}"; + + $obj->scheduler_commands_id = Scheduler::addSendEmail($date_to_execute, $emailTo, $emailSubject, $emailEmailBody, $emailFrom, $emailFromName, $type); + + $obj->error = empty($obj->scheduler_commands_id); + + return $obj; + } + + public static function getLiveScheduleReminders($live_schedule_id) { + $type = self::getLiveScheduleReminderBaseNameType($live_schedule_id); + return Scheduler_commands::getAllActiveOrToRepeat($type); + } + + public static function getLiveScheduleReminderBaseNameType($live_schedule_id, $minutesEarlier = '') { + $to_users_id = User::getId(); + $type = "LiveScheduleReminder_{$to_users_id}_{$live_schedule_id}"; + if (!empty($minutesEarlier)) { + $type .= "_{$minutesEarlier}"; + } + return $type; + } + + static public function getScheduleReminderOptions($live_schedule_id) { + global $global; + $destinationURL = "{$global['webSiteRootURL']}plugin/Live/remindMe.json.php"; + $destinationURL = addQueryStringParameter($destinationURL, 'live_schedule_id', $live_schedule_id); + $destinationURL = addQueryStringParameter($destinationURL, 'deleteIfExists', 1); + $selectedEarlierOptions = array(); + + $schedules = self::getLiveScheduleReminders($live_schedule_id); + $type = self::getLiveScheduleReminderBaseNameType($live_schedule_id); + //var_dump($type); + foreach ($schedules as $value) { + $parts = explode('_', $value["type"]); + //var_dump($parts); + $selectedEarlierOptions[] = intval($parts[3]); + } + + $ls = new Live_schedule($_REQUEST['live_schedule_id']); + + $ls = new Live_schedule($live_schedule_id); + $users_id = Live_schedule::getUsers_idOrCompany($live_schedule_id); + $title = $ls->getTitle(); + $date_start = $ls->getScheduled_time(); + $date_end = ''; + $joinURL = Live::getLinkToLiveFromUsers_id($users_id); + $joinURL = addQueryStringParameter($joinURL, 'live_schedule', $live_schedule_id); + + // , $date_start, $selectedEarlierOptions = array(), $date_end = '', $joinURL='', $description='' + + return Scheduler::getReminderOptions($destinationURL, $title, $date_start, $selectedEarlierOptions, $date_end, $joinURL); + + } + + public function getWatchActionButton($videos_id): string { + $isLive = isLive(); + if (!empty($isLive['live_schedule'])) { + return ''; + } + return ''; + } + } class LiveImageType { @@ -3475,4 +3657,5 @@ public function getRTMPLinkWithOutKey($short = true) { $lt = LiveTransmition::getFromKey($this->key); return Live::getServerURL($this->key, $lt['users_id'], $short); } + } diff --git a/plugin/Live/Objects/LiveTransmitionHistory.php b/plugin/Live/Objects/LiveTransmitionHistory.php index b01167f1fdbd..141596798988 100644 --- a/plugin/Live/Objects/LiveTransmitionHistory.php +++ b/plugin/Live/Objects/LiveTransmitionHistory.php @@ -399,12 +399,25 @@ public static function finishFromTransmitionHistoryId($live_transmitions_history global $global; $live_transmitions_history_id = intval($live_transmitions_history_id); if (empty($live_transmitions_history_id)) { - _error_log('LiveTransmitionHistory::finishALLOffline ERROR empty live_transmitions_history_id '); return false; } - _error_log('LiveTransmitionHistory::finishALLOffline finishing $live_transmitions_history_id '. json_encode(debug_backtrace())); $sql = "UPDATE " . static::getTableName() . " SET finished = now() WHERE id = {$live_transmitions_history_id} "; + $insert_row = sqlDAL::writeSql($sql); + $global['mysqli']->commit(); + + Live::unfinishAllFromStats(); + return $insert_row; + } + + public static function unfinishFromTransmitionHistoryId($live_transmitions_history_id) { + global $global; + $live_transmitions_history_id = intval($live_transmitions_history_id); + if (empty($live_transmitions_history_id)) { + return false; + } + $sql = "UPDATE " . static::getTableName() . " SET finished = NULL WHERE id = {$live_transmitions_history_id} "; + $insert_row = sqlDAL::writeSql($sql); $global['mysqli']->commit(); return $insert_row; diff --git a/plugin/Live/Objects/Live_schedule.php b/plugin/Live/Objects/Live_schedule.php index c813698afade..d3cdf825f7b0 100644 --- a/plugin/Live/Objects/Live_schedule.php +++ b/plugin/Live/Objects/Live_schedule.php @@ -433,7 +433,11 @@ public static function keyExists($key) function getScheduled_password() { return $this->scheduled_password; } - + + function getPassword() { + return $this->getScheduled_password(); + } + function setScheduled_password($scheduled_password): void { $this->scheduled_password = $scheduled_password; } diff --git a/plugin/Live/remindMe.json.php b/plugin/Live/remindMe.json.php new file mode 100644 index 000000000000..24ef90584df7 --- /dev/null +++ b/plugin/Live/remindMe.json.php @@ -0,0 +1,38 @@ +minutesEarlier = $_REQUEST['minutesEarlier']; +$obj->live_schedule_id = $_REQUEST['live_schedule_id']; +$obj->msg = ''; +$obj->isActive = false; + +if ($reminder->error) { + forbiddenPage($reminder->msg); +} else { + if ($reminder->deleted) { + $obj->msg = __('Reminder deleted'); + $obj->warning = 1; + }else{ + $obj->msg = __('Reminder added'); + $obj->isActive = true; + } +} + +$obj->response = $reminder; +$obj->error = false; + +die(_json_encode($obj)); diff --git a/plugin/Live/remindMe.php b/plugin/Live/remindMe.php new file mode 100644 index 000000000000..5c07e044fd84 --- /dev/null +++ b/plugin/Live/remindMe.php @@ -0,0 +1,68 @@ +getKey(), $ls->getLive_servers_id()); +?> + + + + Remind me + + + + +
+
+
+
+ +
+

+ +

+

+ getTitle(); + ?> +

+
+
+ +
+ +
+
+ + + diff --git a/plugin/Live/view/modeYoutubeLive.php b/plugin/Live/view/modeYoutubeLive.php index 14bbf8876291..90cb686e98b0 100644 --- a/plugin/Live/view/modeYoutubeLive.php +++ b/plugin/Live/view/modeYoutubeLive.php @@ -24,9 +24,9 @@ setLiveKey($livet['key'], Live::getLiveServersIdRequest(), @$_REQUEST['live_index']); Live::checkIfPasswordIsGood($livet['key']); -if(empty($livet['live_schedule'])){ +if (empty($livet['live_schedule'])) { $lt = new LiveTransmition($livet['id']); -}else{ +} else { $lt = new Live_schedule($livet['id']); } @@ -67,8 +67,8 @@ $img = addQueryStringParameter($img, 'live_schedule', intval($_REQUEST['live_schedule'])); global $getLiveKey; $getLiveKey = ['key' => $ls->getKey(), 'live_servers_id' => intval($ls->getLive_servers_id()), 'live_index' => '', 'cleanKey' => '']; - - if(!empty($ls->getUsers_id_company())){ + + if (!empty($ls->getUsers_id_company())) { $user_id = $ls->getUsers_id_company(); //var_dump($user_id);exit; $u = new User($user_id); @@ -97,7 +97,7 @@ $modeYoutubeBottomClass1 = "col-sm-12 col-md-12 col-lg-10"; $modeYoutubeBottomClass2 = "hidden "; } - +// to fix the unfinished lives $liveInfo = Live::getInfo($livet['key'], $livet['live_servers_id']); ?> @@ -127,6 +127,7 @@ +
- +
@@ -163,8 +163,7 @@
- +
@@ -191,17 +190,12 @@ ?> + + + -
- -

@@ -236,7 +230,6 @@ } ?>
-
diff --git a/plugin/LiveLinks/view/Live.php b/plugin/LiveLinks/view/Live.php index ae1495c6a029..cf44a67b1dbb 100644 --- a/plugin/LiveLinks/view/Live.php +++ b/plugin/LiveLinks/view/Live.php @@ -1,222 +1,246 @@ -getId(); - if ($liveLink->getType() == 'logged_only' && !User::isLogged()) { - die('Link for logged only'); - } - - $uuid = $_GET['link']; - $t['id'] = $uuid; - $t['users_id'] = $liveLink->getUsers_id(); - $t['title'] = $liveLink->getTitle(); - $t['link'] = $liveLink->getLink(); - $t['description'] = $liveLink->getDescription(); - - AVideoPlugin::getModeLiveLink($liveLink->getId()); - $toTime = strtotime($liveLink->getStart_date()); -} else { - $isLiveLink = uniqid(); - $uuid = $isLiveLink; - $t = LiveLinks::decodeDinamicVideoLink(); - $toTime = time(); -} - -if (empty($t['users_id'])) { - die('Link not found'); -} - -if ($toTime > time()) { - $message = "{$t['title']}
{$t['description']}"; - $image = User::getPhoto($t['users_id']); - $bgImage = LiveLinks::getImage($t['id']); - $title = $t['title']; - countDownPage($toTime, $message, $image, $bgImage, $title); -} - -$u = new User($t['users_id']); -$user_id = $u->getBdId(); -$subscribe = Subscribe::getButton($user_id); -$name = $u->getNameIdentificationBd(); -$name = "{$name} " . User::getEmailVerifiedIcon($user_id) . ""; - -$video = array(); -$video['creator'] = '
User Photo
' . $name . '
' . $subscribe . '
'; -$video['type'] = "liveLink"; -$video['title'] = $t['title']; -$video['description'] = $t['description']; -$video['users_id'] = $t['users_id']; -$poster = $img = LiveLinks::getImage($t['id']); -$imgw = 400; -$imgh = 255; - -if(isAVideoMobileApp()){ - $_GET['embed'] = 1; -} - -if (!empty($_GET['embed'])) { - $video['videoLink'] = LiveLinks::getSourceLink($t['id']); - include $global['systemRootPath'] . 'view/videoEmbeded.php'; - return false; -} - -$isCompressed = AVideoPlugin::loadPluginIfEnabled('TheaterButton') && TheaterButton::isCompressed(); - -$sideAd = getAdsSideRectangle(); - -$modeYoutubeBottomClass1 = "col-sm-7 col-md-7 col-lg-6"; -$modeYoutubeBottomClass2 = "col-sm-5 col-md-5 col-lg-4 "; - -if (isHTMLEmpty($sideAd)) { - $modeYoutubeBottomClass1 = "col-sm-12 col-md-12 col-lg-10"; - $modeYoutubeBottomClass2 = "hidden "; -} -?> - - - - <?php echo $t['title'] . $config->getPageTitleSeparator() . __("Live Links") . $config->getPageTitleSeparator() . $config->getWebSiteTitle(); ?> - - - - - - - - - - getWebSiteTitle(); ?>" /> - " /> - - - - - - - -
- -
- -
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
- -
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-

- -

-

-
- -
- - -
-
-
-
-
-
-
- -
-
-
-
- -
- - - - getChat($uuid); - } - ?> - - - - - - - - - +getId(); + if ($liveLink->getType() == 'logged_only' && !User::isLogged()) { + die('Link for logged only'); + } + + $uuid = $_GET['link']; + $t['id'] = $uuid; + $t['users_id'] = $liveLink->getUsers_id(); + $t['title'] = $liveLink->getTitle(); + $t['link'] = $liveLink->getLink(); + $t['description'] = $liveLink->getDescription(); + + AVideoPlugin::getModeLiveLink($liveLink->getId()); + $toTime = strtotime($liveLink->getStart_date()); +} else { + $isLiveLink = uniqid(); + $uuid = $isLiveLink; + $t = LiveLinks::decodeDinamicVideoLink(); + $toTime = time(); +} + +if (empty($t['users_id'])) { + die('Link not found'); +} + +if ($toTime > time()) { + $message = "{$t['title']}
{$t['description']}"; + $image = User::getPhoto($t['users_id']); + $bgImage = LiveLinks::getImage($t['id']); + $title = $t['title']; + countDownPage($toTime, $message, $image, $bgImage, $title); +} + +$u = new User($t['users_id']); +$user_id = $u->getBdId(); +$subscribe = Subscribe::getButton($user_id); +$name = $u->getNameIdentificationBd(); +$name = "{$name} " . User::getEmailVerifiedIcon($user_id) . ""; + +$video = array(); +$video['creator'] = '
User Photo
' . $name . '
' . $subscribe . '
'; +$video['type'] = "liveLink"; +$video['title'] = $t['title']; +$video['description'] = $t['description']; +$video['users_id'] = $t['users_id']; +$poster = $img = LiveLinks::getImage($t['id']); +$imgw = 400; +$imgh = 255; + +if(isAVideoMobileApp()){ + $_GET['embed'] = 1; +} + +if (!empty($_GET['embed'])) { + $video['videoLink'] = LiveLinks::getSourceLink($t['id']); + include $global['systemRootPath'] . 'view/videoEmbeded.php'; + return false; +} + +$isCompressed = AVideoPlugin::loadPluginIfEnabled('TheaterButton') && TheaterButton::isCompressed(); + +$sideAd = getAdsSideRectangle(); + +$modeYoutubeBottomClass1 = "col-sm-7 col-md-7 col-lg-6"; +$modeYoutubeBottomClass2 = "col-sm-5 col-md-5 col-lg-4 "; + +if (isHTMLEmpty($sideAd)) { + $modeYoutubeBottomClass1 = "col-sm-12 col-md-12 col-lg-10"; + $modeYoutubeBottomClass2 = "hidden "; +} +?> + + + + <?php echo $t['title'] . $config->getPageTitleSeparator() . __("Live Links") . $config->getPageTitleSeparator() . $config->getWebSiteTitle(); ?> + + + + + + + + + - getWebSiteTitle(); ?>" /> + " /> + + + + + + + + +
+ +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+

+ +

+
+

+ +
+
+ disableShareAndPlaylist) && empty($advancedCustom->disableShareOnly)) { ?> + + + + + + +
+
+ disableShareAndPlaylist) && empty($advancedCustom->disableShareOnly)) { + $link = LiveLinks::getLinkToLiveFromId($_GET['link']); + $linkEmbed = LiveLinks::getLinkToLiveFromId($_GET['link'], true); + getShareMenu($t['title'], $link, $link, $linkEmbed, $img, "row"); + } + ?> +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + + getChat($uuid); + } + ?> + + + + + + + + + diff --git a/plugin/Scheduler/Objects/Scheduler_commands.php b/plugin/Scheduler/Objects/Scheduler_commands.php index e49db95fb1bc..52c6ea81a52d 100644 --- a/plugin/Scheduler/Objects/Scheduler_commands.php +++ b/plugin/Scheduler/Objects/Scheduler_commands.php @@ -1,313 +1,324 @@ -$minute, - 'hour'=>$hour, - 'day_of_month'=>$day_of_month, - 'month'=>$month, - 'day_of_week'=>$day_of_week, - ); - } - - public static function getAllScheduledTORepeat() { - global $global; - if (!static::isTableInstalled()) { - return false; - } - $sql = "SELECT * FROM " . static::getTableName() . " WHERE status='" . self::$statusRepeat . "' "; - - $times = self::getTimesNow(); - - $sql .= " AND (repeat_minute IS NULL OR repeat_minute = {$times['minute']}) "; - $sql .= " AND (repeat_hour IS NULL OR repeat_hour = {$times['hour']}) "; - $sql .= " AND (repeat_day_of_month IS NULL OR repeat_day_of_month = {$times['day_of_month']}) "; - $sql .= " AND (repeat_month IS NULL OR repeat_month = {$times['month']}) "; - $sql .= " AND (repeat_day_of_week IS NULL OR repeat_day_of_week = {$times['day_of_week']}) "; - - //echo $sql;exit; - $res = sqlDAL::readSql($sql); - $fullData = sqlDAL::fetchAllAssoc($res); - sqlDAL::close($res); - $rows = array(); - if ($res != false) { - foreach ($fullData as $row) { - $rows[] = $row; - } - } else { - die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); - } - return $rows; - } - - public static function getAllActiveAndReady() { - global $global; - if (!static::isTableInstalled()) { - return false; - } - $sql = "SELECT * FROM " . static::getTableName() . " WHERE status='" . self::$statusActive . "' AND date_to_execute <= now() "; - - //echo $sql; - $res = sqlDAL::readSql($sql); - $fullData = sqlDAL::fetchAllAssoc($res); - sqlDAL::close($res); - $rows = array(); - if ($res != false) { - foreach ($fullData as $row) { - $rows[] = $row; - } - } else { - die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); - } - return $rows; - } - - function setId($id) { - $this->id = intval($id); - } - - function setCallbackURL($callbackURL) { - $this->callbackURL = $callbackURL; - } - - function setParameters($parameters) { - $this->parameters = $parameters; - } - - function setDate_to_execute($date_to_execute) { - if (is_numeric($date_to_execute)) { - $date_to_execute = date('Y-m-d H:i:s', $date_to_execute); - } - $this->date_to_execute = $date_to_execute; - } - - function setExecuted_in($executed_in) { - $this->executed_in = $executed_in; - } - - function setStatus($status) { - $this->status = $status; - } - - function getId() { - return intval($this->id); - } - - function getCallbackURL() { - return $this->callbackURL; - } - - function getParameters() { - return $this->parameters; - } - - function getDate_to_execute() { - return $this->date_to_execute; - } - - function getExecuted_in() { - return $this->executed_in; - } - - function getStatus() { - return $this->status; - } - - function getCallbackResponse() { - return $this->callbackResponse; - } - - function setCallbackResponse($callbackResponse) { - $this->callbackResponse = $callbackResponse; - } - - function setExecuted($callbackResponse) { - if (!is_string($callbackResponse)) { - $callbackResponse = json_encode($callbackResponse); - } - $this->setExecuted_in(date('Y-m-d H:i:s')); - $this->setCallbackResponse($callbackResponse); - - if ($this->status !== self::$statusRepeat) { - $this->setStatus(self::$statusExecuted); - } - return $this->save(); - } - - function getTimezone() { - return $this->timezone; - } - - private function _setTimezone($timezone) { - $this->timezone = $timezone; - } - - public function save() { - if (empty($this->date_to_execute)) { - $this->date_to_execute = 'NULL'; - } - if (empty($this->executed_in)) { - $this->executed_in = 'NULL'; - } - if (empty($this->type)) { - $this->type = 'NULL'; - } - if (!isset($this->repeat_minute)) { - $this->repeat_minute = 'NULL'; - } - if (!isset($this->repeat_hour)) { - $this->repeat_hour = 'NULL'; - } - if (!isset($this->repeat_day_of_month)) { - $this->repeat_day_of_month = 'NULL'; - } - if (!isset($this->repeat_month)) { - $this->repeat_month = 'NULL'; - } - if (!isset($this->repeat_day_of_week)) { - $this->repeat_day_of_week = 'NULL'; - } - if (empty($this->status)) { - $this->status = self::$statusActive; - } - if (empty($this->callbackURL)) { - $this->callbackURL = ''; - } - - $this->_setTimeZone(date_default_timezone_get()); - - return parent::save(); - } - - function getRepeat_minute() { - return $this->repeat_minute; - } - - function getRepeat_hour() { - return $this->repeat_hour; - } - - function getRepeat_day_of_month() { - return $this->repeat_day_of_month; - } - - function getRepeat_month() { - return $this->repeat_month; - } - - function setRepeat_minute($repeat_minute) { - $this->repeat_minute = intval($repeat_minute); - } - - function setRepeat_hour($repeat_hour) { - $this->repeat_hour = intval($repeat_hour); - } - - function setRepeat_day_of_month($repeat_day_of_month) { - $this->repeat_day_of_month = intval($repeat_day_of_month); - } - - function setRepeat_month($repeat_month) { - $this->repeat_month = intval($repeat_month); - } - - function getType() { - return $this->type; - } - - function setType($type) { - $this->type = $type; - } - - function getRepeat_day_of_week() { - return $this->repeat_day_of_week; - } - - function setRepeat_day_of_week($repeat_day_of_week) { - $this->repeat_day_of_week = $repeat_day_of_week; - } - - public static function deleteFromType($type) { - global $global; - if (!empty($type)) { - $sql = "DELETE FROM " . static::getTableName() . " "; - $sql .= " WHERE type = ?"; - $global['lastQuery'] = $sql; - return sqlDAL::writeSql($sql, "s", array($type)); - } - return false; - } - - public static function getAllFromType($type) { - global $global; - if (!static::isTableInstalled()) { - return false; - } - $sql = "SELECT * FROM " . static::getTableName() . " WHERE type=? "; - - //echo $sql; - $res = sqlDAL::readSql($sql, 's', array($type)); - $fullData = sqlDAL::fetchAllAssoc($res); - sqlDAL::close($res); - $rows = array(); - if ($res != false) { - foreach ($fullData as $row) { - $rows[] = $row; - } - } else { - die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); - } - return $rows; - } - - public static function getAllActiveOrToRepeat() { - global $global; - if (!static::isTableInstalled()) { - return false; - } - $sql = "SELECT * FROM " . static::getTableName() . " WHERE status='" . (self::$statusActive) . "' OR status='" . (self::$statusRepeat) . "' "; - - $sql .= self::getSqlFromPost(); - $res = sqlDAL::readSql($sql); - $fullData = sqlDAL::fetchAllAssoc($res); - sqlDAL::close($res); - $rows = array(); - if ($res != false) { - foreach ($fullData as $row) { - $rows[] = $row; - } - } else { - die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); - } - return $rows; - } - -} +$minute, + 'hour'=>$hour, + 'day_of_month'=>$day_of_month, + 'month'=>$month, + 'day_of_week'=>$day_of_week, + ); + } + + public static function getAllScheduledTORepeat() { + global $global; + if (!static::isTableInstalled()) { + return false; + } + $sql = "SELECT * FROM " . static::getTableName() . " WHERE status='" . self::$statusRepeat . "' "; + + $times = self::getTimesNow(); + + $sql .= " AND (repeat_minute IS NULL OR repeat_minute = {$times['minute']}) "; + $sql .= " AND (repeat_hour IS NULL OR repeat_hour = {$times['hour']}) "; + $sql .= " AND (repeat_day_of_month IS NULL OR repeat_day_of_month = {$times['day_of_month']}) "; + $sql .= " AND (repeat_month IS NULL OR repeat_month = {$times['month']}) "; + $sql .= " AND (repeat_day_of_week IS NULL OR repeat_day_of_week = {$times['day_of_week']}) "; + + //echo $sql;exit; + $res = sqlDAL::readSql($sql); + $fullData = sqlDAL::fetchAllAssoc($res); + sqlDAL::close($res); + $rows = array(); + if ($res != false) { + foreach ($fullData as $row) { + $rows[] = $row; + } + } else { + die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); + } + return $rows; + } + + public static function getAllActiveAndReady() { + global $global; + if (!static::isTableInstalled()) { + return false; + } + $sql = "SELECT * FROM " . static::getTableName() . " WHERE status='" . self::$statusActive . "' AND date_to_execute <= now() "; + + //echo $sql; + $res = sqlDAL::readSql($sql); + $fullData = sqlDAL::fetchAllAssoc($res); + sqlDAL::close($res); + $rows = array(); + if ($res != false) { + foreach ($fullData as $row) { + $rows[] = $row; + } + } else { + die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); + } + return $rows; + } + + function setId($id) { + $this->id = intval($id); + } + + function setCallbackURL($callbackURL) { + $this->callbackURL = $callbackURL; + } + + function setParameters($parameters) { + global $global; + if(!is_string($parameters)){ + $parameters = _json_encode($parameters); + $parameters = $global['mysqli']->real_escape_string($parameters); + } + + $this->parameters = $parameters; + } + + function setDate_to_execute($date_to_execute) { + if (is_numeric($date_to_execute)) { + $date_to_execute = date('Y-m-d H:i:s', $date_to_execute); + } + $this->date_to_execute = $date_to_execute; + } + + function setExecuted_in($executed_in) { + $this->executed_in = $executed_in; + } + + function setStatus($status) { + $this->status = $status; + } + + function getId() { + return intval($this->id); + } + + function getCallbackURL() { + return $this->callbackURL; + } + + function getParameters() { + return $this->parameters; + } + + function getDate_to_execute() { + return $this->date_to_execute; + } + + function getExecuted_in() { + return $this->executed_in; + } + + function getStatus() { + return $this->status; + } + + function getCallbackResponse() { + return $this->callbackResponse; + } + + function setCallbackResponse($callbackResponse) { + $this->callbackResponse = $callbackResponse; + } + + function setExecuted($callbackResponse) { + if (!is_string($callbackResponse)) { + $callbackResponse = json_encode($callbackResponse); + $callbackResponse = $global['mysqli']->real_escape_string($callbackResponse); + } + $this->setExecuted_in(date('Y-m-d H:i:s')); + $this->setCallbackResponse($callbackResponse); + + if ($this->status !== self::$statusRepeat) { + $this->setStatus(self::$statusExecuted); + } + return $this->save(); + } + + function getTimezone() { + return $this->timezone; + } + + private function _setTimezone($timezone) { + $this->timezone = $timezone; + } + + public function save() { + if (empty($this->date_to_execute)) { + $this->date_to_execute = 'NULL'; + } + if (empty($this->executed_in)) { + $this->executed_in = 'NULL'; + } + if (empty($this->type)) { + $this->type = 'NULL'; + } + if (!isset($this->repeat_minute)) { + $this->repeat_minute = 'NULL'; + } + if (!isset($this->repeat_hour)) { + $this->repeat_hour = 'NULL'; + } + if (!isset($this->repeat_day_of_month)) { + $this->repeat_day_of_month = 'NULL'; + } + if (!isset($this->repeat_month)) { + $this->repeat_month = 'NULL'; + } + if (!isset($this->repeat_day_of_week)) { + $this->repeat_day_of_week = 'NULL'; + } + if (empty($this->status)) { + $this->status = self::$statusActive; + } + if (empty($this->callbackURL)) { + $this->callbackURL = ''; + } + + $this->_setTimeZone(date_default_timezone_get()); + + return parent::save(); + } + + function getRepeat_minute() { + return $this->repeat_minute; + } + + function getRepeat_hour() { + return $this->repeat_hour; + } + + function getRepeat_day_of_month() { + return $this->repeat_day_of_month; + } + + function getRepeat_month() { + return $this->repeat_month; + } + + function setRepeat_minute($repeat_minute) { + $this->repeat_minute = intval($repeat_minute); + } + + function setRepeat_hour($repeat_hour) { + $this->repeat_hour = intval($repeat_hour); + } + + function setRepeat_day_of_month($repeat_day_of_month) { + $this->repeat_day_of_month = intval($repeat_day_of_month); + } + + function setRepeat_month($repeat_month) { + $this->repeat_month = intval($repeat_month); + } + + function getType() { + return $this->type; + } + + function setType($type) { + $this->type = $type; + } + + function getRepeat_day_of_week() { + return $this->repeat_day_of_week; + } + + function setRepeat_day_of_week($repeat_day_of_week) { + $this->repeat_day_of_week = $repeat_day_of_week; + } + + public static function deleteFromType($type) { + global $global; + if (!empty($type)) { + $sql = "DELETE FROM " . static::getTableName() . " "; + $sql .= " WHERE type = ?"; + $global['lastQuery'] = $sql; + return sqlDAL::writeSql($sql, "s", array($type)); + } + return false; + } + + public static function getAllFromType($type) { + global $global; + if (!static::isTableInstalled()) { + return false; + } + $sql = "SELECT * FROM " . static::getTableName() . " WHERE type=? "; + + //echo $sql; + $res = sqlDAL::readSql($sql, 's', array($type)); + $fullData = sqlDAL::fetchAllAssoc($res); + sqlDAL::close($res); + $rows = array(); + if ($res != false) { + foreach ($fullData as $row) { + $rows[] = $row; + } + } else { + die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); + } + return $rows; + } + + public static function getAllActiveOrToRepeat($type='') { + global $global; + if (!static::isTableInstalled()) { + return false; + } + $sql = "SELECT * FROM " . static::getTableName() . " WHERE (status='" . (self::$statusActive) . "' OR status='" . (self::$statusRepeat) . "') "; + + if(!empty($type)){ + $sql .= ' AND `type` LIKE "'.$type.'%" '; + } + + $sql .= self::getSqlFromPost(); + $res = sqlDAL::readSql($sql); + $fullData = sqlDAL::fetchAllAssoc($res); + sqlDAL::close($res); + $rows = array(); + if ($res != false) { + foreach ($fullData as $row) { + $rows[] = $row; + } + } else { + die($sql . '\nError : (' . $global['mysqli']->errno . ') ' . $global['mysqli']->error); + } + return $rows; + } + +} diff --git a/plugin/Scheduler/Scheduler.php b/plugin/Scheduler/Scheduler.php index fc0b10bbc36f..b81a3e17009a 100644 --- a/plugin/Scheduler/Scheduler.php +++ b/plugin/Scheduler/Scheduler.php @@ -1,113 +1,245 @@ -Crontab every 1 minute
* * * * * php {$global['systemRootPath']}plugin/Scheduler/run.php"; - //$desc .= $this->isReadyLabel(array('YPTWallet')); - return $desc; - } - - public function getName() { - return "Scheduler"; - } - - public function getUUID() { - return "Scheduler-5ee8405eaaa16"; - } - - public function getPluginVersion() { - return "3.0"; - } - - public function updateScript() { - global $global; - if (AVideoPlugin::compareVersion($this->getName(), "2.0") < 0) { - $sqls = file_get_contents($global['systemRootPath'] . 'plugin/Scheduler/install/updateV2.0.sql'); - $sqlParts = explode(";", $sqls); - foreach ($sqlParts as $value) { - sqlDal::writeSql(trim($value)); - } - } - if (AVideoPlugin::compareVersion($this->getName(), "3.0") < 0) { - $sqls = file_get_contents($global['systemRootPath'] . 'plugin/Scheduler/install/updateV3.0.sql'); - $sqlParts = explode(";", $sqls); - foreach ($sqlParts as $value) { - sqlDal::writeSql(trim($value)); - } - } - return true; - } - public function getEmptyDataObject() { - $obj = new stdClass(); - /* - $obj->textSample = "text"; - $obj->checkboxSample = true; - $obj->numberSample = 5; - - $o = new stdClass(); - $o->type = array(0=>__("Default"))+array(1,2,3); - $o->value = 0; - $obj->selectBoxSample = $o; - - $o = new stdClass(); - $o->type = "textarea"; - $o->value = ""; - $obj->textareaSample = $o; - */ - return $obj; - } - - - public function getPluginMenu() { - global $global; - $btn = ''; - $btn .= ''; - return $btn; - } - - static public function run($scheduler_commands_id){ - global $_executeSchelude; - if(!isset($_executeSchelude)){ - $_executeSchelude = array(); - } - $e = new Scheduler_commands($scheduler_commands_id); - $callBackURL = $e->getCallbackURL(); - if(!isValidURL($callBackURL)){ - return false; - } - if(empty($_executeSchelude[$callBackURL])){ - $callBackURL = addQueryStringParameter($callBackURL, 'token', getToken(60)); - _error_log("Scheduler::run getting callback URL {$callBackURL}"); - $_executeSchelude[$callBackURL] = url_get_contents($callBackURL); - _error_log("Scheduler::run got callback ". json_encode($_executeSchelude[$callBackURL])); - } - if(!empty($_executeSchelude[$callBackURL])){ - return $e->setExecuted($_executeSchelude[$callBackURL]); - } - return false; - } - - - static public function add($date_to_execute, $callbackURL){ - _error_log("Scheduler::add [$date_to_execute] [$callbackURL]"); - if(empty($date_to_execute)){ - _error_log("Scheduler::add ERROR date_to_execute is empty"); - return false; - } - if(empty($callbackURL)){ - _error_log("Scheduler::add ERROR callbackURL is empty"); - return false; - } - $e = new Scheduler_commands(0); - $e->setDate_to_execute($date_to_execute); - $e->setCallbackURL($callbackURL); - return $e->save(); - } -} +"; + $desc .= "To use the Scheduler Plugin, you MUST add it on your crontab"; + $desc .= "
"; + $desc .= "
Open a terminal and type crontab -e than add a crontab for every 1 minute
* * * * * php {$global['systemRootPath']}plugin/Scheduler/run.php"; + } + //$desc .= $this->isReadyLabel(array('YPTWallet')); + return $desc; + } + + public function getName() { + return "Scheduler"; + } + + public function getUUID() { + return "Scheduler-5ee8405eaaa16"; + } + + public function getPluginVersion() { + return "3.0"; + } + + public function updateScript() { + global $global; + if (AVideoPlugin::compareVersion($this->getName(), "2.0") < 0) { + $sqls = file_get_contents($global['systemRootPath'] . 'plugin/Scheduler/install/updateV2.0.sql'); + $sqlParts = explode(";", $sqls); + foreach ($sqlParts as $value) { + sqlDal::writeSql(trim($value)); + } + } + if (AVideoPlugin::compareVersion($this->getName(), "3.0") < 0) { + $sqls = file_get_contents($global['systemRootPath'] . 'plugin/Scheduler/install/updateV3.0.sql'); + $sqlParts = explode(";", $sqls); + foreach ($sqlParts as $value) { + sqlDal::writeSql(trim($value)); + } + } + return true; + } + + public function getEmptyDataObject() { + $obj = new stdClass(); + /* + $obj->textSample = "text"; + $obj->checkboxSample = true; + $obj->numberSample = 5; + + $o = new stdClass(); + $o->type = array(0=>__("Default"))+array(1,2,3); + $o->value = 0; + $obj->selectBoxSample = $o; + + $o = new stdClass(); + $o->type = "textarea"; + $o->value = ""; + $obj->textareaSample = $o; + */ + return $obj; + } + + public function getPluginMenu() { + global $global; + $btn = ''; + $btn .= ''; + return $btn; + } + + static public function run($scheduler_commands_id) { + global $_executeSchelude, $global; + if (!isset($_executeSchelude)) { + $_executeSchelude = array(); + } + $e = new Scheduler_commands($scheduler_commands_id); + $callBackURL = $e->getCallbackURL(); + $callBackURL = str_replace('{webSiteRootURL}', $global['webSiteRootURL'], $callBackURL); + if (!isValidURL($callBackURL)) { + return false; + } + if (empty($_executeSchelude[$callBackURL])) { + $callBackURL = addQueryStringParameter($callBackURL, 'token', getToken(60)); + $callBackURL = addQueryStringParameter($callBackURL, 'scheduler_commands_id', $scheduler_commands_id); + _error_log("Scheduler::run getting callback URL {$callBackURL}"); + $_executeSchelude[$callBackURL] = url_get_contents($callBackURL, '', 30); + _error_log("Scheduler::run got callback " . json_encode($_executeSchelude[$callBackURL])); + $json = _json_decode($_executeSchelude[$callBackURL]); + if (is_object($json) && !empty($json->error)) { + _error_log("Scheduler::run callback ERROR " . json_encode($json)); + return false; + } + } + if (!empty($_executeSchelude[$callBackURL])) { + return $e->setExecuted($_executeSchelude[$callBackURL]); + } + return false; + } + + static public function add($date_to_execute, $callbackURL, $parameters = '', $type = '') { + _error_log("Scheduler::add [$date_to_execute] [$callbackURL]"); + if (empty($date_to_execute)) { + _error_log("Scheduler::add ERROR date_to_execute is empty"); + return false; + } + + $date_to_execute_time = _strtotime($date_to_execute); + + if ($date_to_execute_time <= time()) { + _error_log("Scheduler::add ERROR date_to_execute must be greater than now [{$date_to_execute}] " . date('Y/m/d H:i:s', $date_to_execute_time) . ' ' . date('Y/m/d H:i:s')); + return false; + } + + if (empty($callbackURL)) { + _error_log("Scheduler::add ERROR callbackURL is empty"); + return false; + } + $e = new Scheduler_commands(0); + $e->setDate_to_execute($date_to_execute); + $e->setCallbackURL($callbackURL); + if (!empty($parameters)) { + $e->setParameters($parameters); + } + if (!empty($type)) { + $e->setType($type); + } + return $e->save(); + } + + static public function addSendEmail($date_to_execute, $emailTo, $emailSubject, $emailEmailBody, $emailFrom = '', $emailFromName = '', $type = '') { + global $global; + $parameters = array( + 'emailSubject' => $emailSubject, + 'emailEmailBody' => $emailEmailBody, + 'emailTo' => $emailTo, + 'emailFrom' => $emailFrom, + 'emailFromName' => $emailFromName, + ); + //var_dump($parameters);exit; + $url = "{webSiteRootURL}plugin/Scheduler/sendEmail.json.php"; + + if (empty($type)) { + $type = 'SendEmail'; + } + + $scheduler_commands_id = Scheduler::add($date_to_execute, $url, $parameters, $type); + return $scheduler_commands_id; + } + + static public function getReminderOptions($destinationURL, $title, $date_start, $selectedEarlierOptions = array(), $date_end = '', $joinURL='', $description='',$earlierOptions = array( + '10 minutes earlier' => 10, + '30 minutes earlier' => 30, + '1 hour earlier' => 60, + '2 hours earlier' => 120, + '1 day earlier' => 1440, + '2 days earlier' => 2880, + '1 week earlier' => 10080 + ) + ) { + global $global; + $varsArray = array( + 'destinationURL' => $destinationURL, + 'title' => $title, + 'date_start' => $date_start, + 'selectedEarlierOptions' => $selectedEarlierOptions, + 'date_end' => $date_end, + 'joinURL' => $joinURL, + 'description' => $description, + 'earlierOptions' => $earlierOptions); + $filePath = "{$global['systemRootPath']}plugin/Scheduler/reminderOptions.php"; + return getIncludeFileContent($filePath, $varsArray); + } + + /** + * + * @global type $global + * @param type $title + * @param type $description + * @param type $date_start + * @param type $date_end + * + * description - string description of the event. + dtend - date/time stamp designating the end of the event. You can use either a DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). + dtstart - date/time stamp designating the start of the event. You can use either a DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). + location - string address or description of the location of the event. + summary - string short summary of the event - usually used as the title. + url - string url to attach to the the event. Make sure to add the protocol (http:// or https://). + */ + static public function downloadICS($title, $date_start, $date_end = '', $reminderInMinutes='', $joinURL='', $description='') { + global $global,$config; + //var_dump(date_default_timezone_get());exit; + header('Content-Type: text/calendar; charset=utf-8'); + header('Content-Disposition: attachment; filename=invite.ics'); + + $location = $config->getWebSiteTitle(); + if(!isValidURL($joinURL)){ + $joinURL = $global['webSiteRootURL']; + } + + if(empty($description)){ + $description = $location; + } + + $date_start = _strtotime($date_start); + $date_end = _strtotime($date_end); + + if(empty($date_end) || $date_end <= $date_start){ + $date_end = strtotime(date('Y/m/d H:i:s', $date_start).' + 1 hour'); + } + $dtstart = date('Y/m/d H:i:s', $date_start); + $dtend = date('Y/m/d H:i:s', $date_end); + $reminderInMinutes = intval($reminderInMinutes); + if(!empty($reminderInMinutes)){ + $VALARM = "-P{$reminderInMinutes}M"; + }else{ + $VALARM = ''; + } + + $props = array( + 'location' => $location, + 'description' => $description, + 'dtstart' => $dtstart, + 'dtend' => $dtend, + 'summary' => $title, + 'url' => $joinURL, + 'valarm' => $VALARM, + //'X-WR-TIMEZONE' => date_default_timezone_get() + ); + $ics = new ICS($props); + //var_dump($props); + echo $ics->to_string(); + } + +} diff --git a/plugin/Scheduler/downloadICS.php b/plugin/Scheduler/downloadICS.php new file mode 100644 index 000000000000..2b899c3fdd32 --- /dev/null +++ b/plugin/Scheduler/downloadICS.php @@ -0,0 +1,17 @@ + +
+
    + $value) { + $checked = ''; + if (in_array($value, $selectedEarlierOptions)) { + $checked = 'checked'; + } + $icsURL = addQueryStringParameter($ics, 'reminder', $value); + ?> +
  • + +
    + > + +
    +
  • + +
+
+ \ No newline at end of file diff --git a/plugin/Scheduler/sendEmail.json.php b/plugin/Scheduler/sendEmail.json.php new file mode 100644 index 000000000000..fca94352687f --- /dev/null +++ b/plugin/Scheduler/sendEmail.json.php @@ -0,0 +1,74 @@ +getParameters()); +//echo $e->getParameters(); +//var_dump($parameters, $e->getParameters(), json_last_error_msg());exit; +if(empty($parameters)){ + forbiddenPage('paramenters is empty'); +} + +$parameters = object_to_array($parameters); + +if(empty($parameters['emailTo'])){ + forbiddenPage('emailTo is empty'); +} + +$parameters['emailTo'] = is_email($parameters['emailTo']); +if (empty($parameters['emailTo'])) { + forbiddenPage('emailTo is invalid'); +} + +if(emptyHTML($parameters['emailEmailBody'])){ + forbiddenPage('emailEmailBody is empty'); +} + +if(is_numeric($parameters['emailFrom'])){ + $parameters['emailFromName'] = User::getNameIdentificationById($parameters['emailFrom']);; + $parameters['emailFrom'] = User::getEmailDb($parameters['emailFrom']); +} + +if(empty($parameters['emailFrom']) || !filter_var($parameters['emailFrom'], FILTER_VALIDATE_EMAIL)){ + $parameters['emailFrom'] = $config->getContactEmail(); +} + +if(empty($parameters['emailFromName'])){ + $parameters['emailFromName'] = ''; +} + +if(empty($parameters['emailSubject'])){ + $parameters['emailSubject'] = $config->getWebSiteTitle(); +} + + +$obj = new stdClass(); +$obj->msg = ''; +$obj->parameters = $parameters; +$obj->error = !sendSiteEmail($parameters['emailTo'], $parameters['emailSubject'], $parameters['emailEmailBody'], $parameters['emailFrom'], $parameters['emailFromName']); + +die(_json_encode($obj)); \ No newline at end of file diff --git a/plugin/YPTSocket/Message.php b/plugin/YPTSocket/Message.php index 1c1ad6670871..34904c2d6710 100644 --- a/plugin/YPTSocket/Message.php +++ b/plugin/YPTSocket/Message.php @@ -2,6 +2,7 @@ namespace Socket; +use React\EventLoop\Loop; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; @@ -12,14 +13,20 @@ class Message implements MessageComponentInterface { protected $clients; protected $clientsWatchinLive; + protected $clientsWatchVideosId; protected $clientsUsersId; + protected $clientsChatRoom; public function __construct() { //$this->clients = new \SplObjectStorage; $this->clients = []; $this->clientsWatchinLive = []; $this->clientsWatchVideosId = []; + $this->clientsUsersId = []; + $this->clientsChatRoom = []; + //$this->loop->ad _log_message("Construct"); + } public function onOpen(ConnectionInterface $conn) { @@ -178,7 +185,7 @@ public function onClose(ConnectionInterface $conn) { } if (!empty($client['users_id'])) { unset($this->clientsUsersId[$client['users_id']]['resourceId'][$conn->resourceId]); - if(empty($this->clientsUsersId[$client['users_id']]['resourceId'])){ + if (empty($this->clientsUsersId[$client['users_id']]['resourceId'])) { unset($this->clientsUsersId[$client['users_id']]); } } @@ -248,7 +255,7 @@ public function onMessage(ConnectionInterface $from, $msg) { $this->msgToSelfURI($json, $msgObj->send_to_uri_pattern); } else if (!empty($json['resourceId'])) { $this->msgToResourceId($json, $json['resourceId']); - }else if (!empty($json['to_users_id'])) { + } else if (!empty($json['to_users_id'])) { $this->msgToUsers_id($json, $json['to_users_id']); } else { $this->msgToAll($from, $json); @@ -361,12 +368,12 @@ public function msgToUsers_id($msg, $users_id, $type = "") { } try { $count = 0; - if(!is_array($users_id)){ + if (!is_array($users_id)) { $users_id = array($users_id); } foreach ($users_id as $user_id) { $user_id = intval($user_id); - if(empty($user_id)){ + if (empty($user_id)) { continue; } if ($this->isUserLive($user_id)) { @@ -376,13 +383,12 @@ public function msgToUsers_id($msg, $users_id, $type = "") { } } } - } catch (Exception $exc) { echo $exc->getTraceAsString(); var_dump($users_id, $this->clientsUsersId); } - _log_message("msgToUsers_id: sent to ($count) clients users_id=". json_encode($users_id)); + _log_message("msgToUsers_id: sent to ($count) clients users_id=" . json_encode($users_id)); } public function msgToSelfURI($msg, $pattern, $type = "") { @@ -572,12 +578,10 @@ private function makeSureIsArray($msg) { public function getTags() { return array('free', 'live'); } - + public function isUserLive($users_id) { return !empty($this->clientsUsersId[$users_id]) && !empty($this->clientsUsersId[$users_id]['resourceId']); } - - } diff --git a/plugin/YPTSocket/Message2.php b/plugin/YPTSocket/Message2.php new file mode 100644 index 000000000000..d5422fea4f8d --- /dev/null +++ b/plugin/YPTSocket/Message2.php @@ -0,0 +1,592 @@ +clients = new \SplObjectStorage; + $this->clients = []; + $this->clientsWatchinLive = []; + $this->clientsWatchVideosId = []; + $this->clientsUsersId = []; + _log_message("Construct"); + } + + public function onOpen(ConnectionInterface $conn) { + global $onMessageSentTo, $SocketGetTotals; + $SocketGetTotals = null; + $onMessageSentTo = array(); + $query = $conn->httpRequest->getUri()->getQuery(); + parse_str($query, $wsocketGetVars); + foreach ($wsocketGetVars as $key => $value) { + $wsocketGetVars[$key] = urldecode($value); + } + if (empty($wsocketGetVars['webSocketToken'])) { + _log_message("Empty websocket token "); + return false; + } + $json = getDecryptedInfo($wsocketGetVars['webSocketToken']); + if (empty($json)) { + _log_message("Invalid websocket token "); + return false; + } + // Store the new connection to send messages to later + //$this->clients->attach($conn); + $client = array(); + $client['conn'] = $conn; + $client['resourceId'] = $conn->resourceId; + $client['users_id'] = $json->from_users_id; + $client['isAdmin'] = $json->isAdmin; + $client['user_name'] = $json->user_name; + $client['browser'] = $json->browser; + $client['yptDeviceId'] = $json->yptDeviceId; + $client['client'] = deviceIdToObject($json->yptDeviceId); + if (!empty($wsocketGetVars['webSocketSelfURI'])) { + $client['selfURI'] = $wsocketGetVars['webSocketSelfURI']; + } else { + $client['selfURI'] = $json->selfURI; + } + $client['isCommandLine'] = @$wsocketGetVars['isCommandLine']; + $client['page_title'] = @utf8_encode(@$wsocketGetVars['page_title']); + $client['videos_id'] = $json->videos_id; + $client['live_key'] = object_to_array(@$json->live_key); + $client['ip'] = $json->ip; + $client['location'] = $json->location; + + if (!empty($client['live_key']['key'])) { + $this->clientsWatchinLive[$client['live_key']['key']][$client['resourceId']] = $client['users_id']; + } else + if (!empty($client['live_key']['liveLink'])) { + $this->clientsWatchinLive[$client['live_key']['liveLink']][$client['resourceId']] = $client['users_id']; + } else + if (!empty($client['videos_id'])) { + $this->clientsWatchVideosId[$client['videos_id']][$client['resourceId']] = $client['users_id']; + } + if (!empty($client['users_id'])) { + + if (!isset($this->clientsUsersId[$client['users_id']])) { + $this->clientsUsersId[$client['users_id']] = array( + "users_id" => $client['users_id'], + "isAdmin" => $client['isAdmin'], + "user_name" => $client['user_name'] + ); + $this->clientsUsersId[$client['users_id']]['resourceId'] = array(); + } + + if (!in_array($client['resourceId'], $this->clientsUsersId[$client['users_id']]['resourceId'])) { + $this->clientsUsersId[$client['users_id']]['resourceId'][$client['resourceId']] = $client['resourceId']; + } + } + _log_message("New connection ($conn->resourceId) {$json->yptDeviceId} {$client['selfURI']} {$client['browser']}"); + + $this->clients[$conn->resourceId] = $client; + /* + if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { + $limit = 250; + } else { + $limit = 900; + } + //$limit = 99999; + if(count($this->clients)>$limit){ + $resourceId = array_key_first($this->clients); + _log_message("\e[1;32;40m*** Closing connection {$resourceId} ***\e[0m"); + //$this->clients[$resourceId]->close(); + //$this->clients->detach($this->clients[$resourceId]['conn']); + $this->clients[$resourceId]['conn']->close(); + unset($resourceId); + } + */ + if ($client['browser'] == \SocketMessageType::TESTING) { + _log_message("Test detected and received from ($conn->resourceId) " . PHP_EOL . "\e[1;32;40m*** SUCCESS TEST CONNECION {$json->test_msg} ***\e[0m"); + $this->msgToResourceId($json, $conn->resourceId, \SocketMessageType::TESTING); + } else if ($this->shouldPropagateInfo($client)) { + //_log_message("shouldPropagateInfo {$json->yptDeviceId}"); + $this->msgToAll($conn, array('users_id' => $client['users_id'], 'user_name' => $client['user_name'], 'yptDeviceId' => $client['yptDeviceId']), \SocketMessageType::NEW_CONNECTION, true); + } else { + //_log_message("NOT shouldPropagateInfo "); + } + if (!empty($json->videos_id)) { + //_log_message("msgToAllSameVideo "); + $this->msgToAllSameVideo($json->videos_id, ""); + } else { + //_log_message("NOT msgToAllSameVideo "); + } + if (!empty($json->live_key)) { + //_log_message("msgToAllSameLive "); + if (\AVideoPlugin::isEnabledByName('LiveUsers')) { + $live_key = object_to_array($json->live_key); + if (!empty($live_key['key'])) { + \_mysql_connect(); + $lt = \LiveTransmitionHistory::getLatest($live_key['key']); + if (!empty($lt['id'])) { + $l = new \LiveTransmitionHistory($lt['id']); + $total_viewers = \LiveUsers::getTotalUsers($lt['key'], $lt['live_servers_id']); + $max_viewers_sametime = $l->getMax_viewers_sametime(); + if (!empty($live_key['key'])) { + $viewers_now = count($this->clientsWatchinLive[$live_key['key']]); + } else if (!empty($live_key['liveLink'])) { + $viewers_now = count($this->clientsWatchinLive[$live_key['liveLink']]); + } + if ($viewers_now > $max_viewers_sametime) { + $l->setMax_viewers_sametime($viewers_now); + } + $l->setTotal_viewers($total_viewers); + _log_message("onOpen Connection viewers_now = {$viewers_now} => total_viewers = {$total_viewers}"); + $l->save(); + } + \_mysql_close(); + } + } + $this->msgToAllSameLive($json->live_key, ""); + } else { + //_log_message("NOT msgToAllSameLive "); + } + } + + public function onClose(ConnectionInterface $conn) { + global $onMessageSentTo, $SocketGetTotals; + $SocketGetTotals = null; + $onMessageSentTo = array(); + + unset($getStatsLive); + unset($_getStats); + // The connection is closed, remove it, as we can no longer send it messages + //$this->clients->detach($conn); + if (empty($this->clients[$conn->resourceId])) { + _log_message("onClose Connection {$conn->resourceId} not found"); + return false; + } + $client = $this->clients[$conn->resourceId]; + + if (!empty($client['live_key'])) { + if (!empty($client['live_key']['key'])) { + unset($this->clientsWatchinLive[$client['live_key']['key']][$conn->resourceId]); + } + if (!empty($client['live_key']['liveLink'])) { + unset($this->clientsWatchinLive[$client['live_key']['liveLink']][$conn->resourceId]); + } + } + if (!empty($client['users_id'])) { + unset($this->clientsUsersId[$client['users_id']]['resourceId'][$conn->resourceId]); + if(empty($this->clientsUsersId[$client['users_id']]['resourceId'])){ + unset($this->clientsUsersId[$client['users_id']]); + } + } + + unset($this->clients[$conn->resourceId]); + $users_id = $client['users_id']; + $videos_id = $client['videos_id']; + $live_key = $client['live_key']; + if ($this->shouldPropagateInfo($client)) { + $this->msgToAll($conn, array('users_id' => $client['users_id']), \SocketMessageType::NEW_DISCONNECTION); + //\AVideoPlugin::onUserSocketDisconnect($users_id, $this->clients[$conn->resourceId]); + if (!empty($videos_id)) { + $this->msgToAllSameVideo($videos_id, ""); + } + if (!empty($live_key)) { + $this->msgToAllSameLive($live_key, ""); + } + } + _log_message("Connection {$conn->resourceId} has disconnected"); + } + + public function onMessage(ConnectionInterface $from, $msg) { + global $onMessageSentTo, $SocketGetTotals; + $SocketGetTotals = null; + $onMessageSentTo = array(); + //_log_message("onMessage: {$msg}"); + $json = _json_decode($msg); + if (empty($json)) { + _log_message("onMessage ERROR: JSON is empty "); + return false; + } + if (empty($json->webSocketToken)) { + _log_message("onMessage ERROR: webSocketToken is empty "); + return false; + } + + if (!$msgObj = getDecryptedInfo($json->webSocketToken)) { + _log_message("onMessage ERROR: could not decrypt webSocketToken"); + return false; + } + + switch ($json->msg) { + case "webSocketToken": + if (empty($this->clients[$from->resourceId]['users_id'])) { + _log_message("onMessage:webSocketToken"); + $this->clients[$from->resourceId]['users_id'] = $msgObj->from_users_id; + $this->clients[$from->resourceId]['yptDeviceId'] = $msgObj->yptDeviceId; + } + break; + case "getClientsList": + if (empty($this->clientsUsersId)) { + return false; + } + //var_dump($this->clientsUsersId); + //var_dump($msgObj->from_users_id); + //var_dump($json); + //var_dump($msgObj); + $this->msgToResourceId(array('json' => $this->clientsUsersId, 'callback' => 'loadCallerPanel'), $from->resourceId); + break; + case \SocketMessageType::TESTING: + $this->msgToResourceId($json, $from->resourceId, \SocketMessageType::TESTING); + break; + default: + $this->msgToArray($json); + //_log_message("onMessage:msgObj: " . json_encode($json)); + if (!empty($msgObj->send_to_uri_pattern)) { + $this->msgToSelfURI($json, $msgObj->send_to_uri_pattern); + } else if (!empty($json['resourceId'])) { + $this->msgToResourceId($json, $json['resourceId']); + }else if (!empty($json['to_users_id'])) { + $this->msgToUsers_id($json, $json['to_users_id']); + } else { + $this->msgToAll($from, $json); + } + break; + } + } + + private function shouldPropagateInfo($client) { + if (preg_match('/^unknowDevice.*/', $client['yptDeviceId'])) { + return false; + } + if (!empty($client['isCommandLine'])) { + return false; + } + return true; + } + + public function msgToResourceId($msg, $resourceId, $type = "") { + global $onMessageSentTo, $SocketDataObj; + if (in_array($resourceId, $onMessageSentTo)) { + return false; + } + if (empty($this->clients[$resourceId]) || empty($this->clients[$resourceId]['conn'])) { + _log_message("msgToResourceId: we wil NOT send the message to resourceId=({$resourceId}) {$type} because it does not exists anymore"); + return false; + } + + // do not sent duplicated messages + $onMessageSentTo[] = $resourceId; + + if (!$this->shouldPropagateInfo($this->clients[$resourceId])) { + _log_message("msgToResourceId: we wil NOT send the message to resourceId=({$resourceId}) {$type}"); + } + + if (!is_array($msg)) { + $this->msgToArray($msg); + } + if (!empty($msg['webSocketToken'])) { + unset($msg['webSocketToken']); + } + if (empty($type)) { + $type = \SocketMessageType::DEFAULT_MESSAGE; + } + + $videos_id = $this->clients[$resourceId]['videos_id']; + $users_id = $this->clients[$resourceId]['users_id']; + $live_key = $this->clients[$resourceId]['live_key']; + + $obj = array(); + $obj['ResourceId'] = $resourceId; + $obj['type'] = $type; + + if (isset($msg['callback'])) { + $obj['callback'] = $msg['callback']; + unset($msg['callback']); + } else { + $obj['callback'] = ""; + } + + if (!empty($msg['json'])) { + $obj['msg'] = $msg['json']; + } else if (!empty($msg['msg'])) { + $obj['msg'] = $msg['msg']; + } else { + $obj['msg'] = $msg; + } + + $obj['uniqid'] = uniqid(); + $obj['users_id'] = $users_id; + $obj['videos_id'] = $videos_id; + $obj['live_key'] = $live_key; + $obj['webSocketServerVersion'] = $SocketDataObj->serverVersion; + $obj['isAdmin'] = $this->clients[$resourceId]['isAdmin']; + + $return = $this->getTotals($this->clients[$resourceId]); + + $totals = array( + 'webSocketServerVersion' => $SocketDataObj->serverVersion, + 'socket_users_id' => $users_id, + 'socket_resourceId' => $resourceId, + 'total_devices_online' => count($return['users_id']), + 'total_users_online' => count($return['devices']) + ); + + $obj['autoUpdateOnHTML'] = array_merge($totals, $return['class_to_update']); + + $obj['users_uri'] = $return['users_uri']; + $obj['resourceId'] = $resourceId; + $obj['users_id_online'] = $this->clientsUsersId; + + $msgToSend = json_encode($obj); + _log_message("msgToResourceId: resourceId=({$resourceId}) {$type}"); + $this->clients[$resourceId]['conn']->send($msgToSend); + } + + public function onError(ConnectionInterface $conn, \Exception $e) { + if (!preg_match('/protocol is shutdown/i', $e->getMessage())) { // this may be the iframe that reloads the page + $debug = $this->clients[$conn->resourceId]; + unset($debug['conn']); + var_dump($debug); + _log_message("ERROR: ($conn->resourceId) {$e->getMessage()} ", \AVideoLog::$ERROR); + } + $conn->close(); + } + + public function msgToUsers_id($msg, $users_id, $type = "") { + if (empty($users_id) || empty($this->clientsUsersId)) { + return false; + } + try { + $count = 0; + if(!is_array($users_id)){ + $users_id = array($users_id); + } + foreach ($users_id as $user_id) { + $user_id = intval($user_id); + if(empty($user_id)){ + continue; + } + if ($this->isUserLive($user_id)) { + foreach ($this->clientsUsersId[$user_id]['resourceId'] as $resourceId) { + $count++; + $this->msgToResourceId($msg, $resourceId, $type); + } + } + } + + } catch (Exception $exc) { + echo $exc->getTraceAsString(); + var_dump($users_id, $this->clientsUsersId); + } + + _log_message("msgToUsers_id: sent to ($count) clients users_id=". json_encode($users_id)); + } + + public function msgToSelfURI($msg, $pattern, $type = "") { + if (empty($pattern)) { + return false; + } + $count = 0; + foreach ($this->clients as $resourceId => $value) { + if (empty($value['selfURI'])) { + continue; + } + if (preg_match($pattern, $value['selfURI'])) { + $count++; + $this->msgToResourceId($msg, $resourceId, $type); + } + } + _log_message("msgToSelfURI: sent to ($count) clients pattern={$pattern} {$type}"); + } + + public function getTotals($_client) { + + $isAdmin = $_client['isAdmin']; + $selfURI = $_client['selfURI']; + $videos_id = $_client['videos_id']; + $users_id = $_client['users_id']; + $live_key = object_to_array($_client['live_key']); + global $SocketDataObj, $SocketGetTotals; + + if (!$isAdmin && isset($SocketGetTotals)) { + return $SocketGetTotals; + } + + $return = array( + 'users_id' => array(), + 'devices' => array(), + 'class_to_update' => array(), + 'users_uri' => array() + ); + + $users_id_array = $devices = $list = array(); + + foreach ($this->clients as $key => $client) { + if (empty($client['yptDeviceId'])) { + continue; + _log_message("getTotals: yptDeviceId is empty "); + } + unset($client['conn']); + + if ($isAdmin) { + $index = md5($client['selfURI']); + if (!isset($return['users_uri'][$index])) { + $return['users_uri'][$index] = array(); + } + if (!isset($return['users_uri'][$index][$client['yptDeviceId']])) { + $return['users_uri'][$index][$client['yptDeviceId']] = array(); + } + if (empty($client['users_id'])) { + $return['users_uri'][$index][$client['yptDeviceId']][uniqid()] = $client; + } else + if (!isset($return['users_uri'][$index][$client['yptDeviceId']][$client['users_id']])) { + $return['users_uri'][$index][$client['yptDeviceId']][$client['users_id']] = $client; + } + } + + //total_devices_online + if (!in_array($client['yptDeviceId'], $return['devices'])) { + $return['devices'][] = $client['yptDeviceId']; + } + //total_users_online + if (!empty($client['users_id']) && !in_array($client['users_id'], $return['users_id'])) { + if ($this->shouldPropagateInfo($client)) { + $return['users_id'][] = $client['users_id']; + } + } + + $keyName = ""; + if (!empty($SocketDataObj->showTotalOnlineUsersPerVideo) && !empty($client['videos_id'])) { + $keyName = getSocketVideoClassName($client['videos_id']); + } else if (!empty($SocketDataObj->showTotalOnlineUsersPerLive) && !empty($client['live_key']['key'])) { + $keyName = getSocketLiveClassName($client['live_key']['key'], $client['live_key']['live_servers_id']); + } else if (!empty($SocketDataObj->showTotalOnlineUsersPerLiveLink) && !empty($client['live_key']['liveLink'])) { + $keyName = getSocketLiveLinksClassName($client['live_key']['liveLink']); + } + + if (!empty($keyName)) { + if (!isset($return['class_to_update'][$keyName])) { + $return['class_to_update'][$keyName] = 1; + } else { + $return['class_to_update'][$keyName]++; + } + } + } + if (!$isAdmin) { + $SocketGetTotals = $return; + } + return $return; + } + + public function msgToDevice_id($msg, $yptDeviceId) { + if (empty($yptDeviceId)) { + return false; + } + $count = 0; + foreach ($this->clients as $resourceId => $value) { + if ($value['yptDeviceId'] == $yptDeviceId) { + $count++; + $this->msgToResourceId($msg, $resourceId); + } + } + _log_message("msgToDevice_id: sent to ($count) clients yptDeviceId={$yptDeviceId} "); + } + + public function msgToAll(ConnectionInterface $from, $msg, $type = "", $includeMe = false) { + _log_message("msgToAll FROM ({$from->resourceId}) {$type} Total Clients: " . count($this->clients)); + foreach ($this->clients as $key => $client) { + if (!empty($includeMe) || $from !== $client['conn']) { + //_log_message("msgToAll FROM ({$from->resourceId}) TO {$key} {$type}"); + $this->msgToResourceId($msg, $key, $type); + } + } + } + + public function msgToAllSameVideo($videos_id, $msg) { + if (empty($videos_id)) { + return false; + } + if (!is_array($msg)) { + $this->msgToArray($msg); + } + _log_message("msgToAllSameVideo: {$videos_id}"); + foreach ($this->clients as $key => $client) { + if (empty($client['videos_id'])) { + continue; + } + if ($client['videos_id'] == $videos_id) { + $this->msgToResourceId($msg, $key, \SocketMessageType::ON_VIDEO_MSG); + } + } + } + + public function msgToAllSameLive($live_key, $msg) { + if (empty($live_key)) { + return false; + } + $live_key = object_to_array($live_key); + if (!is_array($msg)) { + $this->msgToArray($msg); + } + _mysql_connect(); + $msg['is_live'] = \Live::isLiveAndIsReadyFromKey($live_key['key'], $live_key['live_servers_id'], true); + _mysql_close(); + _log_message("msgToAllSameLive: key={$live_key['key']} live_servers_id={$live_key['live_servers_id']} liveLink={$live_key['liveLink']}"); + foreach ($this->clients as $key => $client) { + if (empty($client['live_key']) || (empty($client['live_key']['key']) && empty($client['live_key']['liveLink']))) { + continue; + } + if ($client['live_key']['key'] == $live_key['key'] && $client['live_key']['live_servers_id'] == $live_key['live_servers_id']) { + $this->msgToResourceId($msg, $key, \SocketMessageType::ON_LIVE_MSG); + } else if ($client['live_key']['liveLink'] == $live_key['liveLink']) { + $this->msgToResourceId($msg, $key, \SocketMessageType::ON_LIVE_MSG); + } + } + } + + private function msgToArray(&$json) { + $json = $this->makeSureIsArray($json); + return true; + } + + private function makeSureIsArray($msg) { + if (empty($msg)) { + return array(); + } + if (is_string($msg)) { + $decoded = _json_decode($msg); + } else { + $decoded = object_to_array($msg); + } + if (is_string($msg) && !$decoded) { + return array($msg); + } else if (is_string($msg)) { + return object_to_array($decoded); + } + return object_to_array($msg); + } + + public function getTags() { + return array('free', 'live'); + } + + public function isUserLive($users_id) { + return !empty($this->clientsUsersId[$users_id]) && !empty($this->clientsUsersId[$users_id]['resourceId']); + } + + + +} + +function _log_message($msg, $type = "") { + global $SocketDataObj; + if (!empty($SocketDataObj->debugAllUsersSocket) || !empty($SocketDataObj->debugSocket)) { + //_error_log($msg, \AVideoLog::$SOCKET); + echo date('Y-m-d H:i:s') . ' ' . $msg . PHP_EOL; + } else if ($type == \AVideoLog::$ERROR) { + _error_log($msg, \AVideoLog::$SOCKET); + echo "\e[1;31;40m" . date('Y-m-d H:i:s') . ' ' . $msg . "\e[0m" . PHP_EOL; + } +} diff --git a/plugin/YPTSocket/YPTSocket.php b/plugin/YPTSocket/YPTSocket.php index 65d5fce6cf64..38a44068db84 100644 --- a/plugin/YPTSocket/YPTSocket.php +++ b/plugin/YPTSocket/YPTSocket.php @@ -193,6 +193,7 @@ public function onUserSocketConnect() { if (!empty($obj->enableCalls)) { echo 'callerNewConnection(response);'; } + echo 'socketNewConnection(response);'; return ''; } @@ -201,7 +202,38 @@ public function onUserSocketDisconnect() { if (!empty($obj->enableCalls)) { echo 'callerDisconnection(response);'; } + echo 'socketDisconnection(response);'; return ''; } + + public static function getUserOnlineLabel($users_id, $class='', $style='') { + global $global; + $users_id = intval($users_id); + $varsArray = array('users_id' => $users_id, 'class'=>$class, 'style'=>$style); + $filePath = $global['systemRootPath'] . 'plugin/YPTSocket/userOnlineLabel.php'; + return getIncludeFileContent($filePath, $varsArray); + } + + + public static function shouldShowCaller() { + global $_YPTSocketshouldShowCaller; + if(!isset($_YPTSocketshouldShowCaller)){ + $obj = new stdClass(); + $obj->show = false; + $obj->reason = ''; + if (!User::isLogged()) { + $obj->reason = 'Not logged'; + } else { + $objSocket = AVideoPlugin::getDataObjectIfEnabled('YPTSocket'); + if (empty($objSocket->enableCalls)) { + $obj->reason = 'YPTSocket enableCalls = false'; + }else{ + $obj->show = true; + } + } + $_YPTSocketshouldShowCaller = $obj; + } + return $_YPTSocketshouldShowCaller; + } } diff --git a/plugin/YPTSocket/caller.js b/plugin/YPTSocket/caller.js index 13752517e149..89756515dc1a 100644 --- a/plugin/YPTSocket/caller.js +++ b/plugin/YPTSocket/caller.js @@ -41,6 +41,12 @@ function callNow(to_users_id, to_identification) { //incomeCall(json); } + +function callUserNow(to_users_id) { + avideoModalIframeFull(webSiteRootURL + 'plugin/YPTSocket/callUser.php?users_id='+to_users_id); + return false; +} + function isJsonReceivingCall(json) { if (json.from_users_id != my_users_id) { // is receiving a call diff --git a/plugin/YPTSocket/getWebSocket.json.php b/plugin/YPTSocket/getWebSocket.json.php index a22ee2ff4903..eb6e25cebb5b 100644 --- a/plugin/YPTSocket/getWebSocket.json.php +++ b/plugin/YPTSocket/getWebSocket.json.php @@ -1,21 +1,21 @@ -error = true; -$obj->msg = ""; -$obj->webSocketToken = ""; -$obj->webSocketURL = ""; - -if(!AVideoPlugin::isEnabledByName("YPTSocket")){ - $obj->msg = "Socket plugin not enabled"; - die(json_encode($obj)); -} - - -$obj->error = false; -$obj->webSocketToken = getEncryptedInfo(0); -$obj->webSocketURL = YPTSocket::getWebSocketURL(); - +error = true; +$obj->msg = ""; +$obj->webSocketToken = ""; +$obj->webSocketURL = ""; + +if(!AVideoPlugin::isEnabledByName("YPTSocket")){ + $obj->msg = "Socket plugin not enabled"; + die(json_encode($obj)); +} + + +$obj->error = false; +$obj->webSocketToken = getEncryptedInfo(0); +$obj->webSocketURL = YPTSocket::getWebSocketURL(); + die(json_encode($obj)); \ No newline at end of file diff --git a/plugin/YPTSocket/localhost.pem b/plugin/YPTSocket/localhost.pem new file mode 100644 index 000000000000..be692792d7da --- /dev/null +++ b/plugin/YPTSocket/localhost.pem @@ -0,0 +1,49 @@ +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBZMRIwEAYDVQQDDAkxMjcu +MC4wLjExCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK +DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMwMTQ1OTA2WhcNMjYx +MjI4MTQ1OTA2WjBZMRIwEAYDVQQDDAkxMjcuMC4wLjExCzAJBgNVBAYTAkFVMRMw +EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0 +eSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8SZWNS+Ktg0Py +W8dx5uXZ+ZUawd3wnzLMHW7EhoUpIrIdp3kDU9NezF68dOhPMJY/Kh+6btRCxWXN +2OVTqS5Xi826j3TSE07iF83JRLeveW0PcodjUBd+RzdwCWWo2pfMJz4v7x1wu1c9 +zNi6JxxpDAXTFSB4GiWsI4tFu2XmMRhfm6LRK4WPfsZIJKokdiG5fKSPDn7nrVj0 +UUXr2eBsEAzdwL14U9+mwbLdaAkz3qK3fqi8sEC09lEWm95gKMOhkQf5qvXODtT4 +wdVrrKDTyehLv0xaItnUDnXzrkMBU5QS9TQzzqSW6ZaBsSxtONEFUiXiN9dtyXsY +YCUE54G/AgMBAAGjUDBOMB0GA1UdDgQWBBQ2GRz3QsQzdXaTMnPVCKfpigA10DAf +BgNVHSMEGDAWgBQ2GRz3QsQzdXaTMnPVCKfpigA10DAMBgNVHRMEBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQA77iZ4KrpPY18Ezjt0mngYAuAxunKddXYdLZ2khywN +0uI/VzYnkFVtrsC7y2jLHSxlmE2/viPPGZDUplENV2acN6JNW+tlt7/bsrQHDQw3 +7VCF27EWiDxHsaghhLkqC+kcop5YR5c0oDQTdEWEKSbow2zayUXDYbRRs76SClTe +824Yul+Ts8Mka+AX2PXDg47iZ84fJRN/nKavcJUTJ2iS1uYw0GNnFMge/uwsfMR3 +V47qN0X5emky8fcq99FlMCbcy0gHAeSWAjClgr2dd2i0LDatUbj7YmdmFcskOgII +IwGfvuWR2yPevYGAE0QgFeLHniN3RW8zmpnX/XtrJ4a7 +-----END CERTIFICATE----- +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8SZWNS+Ktg0Py +W8dx5uXZ+ZUawd3wnzLMHW7EhoUpIrIdp3kDU9NezF68dOhPMJY/Kh+6btRCxWXN +2OVTqS5Xi826j3TSE07iF83JRLeveW0PcodjUBd+RzdwCWWo2pfMJz4v7x1wu1c9 +zNi6JxxpDAXTFSB4GiWsI4tFu2XmMRhfm6LRK4WPfsZIJKokdiG5fKSPDn7nrVj0 +UUXr2eBsEAzdwL14U9+mwbLdaAkz3qK3fqi8sEC09lEWm95gKMOhkQf5qvXODtT4 +wdVrrKDTyehLv0xaItnUDnXzrkMBU5QS9TQzzqSW6ZaBsSxtONEFUiXiN9dtyXsY +YCUE54G/AgMBAAECggEBAKiO/3FE1CMddkCLZVtUp8ShqJgRokx9WI5ecwFApAkV +ZHsjqDQQYRNmxhDUX/w0tOzLGyhde2xjJyZG29YviKsbHwu6zYwbeOzy/mkGOaK/ +g6DmmMmRs9Z6juifoQCu4GIFZ6il2adIL2vF7OeJh+eKudQj/7NFRSB7mXzNrQWK +tZY3eux5zXWmio7pgZrx1HFZQiiL9NVLwT9J7oBnaoO3fREiu5J2xBpljG9Cr0j1 +LLiVLhukWJYRlHDtGt1CzI9w8iKo44PCRzpKyxpbsOrQxeSyEWUYQRv9VHA59LC7 +tVAJTbnTX1BNHkGZkOkoOpoZLwBaM2XbbDtcOGCAZMECgYEA+mTURFQ85/pxawvk +9ndqZ+5He1u/bMLYIJDp0hdB/vgD+vw3gb2UyRwp0I6Wc6Si4FEEnbY7L0pzWsiR +43CpLs+cyLfnD9NycuIasxs5fKb/1s1nGTkRAp7x9x/ZTtEf8v4YTmmMXFHzdo7V +pv+czO89ppEDkxEtMf/b5SifhO8CgYEAwIDIUvXLduGhL+RPDwjc2SKdydXGV6om +OEdt/V8oS801Z7k8l3gHXFm7zL/MpHmh9cag+F9dHK42kw2RSjDGsBlXXiAO1Z0I +2A34OdPw/kow8fmIKWTMu3+28Kca+3RmUqeyaq0vazQ/bWMO9px+Ud3YfLo1Tn5I +li0MecAx8DECgYEAvsLceKYYtL83c09fg2oc1ctSCCgw4WJcGAtvJ9DyRZacKbXH +b/+H/+OF8879zmKqd+0hcCnqUzAMTCisBLPLIM+o6b45ufPkqKObpcJi/JWaKgLY +vf2c+Psw6o4IF6T5Cz4MNIjzF06UBknxecYZpoPJ20F1kLCwVvxPgfl99l8CgYAb +XfOcv67WTstgiJ+oroTfJamy+P5ClkDqvVTosW+EHz9ZaJ8xlXHOcj9do2LPey9I +Rp250azmF+pQS5x9JKQKgv/FtN8HBVUtigbhCb14GUoODICMCfWFLmnumoMefnTR +iV+3BLn6Dqp5vZxx+NuIffZ5/Or5JsDhALSGVomC8QKBgAi3Z/dNQrDHfkXMNn/L ++EAoLuAbFgLs76r9VGgNaRQ/q5gex2bZEGoBj4Sxvs95NUIcfD9wKT7FF8HdxARv +y3o6Bfc8Xp9So9SlFXrje+gkdEJ0rQR67d+XBuJZh86bXJHVrMwpoNL+ahLGdVSe +81oh1uCH1YPLM29hPyaohxL8 +-----END PRIVATE KEY----- diff --git a/plugin/YPTSocket/script.js b/plugin/YPTSocket/script.js index abdea27a9139..e176b5beb553 100644 --- a/plugin/YPTSocket/script.js +++ b/plugin/YPTSocket/script.js @@ -250,6 +250,38 @@ function parseSocketResponse() { } } + +function socketNewConnection(json) { + setUserOnlineStatus(json.msg.users_id); +} + +function socketDisconnection(json) { + setUserOnlineStatus(json.msg.users_id); +} + +function setInitialOnlineStatus() { + + if(!isReadyToCheckIfIsOnline()){ + setTimeout(function(){setInitialOnlineStatus();},1000); + return false; + } + + for (var users_id in users_id_online) { + setUserOnlineStatus(users_id); + } + return true; +} + +function setUserOnlineStatus(users_id){ + if(isUserOnline(users_id)){ + $('.users_id_'+users_id).removeClass('offline'); + $('.users_id_'+users_id).addClass('online'); + }else{ + $('.users_id_'+users_id).removeClass('online'); + $('.users_id_'+users_id).addClass('offline'); + } +} + $(function () { //console.log('Getting webSocketToken ...'); var getWebSocket = webSiteRootURL + 'plugin/YPTSocket/getWebSocket.json.php'; @@ -275,4 +307,5 @@ $(function () { if (inIframe()) { $('#socket_info_container').hide(); } + setInitialOnlineStatus(); }); \ No newline at end of file diff --git a/plugin/YPTSocket/server.php b/plugin/YPTSocket/server.php index 856de6107328..457ab8b4c1d4 100644 --- a/plugin/YPTSocket/server.php +++ b/plugin/YPTSocket/server.php @@ -1,87 +1,84 @@ -serverVersion = YPTSocket::getServerVersion(); - -ob_end_flush(); -_mysql_close(); -session_write_close(); -exec('ulimit -n 20480'); // to handle over 1 k connections -$SocketDataObj->port = intval($SocketDataObj->port); -_error_log("Starting Socket server at port {$SocketDataObj->port}"); -//killProcessOnPort(); -$scheme = parse_url($global['webSiteRootURL'], PHP_URL_SCHEME); -echo "Starting AVideo Socket server version {$SocketDataObj->serverVersion} on port {$SocketDataObj->port}" . PHP_EOL; - -if (strtolower($scheme) !== 'https' || !empty($SocketDataObj->forceNonSecure)) { - echo "Your socket server does NOT use a secure connection" . PHP_EOL; - $server = IoServer::factory( - new HttpServer( - new WsServer( - new Message() - ) - ), - $SocketDataObj->port - ); - - $server->run(); -} else { - if (!file_exists($SocketDataObj->server_crt_file) || !is_readable($SocketDataObj->server_crt_file)) { - echo "SSL ERROR, we could not access the CRT file {$SocketDataObj->server_crt_file}, try to run this command as root or use sudo " . PHP_EOL; - } - if (!file_exists($SocketDataObj->server_key_file) || !is_readable($SocketDataObj->server_key_file)) { - echo "SSL ERROR, we could not access the KEY file {$SocketDataObj->server_key_file}, try to run this command as root or use sudo " . PHP_EOL; - } - - echo "Your socket server uses a secure connection" . PHP_EOL; - $parameters = [ - 'local_cert' => $SocketDataObj->server_crt_file, - 'local_pk' => $SocketDataObj->server_key_file, - 'allow_self_signed' => $SocketDataObj->allow_self_signed, // Allow self signed certs (should be false in production) - 'verify_peer' => false, - 'verify_peer_name' => false, - 'security_level' => 0 - ]; - - foreach ($parameters as $key => $value) { - echo "Parameter [{$key}]: $value " . PHP_EOL; - } - - $loop = React\EventLoop\Factory::create(); -// Set up our WebSocket server for clients wanting real-time updates - $webSock = new React\Socket\Server($SocketDataObj->uri . ':' . $SocketDataObj->port, $loop); - $webSock = new React\Socket\SecureServer($webSock, $loop, $parameters); - $webServer = new Ratchet\Server\IoServer( - new HttpServer( - new WsServer( - new Message() - ) - ), - $webSock - ); -//$socket = new Reactor($webServer->loop); -//$socket->listen(8082, '0.0.0.0'); //Port 2 -//$socket->on('connection', [$webServer, 'handleConnect']); -//$webServer->run(); - $loop->run(); +serverVersion = YPTSocket::getServerVersion(); + +ob_end_flush(); +_mysql_close(); +session_write_close(); +exec('ulimit -n 20480'); // to handle over 1 k connections +$SocketDataObj->port = intval($SocketDataObj->port); +_error_log("Starting Socket server at port {$SocketDataObj->port}"); + +//killProcessOnPort(); +$scheme = parse_url($global['webSiteRootURL'], PHP_URL_SCHEME); +echo "Starting AVideo Socket server version {$SocketDataObj->serverVersion} on port {$SocketDataObj->port}" . PHP_EOL; + +if (strtolower($scheme) !== 'https' || !empty($SocketDataObj->forceNonSecure)) { + echo "Your socket server does NOT use a secure connection" . PHP_EOL; + $server = IoServer::factory( + new HttpServer( + new WsServer( + new Message() + ) + ), + $SocketDataObj->port + ); + + $server->run(); +} else { + if (!file_exists($SocketDataObj->server_crt_file) || !is_readable($SocketDataObj->server_crt_file)) { + echo "SSL ERROR, we could not access the CRT file {$SocketDataObj->server_crt_file}, try to run this command as root or use sudo " . PHP_EOL; + } + if (!file_exists($SocketDataObj->server_key_file) || !is_readable($SocketDataObj->server_key_file)) { + echo "SSL ERROR, we could not access the KEY file {$SocketDataObj->server_key_file}, try to run this command as root or use sudo " . PHP_EOL; + } + + echo "Your socket server uses a secure connection" . PHP_EOL; + $parameters = [ + 'local_cert' => $SocketDataObj->server_crt_file, + 'local_pk' => $SocketDataObj->server_key_file, + 'allow_self_signed' => $SocketDataObj->allow_self_signed, // Allow self signed certs (should be false in production) + 'verify_peer' => false, + 'verify_peer_name' => false, + 'security_level' => 0 + ]; + + foreach ($parameters as $key => $value) { + echo "Parameter [{$key}]: $value " . PHP_EOL; + } + + $loop = React\EventLoop\Loop::get(); + + $webSock = new React\Socket\Server($SocketDataObj->uri . ':' . $SocketDataObj->port, $loop); + $webSock = new React\Socket\SecureServer($webSock, $loop, $parameters); + $webServer = new Ratchet\Server\IoServer( + new HttpServer( + new WsServer( + new Message() + ) + ), + $webSock + ); + $loop->run(); } \ No newline at end of file diff --git a/plugin/YPTSocket/server2.php b/plugin/YPTSocket/server2.php new file mode 100644 index 000000000000..750214c67024 --- /dev/null +++ b/plugin/YPTSocket/server2.php @@ -0,0 +1,119 @@ +serverVersion = YPTSocket::getServerVersion(); + +ob_end_flush(); +_mysql_close(); +session_write_close(); +exec('ulimit -n 20480'); // to handle over 1 k connections +$SocketDataObj->port = intval($SocketDataObj->port); +_error_log("Starting Socket server at port {$SocketDataObj->port}"); +//killProcessOnPort(); +$scheme = parse_url($global['webSiteRootURL'], PHP_URL_SCHEME); +echo "Starting AVideo Socket server version {$SocketDataObj->serverVersion} on port {$SocketDataObj->port}" . PHP_EOL; + +if (strtolower($scheme) !== 'https' || !empty($SocketDataObj->forceNonSecure)) { + $context = array('tls' => array( + 'local_cert' => $global['systemRootPath'] . 'plugin/YPTSocket/localhost.pem', + 'allow_self_signed' => true, // Allow self signed certs (should be false in production) + 'verify_peer' => false, + 'verify_peer_name' => false, + 'security_level' => 0 + )); +} else { + $context = array('tls' => array( + 'local_cert' => $SocketDataObj->server_crt_file, + 'local_pk' => $SocketDataObj->server_key_file, + 'allow_self_signed' => $SocketDataObj->allow_self_signed, // Allow self signed certs (should be false in production) + 'verify_peer' => false, + 'verify_peer_name' => false, + 'security_level' => 0 + )); +} + +$message = new Message2(); + +$socket = new React\Socket\SocketServer($SocketDataObj->uri . ':' . $SocketDataObj->port, $context); + +$socket = new React\Socket\LimitingServer($socket, null); + +$socket->on('connection', function (React\Socket\ConnectionInterface $connection) use ($socket) { + echo '[' . $connection->getRemoteAddress() . ' connected] ' . PHP_EOL; + $connection->write('hello there!' . PHP_EOL); + // whenever a new message comes in + $connection->on('data', function ($data) use ($connection, $socket) { + // remove any non-word characters (just for the demo) + //$data = trim(preg_replace('/[^\w\d \.\,\-\!\?]/u', '', $data)); + + $parts = explode('?', $data); + + // ignore empty messages + if (empty($parts[1])) { + echo ("Empty parts " . json_encode($data)); + return; + } + + parse_str($parts[1], $wsocketGetVars); + foreach ($wsocketGetVars as $key => $value) { + $wsocketGetVars[$key] = urldecode($value); + } + if (empty($wsocketGetVars['webSocketToken'])) { + echo ("Empty websocket token " . json_encode($wsocketGetVars)); + return false; + } + $json = getDecryptedInfo($wsocketGetVars['webSocketToken']); + if (empty($json)) { + echo ("Invalid websocket token "); + return false; + } + echo 'websocket token [' . + json_encode($connection->getLocalAddress()) . + ', ' . + json_encode($connection->getRemoteAddress()) . ']' . PHP_EOL; + //echo ("websocket token ". json_encode($json)); + // prefix with client IP and broadcast to all connected clients + $data = trim(parse_url($connection->getRemoteAddress(), PHP_URL_HOST), '[]') . ': ' . $data . PHP_EOL; + foreach ($socket->getConnections() as $connection) { + $connection->write($data); + } + }); + + $connection->on('close', function () use ($connection) { + echo '[' . $connection->getRemoteAddress() . ' disconnected]' . PHP_EOL; + }); + + $connection->on('end', function () { + echo 'ended'. PHP_EOL; + }); + + $connection->on('error', function (Exception $e) { + echo 'error: ' . $e->getMessage(). PHP_EOL; + }); +}); + +$socket->on('error', function (Exception $e) { + echo 'Error: ' . $e->getMessage() . PHP_EOL; +}); + +echo 'Listening on ' . $socket->getAddress() . PHP_EOL; diff --git a/plugin/YPTSocket/userOnlineLabel.php b/plugin/YPTSocket/userOnlineLabel.php new file mode 100644 index 000000000000..9e64cd939a46 --- /dev/null +++ b/plugin/YPTSocket/userOnlineLabel.php @@ -0,0 +1,20 @@ +
+ + + show) { + ?> + + reason} -->"; + } + } + ?> +
\ No newline at end of file diff --git a/view/bootstrap/fixes.css b/view/bootstrap/fixes.css index 4cfff385d3e0..1726164fa665 100644 --- a/view/bootstrap/fixes.css +++ b/view/bootstrap/fixes.css @@ -1,1707 +1,1704 @@ -#mainNavBar { - display: block; -} -body { - padding-top: 0 !important; -} -.hidden { - display: none; -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} - -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-right: 15px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-lang-btn .select2-container { - margin: 0 !important; -} -.img-circle { - border-radius: 50%; -} - -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - background-image: none; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - background-image: none; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - background-image: none; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - background-image: none; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - background-image: none; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - background-image: none; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} - -#mysearch, #myNavbar, #lastItemOnMenu{ - padding-top: 4px; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} - - -.col-xs-1, -.col-sm-1, -.col-md-1, -.col-lg-1, -.col-xs-2, -.col-sm-2, -.col-md-2, -.col-lg-2, -.col-xs-3, -.col-sm-3, -.col-md-3, -.col-lg-3, -.col-xs-4, -.col-sm-4, -.col-md-4, -.col-lg-4, -.col-xs-5, -.col-sm-5, -.col-md-5, -.col-lg-5, -.col-xs-6, -.col-sm-6, -.col-md-6, -.col-lg-6, -.col-xs-7, -.col-sm-7, -.col-md-7, -.col-lg-7, -.col-xs-8, -.col-sm-8, -.col-md-8, -.col-lg-8, -.col-xs-9, -.col-sm-9, -.col-md-9, -.col-lg-9, -.col-xs-10, -.col-sm-10, -.col-md-10, -.col-lg-10, -.col-xs-11, -.col-sm-11, -.col-md-11, -.col-lg-11, -.col-xs-12, -.col-sm-12, -.col-md-12, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11, - .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11, - .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11, - .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} - - -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -#sideBarContainer > ul > li{ - width: 100%; -} - -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -#sideBarContainer > ul > li > ul{ - display: block; -} -#sideBarContainer .nav > li > a{ - position: relative; - display: block; - padding: 10px 15px; -} - -#sideBarContainer .nav > li > a:hover, -#sideBarContainer .nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -a { - text-decoration: none; - text-decoration-line: none; - text-decoration-thickness: initial; - text-decoration-style: initial; - text-decoration-color: initial; -} - -#sideBarContainer > ul > li > ul.dropdown-menu { - display: none; -} -#sideBarContainer > ul > li > ul.dropdown-menu a { - margin: 0 20px; +#mainNavBar { + display: block; +} +body { + padding-top: 0 !important; +} +.hidden { + display: none; +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} + +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-right: 15px; + margin-top: 8px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-lang-btn .select2-container { + margin: 0 !important; +} +.img-circle { + border-radius: 50%; +} + +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + background-image: none; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + background-image: none; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + background-image: none; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + background-image: none; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + background-image: none; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} + +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} + + +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0%; +} +@media (min-width: 768px) { + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 992px) { + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0%; + } +} +@media (min-width: 1200px) { + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0%; + } +} + + +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +#sideBarContainer > ul > li{ + width: 100%; +} + +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +#sideBarContainer > ul > li > ul{ + display: block; +} +#sideBarContainer .nav > li > a{ + position: relative; + display: block; + padding: 10px 15px; +} + +#sideBarContainer .nav > li > a:hover, +#sideBarContainer .nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +a { + text-decoration: none; + text-decoration-line: none; + text-decoration-thickness: initial; + text-decoration-style: initial; + text-decoration-color: initial; +} + +#sideBarContainer > ul > li > ul.dropdown-menu { + display: none; +} +#sideBarContainer > ul > li > ul.dropdown-menu a { + margin: 0 20px; } \ No newline at end of file diff --git a/view/channelBody.php b/view/channelBody.php index 51435a8332cc..fd0986089898 100644 --- a/view/channelBody.php +++ b/view/channelBody.php @@ -24,10 +24,10 @@ $rowCount = 25; $_REQUEST['rowCount'] = $rowCount; -if(empty($channelPassword) && !$isMyChannel){ +if (empty($channelPassword) && !$isMyChannel) { $status = 'a'; $showUnlisted = false; -}else{ +} else { $status = 'viewable'; $showUnlisted = true; } @@ -103,17 +103,17 @@
doNotShowTopBannerOnChannel)) { - if(isMobile()){ + if (isMobile()) { $relativePath = $user->getBackgroundURL(User::$channel_artDesktopMin); - }else{ + } else { $relativePath = $user->getBackgroundURL(User::$channel_artDesktopMax); } ?> -
-
+
+
<?php echo $user->_getName(); ?>
+ showChannelHomeTab) { - if (!empty($_GET['current'])) { // means you are paging the Videos tab - $active = ''; - } ?> + if ($advancedCustomUser->showChannelHomeTab) { + if (!empty($_GET['current'])) { // means you are paging the Videos tab + $active = ''; + } + ?> showChannelVideosTab) { - if (!empty($_GET['current'])) { // means you are paging the Videos tab - $active = "active"; - } ?> + } + if ($advancedCustomUser->showChannelVideosTab) { + if (!empty($_GET['current'])) { // means you are paging the Videos tab + $active = "active"; + } + ?> showChannelProgramsTab && !empty($palyListsObj)) { - $totalPrograms = PlayList::getAllFromUserLight($user_id, true, false, 0, true, true); - if ($totalPrograms) { - ?> + } + if ($advancedCustomUser->showChannelProgramsTab && !empty($palyListsObj)) { + $totalPrograms = PlayList::getAllFromUserLight($user_id, true, false, 0, true, true); + if ($totalPrograms) { + ?> + } + } + ?>
showChannelHomeTab) { - if (!empty($_GET['current'])) { // means you are paging the Videos tab - $active = ''; - } - $obj = AVideoPlugin::getObjectData("YouPHPFlix2"); ?> - + if ($advancedCustomUser->showChannelHomeTab) { + if (!empty($_GET['current'])) { // means you are paging the Videos tab + $active = ''; + } + $obj = AVideoPlugin::getObjectData("YouPHPFlix2"); + ?> +
BigVideo = true; - $obj->PlayList = false; - $obj->Channels = false; - $obj->Trending = false; - $obj->pageDots = false; - $obj->TrendingAutoPlay = false; - $obj->maxVideos = 12; - $obj->Suggested = false; - $obj->paidOnlyLabelOverPoster = false; - $obj->DateAdded = true; - $obj->DateAddedAutoPlay = true; - $obj->MostPopular = false; - $obj->MostWatched = false; - $obj->SortByName = false; - $obj->Categories = false; - $obj->playVideoOnFullscreen = false; - $obj->titleLabel = true; - $obj->RemoveBigVideoDescription = true; + $obj->PlayList = false; + $obj->Channels = false; + $obj->Trending = false; + $obj->pageDots = false; + $obj->TrendingAutoPlay = false; + $obj->maxVideos = 12; + $obj->Suggested = false; + $obj->paidOnlyLabelOverPoster = false; + $obj->DateAdded = true; + $obj->DateAddedAutoPlay = true; + $obj->MostPopular = false; + $obj->MostWatched = false; + $obj->SortByName = false; + $obj->Categories = false; + $obj->playVideoOnFullscreen = false; + $obj->titleLabel = true; + $obj->RemoveBigVideoDescription = true; - include $global['systemRootPath'] . 'plugin/YouPHPFlix2/view/modeFlixBody.php'; ?> + include $global['systemRootPath'] . 'plugin/YouPHPFlix2/view/modeFlixBody.php'; + ?>
showChannelVideosTab) { - if (!empty($_GET['current'])) { // means you are paging the Videos tab - $active = "active fade in"; - } ?> + } + if ($advancedCustomUser->showChannelVideosTab) { + if (!empty($_GET['current'])) { // means you are paging the Videos tab + $active = "active fade in"; + } + ?>
@@ -255,13 +266,14 @@ - + + echo AVideoPlugin::getChannelButton(); + ?>
Description = false; include $global['systemRootPath'] . 'plugin/Gallery/view/BigVideo.php'; unset($uploadedVideos[0]); - } ?> + } + ?>
+ createGallerySection($uploadedVideos, "", $get); + TimeLogEnd($timeLog, __LINE__); + ?>
+ } + if (!empty($totalPrograms)) { + ?>
@@ -301,12 +314,11 @@ name); ?> - +
- +
+ } + ?>
diff --git a/view/css/custom/cyborg.css b/view/css/custom/cyborg.css index befa65c3b544..b607bc22faf0 100644 --- a/view/css/custom/cyborg.css +++ b/view/css/custom/cyborg.css @@ -1,56 +1,60 @@ -@import url("https://fonts.googleapis.com/css?family=Roboto:400,700");/*! - * bootswatch v3.3.7 - * Homepage: http://bootswatch.com - * Copyright 2012-2017 Thomas Park - * Licensed under MIT - * Based on Bootstrap -*//*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#888888;background-color:#060606}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2a9fd6;text-decoration:none}a:hover,a:focus{color:#2a9fd6;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#282828;border:1px solid #282828;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #282828}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:#ffffff}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#888888}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:56px}h2,.h2{font-size:45px}h3,.h3{font-size:34px}h4,.h4{font-size:24px}h5,.h5{font-size:20px}h6,.h6{font-size:16px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#ff8800;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#888888}.text-primary{color:#2a9fd6}a.text-primary:hover,a.text-primary:focus{color:#2180ac}.text-success{color:#ffffff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-info{color:#ffffff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-warning{color:#ffffff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#ffffff}a.text-danger:hover,a.text-danger:focus{color:#e6e6e6}.bg-primary{color:#fff;background-color:#2a9fd6}a.bg-primary:hover,a.bg-primary:focus{background-color:#2180ac}.bg-success{background-color:#77b300}a.bg-success:hover,a.bg-success:focus{background-color:#558000}.bg-info{background-color:#9933cc}a.bg-info:hover,a.bg-info:focus{background-color:#7a29a3}.bg-warning{background-color:#ff8800}a.bg-warning:hover,a.bg-warning:focus{background-color:#cc6d00}.bg-danger{background-color:#cc0000}a.bg-danger:hover,a.bg-danger:focus{background-color:#990000}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #282828}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #888888}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #282828}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#555555}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #282828;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#282828;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:#181818}caption{padding-top:8px;padding-bottom:8px;color:#888888;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #282828}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #282828}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #282828}.table .table{background-color:#060606}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #282828}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #282828}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#080808}.table-hover>tbody>tr:hover{background-color:#282828}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#282828}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#1b1b1b}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#77b300}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#669a00}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#9933cc}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#8a2eb8}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#ff8800}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#e67a00}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#cc0000}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#b30000}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #282828}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#888888;border:0;border-bottom:1px solid #282828}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:14px;line-height:1.42857143;color:#888888}.form-control{display:block;width:100%;height:38px;padding:8px 12px;font-size:14px;line-height:1.42857143;color:#888888;background-color:#ffffff;background-image:none;border:1px solid #282828;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#888888;opacity:1}.form-control:-ms-input-placeholder{color:#888888}.form-control::-webkit-input-placeholder{color:#888888}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#adafae;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:38px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:54px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:9px;padding-bottom:9px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:54px;line-height:54px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:54px;line-height:54px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:47.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#ffffff}.has-success .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#77b300}.has-success .form-control-feedback{color:#ffffff}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffffff}.has-warning .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#ff8800}.has-warning .form-control-feedback{color:#ffffff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ffffff}.has-error .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#cc0000}.has-error .form-control-feedback{color:#ffffff}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#c8c8c8}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:9px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:9px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:8px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ffffff;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#ffffff;background-color:#424242;border-color:#424242}.btn-default:focus,.btn-default.focus{color:#ffffff;background-color:#282828;border-color:#020202}.btn-default:hover{color:#ffffff;background-color:#282828;border-color:#232323}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ffffff;background-color:#282828;border-color:#232323}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#ffffff;background-color:#161616;border-color:#020202}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#424242;border-color:#424242}.btn-default .badge{color:#424242;background-color:#ffffff}.btn-primary{color:#ffffff;background-color:#2a9fd6;border-color:#2a9fd6}.btn-primary:focus,.btn-primary.focus{color:#ffffff;background-color:#2180ac;border-color:#15506c}.btn-primary:hover{color:#ffffff;background-color:#2180ac;border-color:#1f79a3}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#2180ac;border-color:#1f79a3}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#ffffff;background-color:#1b698e;border-color:#15506c}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#2a9fd6;border-color:#2a9fd6}.btn-primary .badge{color:#2a9fd6;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#77b300;border-color:#77b300}.btn-success:focus,.btn-success.focus{color:#ffffff;background-color:#558000;border-color:#223300}.btn-success:hover{color:#ffffff;background-color:#558000;border-color:#4e7600}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#558000;border-color:#4e7600}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#ffffff;background-color:#3d5c00;border-color:#223300}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#77b300;border-color:#77b300}.btn-success .badge{color:#77b300;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#9933cc;border-color:#9933cc}.btn-info:focus,.btn-info.focus{color:#ffffff;background-color:#7a29a3;border-color:#4c1966}.btn-info:hover{color:#ffffff;background-color:#7a29a3;border-color:#74279b}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#7a29a3;border-color:#74279b}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#ffffff;background-color:#652287;border-color:#4c1966}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#9933cc;border-color:#9933cc}.btn-info .badge{color:#9933cc;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#ff8800;border-color:#ff8800}.btn-warning:focus,.btn-warning.focus{color:#ffffff;background-color:#cc6d00;border-color:#804400}.btn-warning:hover{color:#ffffff;background-color:#cc6d00;border-color:#c26700}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#cc6d00;border-color:#c26700}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#ffffff;background-color:#a85a00;border-color:#804400}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#ff8800;border-color:#ff8800}.btn-warning .badge{color:#ff8800;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#cc0000;border-color:#cc0000}.btn-danger:focus,.btn-danger.focus{color:#ffffff;background-color:#990000;border-color:#4d0000}.btn-danger:hover{color:#ffffff;background-color:#990000;border-color:#8f0000}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#990000;border-color:#8f0000}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#ffffff;background-color:#750000;border-color:#4d0000}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#cc0000;border-color:#cc0000}.btn-danger .badge{color:#cc0000;background-color:#ffffff}.btn-link{color:#2a9fd6;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a9fd6;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#888888;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;-o-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#222222;border:1px solid #444444;border:1px solid rgba(255,255,255,0.1);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:rgba(255,255,255,0.1)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#ffffff;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#ffffff;background-color:#2a9fd6}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#2a9fd6}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#888888}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#888888;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:54px;line-height:54px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:8px 12px;font-size:14px;font-weight:normal;line-height:1;color:#888888;text-align:center;background-color:#424242;border:1px solid #282828;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:14px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#222222}.nav>li.disabled>a{color:#888888}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#888888;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#222222;border-color:#2a9fd6}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #282828}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:transparent transparent #282828}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#ffffff;background-color:#2a9fd6;border:1px solid #282828;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #dddddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#060606}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#2a9fd6}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #dddddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#060606}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:6px;margin-bottom:6px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:6px;margin-bottom:6px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#060606;border-color:#282828}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-text{color:#888888}.navbar-default .navbar-nav>li>a{color:#888888}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#888888;background-color:transparent}.navbar-default .navbar-toggle{border-color:#282828}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#282828}.navbar-default .navbar-toggle .icon-bar{background-color:#cccccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#282828}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:transparent;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#888888}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#888888;background-color:transparent}}.navbar-default .navbar-link{color:#888888}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-default .btn-link{color:#888888}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#ffffff}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#888888}.navbar-inverse{background-color:#222222;border-color:#080808}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-text{color:#888888}.navbar-inverse .navbar-nav>li>a{color:#888888}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#aaaaaa;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:transparent;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#888888}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#aaaaaa;background-color:transparent}}.navbar-inverse .navbar-link{color:#888888}.navbar-inverse .navbar-link:hover{color:#ffffff}.navbar-inverse .btn-link{color:#888888}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#ffffff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#aaaaaa}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#222222;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ffffff}.breadcrumb>.active{color:#888888}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;line-height:1.42857143;text-decoration:none;color:#ffffff;background-color:#222222;border:1px solid #282828;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#ffffff;background-color:#2a9fd6;border-color:transparent}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#ffffff;background-color:#2a9fd6;border-color:transparent;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#888888;background-color:#222222;border-color:#282828;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#222222;border:1px solid #282828;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#2a9fd6}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#888888;background-color:#222222;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#424242}.label-default[href]:hover,.label-default[href]:focus{background-color:#282828}.label-primary{background-color:#2a9fd6}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#2180ac}.label-success{background-color:#77b300}.label-success[href]:hover,.label-success[href]:focus{background-color:#558000}.label-info{background-color:#9933cc}.label-info[href]:hover,.label-info[href]:focus{background-color:#7a29a3}.label-warning{background-color:#ff8800}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#cc6d00}.label-danger{background-color:#cc0000}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#990000}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#ffffff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#2a9fd6;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2a9fd6;background-color:#ffffff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#151515}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#000000}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#282828;border:1px solid #282828;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#2a9fd6}.thumbnail .caption{padding:9px;color:#888888}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#77b300;border-color:#809a00;color:#ffffff}.alert-success hr{border-top-color:#6a8000}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#9933cc;border-color:#6e2caf;color:#ffffff}.alert-info hr{border-top-color:#61279b}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#ff8800;border-color:#f05800;color:#ffffff}.alert-warning hr{border-top-color:#d64f00}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#cc0000;border-color:#bd001f;color:#ffffff}.alert-danger hr{border-top-color:#a3001b}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#222222;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#ffffff;text-align:center;background-color:#2a9fd6;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#77b300}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#9933cc}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff8800}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#cc0000}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#222222;border:1px solid #282828}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#888888}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#ffffff}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#888888;background-color:#484848}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#adafae;color:#888888;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#888888}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#2a9fd6;border-color:#2a9fd6}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#d5ecf7}.list-group-item-success{color:#ffffff;background-color:#77b300}a.list-group-item-success,button.list-group-item-success{color:#ffffff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#ffffff;background-color:#669a00}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-info{color:#ffffff;background-color:#9933cc}a.list-group-item-info,button.list-group-item-info{color:#ffffff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#ffffff;background-color:#8a2eb8}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-warning{color:#ffffff;background-color:#ff8800}a.list-group-item-warning,button.list-group-item-warning{color:#ffffff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#ffffff;background-color:#e67a00}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-danger{color:#ffffff;background-color:#cc0000}a.list-group-item-danger,button.list-group-item-danger{color:#ffffff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#ffffff;background-color:#b30000}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#222222;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#3c3c3c;border-top:1px solid #282828;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #282828}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #282828}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #282828}.panel-default{border-color:#282828}.panel-default>.panel-heading{color:#888888;background-color:#3c3c3c;border-color:#282828}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#282828}.panel-default>.panel-heading .badge{color:#3c3c3c;background-color:#888888}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#282828}.panel-primary{border-color:#2a9fd6}.panel-primary>.panel-heading{color:#ffffff;background-color:#2a9fd6;border-color:#2a9fd6}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2a9fd6}.panel-primary>.panel-heading .badge{color:#2a9fd6;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2a9fd6}.panel-success{border-color:#809a00}.panel-success>.panel-heading{color:#ffffff;background-color:#77b300;border-color:#809a00}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#809a00}.panel-success>.panel-heading .badge{color:#77b300;background-color:#ffffff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#809a00}.panel-info{border-color:#6e2caf}.panel-info>.panel-heading{color:#ffffff;background-color:#9933cc;border-color:#6e2caf}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6e2caf}.panel-info>.panel-heading .badge{color:#9933cc;background-color:#ffffff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6e2caf}.panel-warning{border-color:#f05800}.panel-warning>.panel-heading{color:#ffffff;background-color:#ff8800;border-color:#f05800}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f05800}.panel-warning>.panel-heading .badge{color:#ff8800;background-color:#ffffff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f05800}.panel-danger{border-color:#bd001f}.panel-danger>.panel-heading{color:#ffffff;background-color:#cc0000;border-color:#bd001f}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bd001f}.panel-danger>.panel-heading .badge{color:#cc0000;background-color:#ffffff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bd001f}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#151515;border:1px solid #030303;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#202020;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #282828}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #282828}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;background-color:#2c2c2c;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#2c2c2c}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#2c2c2c}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#2c2c2c}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#2c2c2c}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#2c2c2c}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#2c2c2c}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#2c2c2c}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#2c2c2c}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#2c2c2c;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #2c2c2c;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#252525;border-bottom:1px solid #181818;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#2c2c2c;border-top-color:rgba(0,0,0,0.2);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#2c2c2c}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#2c2c2c;border-right-color:rgba(0,0,0,0.2)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#2c2c2c}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#2c2c2c;border-bottom-color:rgba(0,0,0,0.2);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#2c2c2c}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#2c2c2c;border-left-color:rgba(0,0,0,0.2)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#2c2c2c;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.text-primary,.text-primary:hover{color:#2a9fd6}.text-success,.text-success:hover{color:#77b300}.text-danger,.text-danger:hover{color:#cc0000}.text-warning,.text-warning:hover{color:#ff8800}.text-info,.text-info:hover{color:#9933cc}.bg-success,.bg-info,.bg-warning,.bg-danger{color:#fff}table,.table{color:#fff}table a:not(.btn),.table a:not(.btn){color:#fff;text-decoration:underline}table .dropdown-menu a,.table .dropdown-menu a{text-decoration:none}table .text-muted,.table .text-muted{color:#888888}.table-responsive>.table{background-color:#181818}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .form-control-feedback{color:#ff8800}.has-warning .form-control,.has-warning .form-control:focus,.has-warning .input-group-addon{border-color:#ff8800}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label,.has-error .form-control-feedback{color:#cc0000}.has-error .form-control,.has-error .form-control:focus,.has-error .input-group-addon{border-color:#cc0000}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .form-control-feedback{color:#77b300}.has-success .form-control,.has-success .form-control:focus,.has-success .input-group-addon{border-color:#77b300}legend{color:#fff}.nav-tabs a,.nav-pills a,.breadcrumb a,.pager a{color:#fff}.alert .alert-link,.alert a{color:#ffffff;text-decoration:underline}.alert .close{text-decoration:none}.close{color:#fff;text-decoration:none;opacity:0.4}.close:hover,.close:focus{color:#fff;opacity:1}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#282828}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:#282828}a.list-group-item-success.active{background-color:#77b300}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#669a00}a.list-group-item-warning.active{background-color:#ff8800}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#e67a00}a.list-group-item-danger.active{background-color:#cc0000}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#b30000}.jumbotron h1,.jumbotron h2,.jumbotron h3,.jumbotron h4,.jumbotron h5,.jumbotron h6{color:#fff} - input, optgroup, select, textarea{ - color: #888; - } - -::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb{-webkit-box-shadow: inset 0 0 6px rgba(255,255,255,255.3) !important;} - -.form-control, .bootgrid-table td.loading, .bootgrid-table td.no-results { - color: #EEE; - background-color: #555; - -} - -.webui-popover, .select2-container--default .select2-results__option--selected { - background-color: #333 !important; -} -::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb{-webkit-box-shadow: inset 0 0 6px rgba(255,255,255,255.3) !important;} - -th a, .select2-container--default span, .swal-text, -.nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover, -.tabbable-line > .nav-tabs > li.active > a > i, -.swal-title { - color: #FFF !important; -} -th:hover, .select2-dropdown{ - background-color: #111 !important; -} -.swal-modal{ - background-color: #2e3338; -} -#socket_info_container .socketItem, #socket_info_container{ - background-color: rgba(0,0,0,0.5) !important; -} -#socket_info_container div { - text-shadow: 0 0 2px #000 !important; - color: #AAA !important; -} -.swal-icon, .swal-icon:before, .swal-icon:after, .swal-icon--success__hide-corners{ - background-color: #2e3338; -} -.swal-icon--info:after, .swal-icon--info:before{ - background-color: #c9dae1; -} -.btn-default.no-outline:hover{ - color: #AAA !important; +@import url("https://fonts.googleapis.com/css?family=Roboto:400,700");/*! + * bootswatch v3.3.7 + * Homepage: http://bootswatch.com + * Copyright 2012-2017 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*//*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#888888;background-color:#060606}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2a9fd6;text-decoration:none}a:hover,a:focus{color:#2a9fd6;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#282828;border:1px solid #282828;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #282828}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1;color:#ffffff}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#888888}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:56px}h2,.h2{font-size:45px}h3,.h3{font-size:34px}h4,.h4{font-size:24px}h5,.h5{font-size:20px}h6,.h6{font-size:16px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#ff8800;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#888888}.text-primary{color:#2a9fd6}a.text-primary:hover,a.text-primary:focus{color:#2180ac}.text-success{color:#ffffff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-info{color:#ffffff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-warning{color:#ffffff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#ffffff}a.text-danger:hover,a.text-danger:focus{color:#e6e6e6}.bg-primary{color:#fff;background-color:#2a9fd6}a.bg-primary:hover,a.bg-primary:focus{background-color:#2180ac}.bg-success{background-color:#77b300}a.bg-success:hover,a.bg-success:focus{background-color:#558000}.bg-info{background-color:#9933cc}a.bg-info:hover,a.bg-info:focus{background-color:#7a29a3}.bg-warning{background-color:#ff8800}a.bg-warning:hover,a.bg-warning:focus{background-color:#cc6d00}.bg-danger{background-color:#cc0000}a.bg-danger:hover,a.bg-danger:focus{background-color:#990000}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #282828}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #888888}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #282828}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#555555}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #282828;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#282828;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:#181818}caption{padding-top:8px;padding-bottom:8px;color:#888888;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #282828}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #282828}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #282828}.table .table{background-color:#060606}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #282828}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #282828}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#080808}.table-hover>tbody>tr:hover{background-color:#282828}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#282828}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#1b1b1b}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#77b300}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#669a00}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#9933cc}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#8a2eb8}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#ff8800}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#e67a00}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#cc0000}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#b30000}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #282828}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#888888;border:0;border-bottom:1px solid #282828}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:14px;line-height:1.42857143;color:#888888}.form-control{display:block;width:100%;height:38px;padding:8px 12px;font-size:14px;line-height:1.42857143;color:#888888;background-color:#ffffff;background-image:none;border:1px solid #282828;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#888888;opacity:1}.form-control:-ms-input-placeholder{color:#888888}.form-control::-webkit-input-placeholder{color:#888888}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#adafae;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:38px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:54px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:9px;padding-bottom:9px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:54px;line-height:54px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:54px;line-height:54px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:47.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#ffffff}.has-success .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#77b300}.has-success .form-control-feedback{color:#ffffff}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffffff}.has-warning .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#ff8800}.has-warning .form-control-feedback{color:#ffffff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ffffff}.has-error .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#cc0000}.has-error .form-control-feedback{color:#ffffff}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#c8c8c8}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:9px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:9px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:8px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ffffff;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#ffffff;background-color:#424242;border-color:#424242}.btn-default:focus,.btn-default.focus{color:#ffffff;background-color:#282828;border-color:#020202}.btn-default:hover{color:#ffffff;background-color:#282828;border-color:#232323}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ffffff;background-color:#282828;border-color:#232323}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#ffffff;background-color:#161616;border-color:#020202}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#424242;border-color:#424242}.btn-default .badge{color:#424242;background-color:#ffffff}.btn-primary{color:#ffffff;background-color:#2a9fd6;border-color:#2a9fd6}.btn-primary:focus,.btn-primary.focus{color:#ffffff;background-color:#2180ac;border-color:#15506c}.btn-primary:hover{color:#ffffff;background-color:#2180ac;border-color:#1f79a3}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#2180ac;border-color:#1f79a3}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#ffffff;background-color:#1b698e;border-color:#15506c}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#2a9fd6;border-color:#2a9fd6}.btn-primary .badge{color:#2a9fd6;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#77b300;border-color:#77b300}.btn-success:focus,.btn-success.focus{color:#ffffff;background-color:#558000;border-color:#223300}.btn-success:hover{color:#ffffff;background-color:#558000;border-color:#4e7600}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#558000;border-color:#4e7600}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#ffffff;background-color:#3d5c00;border-color:#223300}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#77b300;border-color:#77b300}.btn-success .badge{color:#77b300;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#9933cc;border-color:#9933cc}.btn-info:focus,.btn-info.focus{color:#ffffff;background-color:#7a29a3;border-color:#4c1966}.btn-info:hover{color:#ffffff;background-color:#7a29a3;border-color:#74279b}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#7a29a3;border-color:#74279b}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#ffffff;background-color:#652287;border-color:#4c1966}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#9933cc;border-color:#9933cc}.btn-info .badge{color:#9933cc;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#ff8800;border-color:#ff8800}.btn-warning:focus,.btn-warning.focus{color:#ffffff;background-color:#cc6d00;border-color:#804400}.btn-warning:hover{color:#ffffff;background-color:#cc6d00;border-color:#c26700}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#cc6d00;border-color:#c26700}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#ffffff;background-color:#a85a00;border-color:#804400}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#ff8800;border-color:#ff8800}.btn-warning .badge{color:#ff8800;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#cc0000;border-color:#cc0000}.btn-danger:focus,.btn-danger.focus{color:#ffffff;background-color:#990000;border-color:#4d0000}.btn-danger:hover{color:#ffffff;background-color:#990000;border-color:#8f0000}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#990000;border-color:#8f0000}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#ffffff;background-color:#750000;border-color:#4d0000}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#cc0000;border-color:#cc0000}.btn-danger .badge{color:#cc0000;background-color:#ffffff}.btn-link{color:#2a9fd6;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a9fd6;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#888888;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;-o-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#222222;border:1px solid #444444;border:1px solid rgba(255,255,255,0.1);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:rgba(255,255,255,0.1)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#ffffff;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#ffffff;background-color:#2a9fd6}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#2a9fd6}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#888888}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#888888;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:54px;line-height:54px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:8px 12px;font-size:14px;font-weight:normal;line-height:1;color:#888888;text-align:center;background-color:#424242;border:1px solid #282828;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:14px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#222222}.nav>li.disabled>a{color:#888888}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#888888;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#222222;border-color:#2a9fd6}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #282828}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:transparent transparent #282828}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#ffffff;background-color:#2a9fd6;border:1px solid #282828;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #dddddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#060606}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#2a9fd6}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #dddddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#060606}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:6px;margin-bottom:6px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:6px;margin-bottom:6px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#060606;border-color:#282828}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-text{color:#888888}.navbar-default .navbar-nav>li>a{color:#888888}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#888888;background-color:transparent}.navbar-default .navbar-toggle{border-color:#282828}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#282828}.navbar-default .navbar-toggle .icon-bar{background-color:#cccccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#282828}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:transparent;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#888888}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#888888;background-color:transparent}}.navbar-default .navbar-link{color:#888888}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-default .btn-link{color:#888888}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#ffffff}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#888888}.navbar-inverse{background-color:#222222;border-color:#080808}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-text{color:#888888}.navbar-inverse .navbar-nav>li>a{color:#888888}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#aaaaaa;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:transparent;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#888888}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#aaaaaa;background-color:transparent}}.navbar-inverse .navbar-link{color:#888888}.navbar-inverse .navbar-link:hover{color:#ffffff}.navbar-inverse .btn-link{color:#888888}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#ffffff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#aaaaaa}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#222222;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ffffff}.breadcrumb>.active{color:#888888}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;line-height:1.42857143;text-decoration:none;color:#ffffff;background-color:#222222;border:1px solid #282828;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#ffffff;background-color:#2a9fd6;border-color:transparent}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#ffffff;background-color:#2a9fd6;border-color:transparent;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#888888;background-color:#222222;border-color:#282828;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#222222;border:1px solid #282828;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#2a9fd6}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#888888;background-color:#222222;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#424242}.label-default[href]:hover,.label-default[href]:focus{background-color:#282828}.label-primary{background-color:#2a9fd6}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#2180ac}.label-success{background-color:#77b300}.label-success[href]:hover,.label-success[href]:focus{background-color:#558000}.label-info{background-color:#9933cc}.label-info[href]:hover,.label-info[href]:focus{background-color:#7a29a3}.label-warning{background-color:#ff8800}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#cc6d00}.label-danger{background-color:#cc0000}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#990000}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#ffffff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#2a9fd6;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2a9fd6;background-color:#ffffff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#151515}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#000000}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#282828;border:1px solid #282828;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#2a9fd6}.thumbnail .caption{padding:9px;color:#888888}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#77b300;border-color:#809a00;color:#ffffff}.alert-success hr{border-top-color:#6a8000}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#9933cc;border-color:#6e2caf;color:#ffffff}.alert-info hr{border-top-color:#61279b}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#ff8800;border-color:#f05800;color:#ffffff}.alert-warning hr{border-top-color:#d64f00}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#cc0000;border-color:#bd001f;color:#ffffff}.alert-danger hr{border-top-color:#a3001b}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#222222;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#ffffff;text-align:center;background-color:#2a9fd6;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#77b300}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#9933cc}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ff8800}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#cc0000}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#222222;border:1px solid #282828}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#888888}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#ffffff}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#888888;background-color:#484848}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#adafae;color:#888888;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#888888}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#2a9fd6;border-color:#2a9fd6}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#d5ecf7}.list-group-item-success{color:#ffffff;background-color:#77b300}a.list-group-item-success,button.list-group-item-success{color:#ffffff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#ffffff;background-color:#669a00}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-info{color:#ffffff;background-color:#9933cc}a.list-group-item-info,button.list-group-item-info{color:#ffffff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#ffffff;background-color:#8a2eb8}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-warning{color:#ffffff;background-color:#ff8800}a.list-group-item-warning,button.list-group-item-warning{color:#ffffff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#ffffff;background-color:#e67a00}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-danger{color:#ffffff;background-color:#cc0000}a.list-group-item-danger,button.list-group-item-danger{color:#ffffff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#ffffff;background-color:#b30000}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#222222;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#3c3c3c;border-top:1px solid #282828;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #282828}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #282828}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #282828}.panel-default{border-color:#282828}.panel-default>.panel-heading{color:#888888;background-color:#3c3c3c;border-color:#282828}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#282828}.panel-default>.panel-heading .badge{color:#3c3c3c;background-color:#888888}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#282828}.panel-primary{border-color:#2a9fd6}.panel-primary>.panel-heading{color:#ffffff;background-color:#2a9fd6;border-color:#2a9fd6}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#2a9fd6}.panel-primary>.panel-heading .badge{color:#2a9fd6;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#2a9fd6}.panel-success{border-color:#809a00}.panel-success>.panel-heading{color:#ffffff;background-color:#77b300;border-color:#809a00}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#809a00}.panel-success>.panel-heading .badge{color:#77b300;background-color:#ffffff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#809a00}.panel-info{border-color:#6e2caf}.panel-info>.panel-heading{color:#ffffff;background-color:#9933cc;border-color:#6e2caf}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#6e2caf}.panel-info>.panel-heading .badge{color:#9933cc;background-color:#ffffff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#6e2caf}.panel-warning{border-color:#f05800}.panel-warning>.panel-heading{color:#ffffff;background-color:#ff8800;border-color:#f05800}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f05800}.panel-warning>.panel-heading .badge{color:#ff8800;background-color:#ffffff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f05800}.panel-danger{border-color:#bd001f}.panel-danger>.panel-heading{color:#ffffff;background-color:#cc0000;border-color:#bd001f}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bd001f}.panel-danger>.panel-heading .badge{color:#cc0000;background-color:#ffffff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bd001f}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#151515;border:1px solid #030303;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#202020;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #282828}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #282828}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;background-color:#2c2c2c;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#2c2c2c}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#2c2c2c}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#2c2c2c}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#2c2c2c}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#2c2c2c}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#2c2c2c}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#2c2c2c}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#2c2c2c}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#2c2c2c;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #2c2c2c;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#252525;border-bottom:1px solid #181818;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#2c2c2c;border-top-color:rgba(0,0,0,0.2);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#2c2c2c}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#2c2c2c;border-right-color:rgba(0,0,0,0.2)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#2c2c2c}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#2c2c2c;border-bottom-color:rgba(0,0,0,0.2);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#2c2c2c}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#2c2c2c;border-left-color:rgba(0,0,0,0.2)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#2c2c2c;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.text-primary,.text-primary:hover{color:#2a9fd6}.text-success,.text-success:hover{color:#77b300}.text-danger,.text-danger:hover{color:#cc0000}.text-warning,.text-warning:hover{color:#ff8800}.text-info,.text-info:hover{color:#9933cc}.bg-success,.bg-info,.bg-warning,.bg-danger{color:#fff}table,.table{color:#fff}table a:not(.btn),.table a:not(.btn){color:#fff;text-decoration:underline}table .dropdown-menu a,.table .dropdown-menu a{text-decoration:none}table .text-muted,.table .text-muted{color:#888888}.table-responsive>.table{background-color:#181818}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .form-control-feedback{color:#ff8800}.has-warning .form-control,.has-warning .form-control:focus,.has-warning .input-group-addon{border-color:#ff8800}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label,.has-error .form-control-feedback{color:#cc0000}.has-error .form-control,.has-error .form-control:focus,.has-error .input-group-addon{border-color:#cc0000}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .form-control-feedback{color:#77b300}.has-success .form-control,.has-success .form-control:focus,.has-success .input-group-addon{border-color:#77b300}legend{color:#fff}.nav-tabs a,.nav-pills a,.breadcrumb a,.pager a{color:#fff}.alert .alert-link,.alert a{color:#ffffff;text-decoration:underline}.alert .close{text-decoration:none}.close{color:#fff;text-decoration:none;opacity:0.4}.close:hover,.close:focus{color:#fff;opacity:1}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#282828}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:#282828}a.list-group-item-success.active{background-color:#77b300}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#669a00}a.list-group-item-warning.active{background-color:#ff8800}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#e67a00}a.list-group-item-danger.active{background-color:#cc0000}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#b30000}.jumbotron h1,.jumbotron h2,.jumbotron h3,.jumbotron h4,.jumbotron h5,.jumbotron h6{color:#fff} + input, optgroup, select, textarea{ + color: #888; + } + +::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb{-webkit-box-shadow: inset 0 0 6px rgba(255,255,255,255.3) !important;} + +.form-control, .bootgrid-table td.loading, .bootgrid-table td.no-results { + color: #EEE; + background-color: #555; + +} + +.webui-popover, .select2-container--default .select2-results__option--selected { + background-color: #333 !important; +} +::-webkit-scrollbar-track, ::-webkit-scrollbar-thumb{-webkit-box-shadow: inset 0 0 6px rgba(255,255,255,255.3) !important;} + +th a, .select2-container--default span, .swal-text, +.nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover, +.tabbable-line > .nav-tabs > li.active > a > i, +.swal-title { + color: #FFF !important; +} +th:hover, .select2-dropdown{ + background-color: #111 !important; +} +.swal-modal{ + background-color: #2e3338; +} +#socket_info_container .socketItem, #socket_info_container{ + background-color: rgba(0,0,0,0.5) !important; +} +#socket_info_container div { + text-shadow: 0 0 2px #000 !important; + color: #AAA !important; +} +.swal-icon, .swal-icon:before, .swal-icon:after, .swal-icon--success__hide-corners{ + background-color: #2e3338; +} +.swal-icon--info:after, .swal-icon--info:before{ + background-color: #c9dae1; +} +.btn-default.no-outline:hover{ + color: #AAA !important; +} + +.gallery .title, .videosDetails .title { + max-height: 40px !important; } \ No newline at end of file diff --git a/view/css/main.css b/view/css/main.css index e59263f81bb2..4cbbb879e92b 100644 --- a/view/css/main.css +++ b/view/css/main.css @@ -582,9 +582,6 @@ nav ul.items-container li:first-child ul.left-side { ul.left-side { height: 50px; } -nav ul.items-container li:last-child { - margin-right: 20px; -} nav ul.items-container li ul.right-menus { display: flex; flex-direction: row; @@ -741,9 +738,6 @@ img.blur{ .rightProfile li a{ text-align: left; } -#mainNavBar ul.items-container li:last-child { - margin-right: 0 !important; -} .ima-controls-div{ pointer-events: none !important; @@ -1032,6 +1026,7 @@ li.dropdown-submenu > ul > li > a{ height: calc(100% - 150px); } .swal-modal.swal-modal-iframe .swal-content, +.swal-modal.swal-modal-iframe-xsmall .swal-content, .swal-modal.swal-modal-iframe-small .swal-content, .swal-modal.swal-modal-iframe-large .swal-content, .swal-modal.swal-modal-iframe-full .swal-content{ @@ -1039,6 +1034,7 @@ li.dropdown-submenu > ul > li > a{ height: 100%; } .swal-modal.swal-modal-iframe iframe, +.swal-modal.swal-modal-iframe-xsmall iframe, .swal-modal.swal-modal-iframe-small iframe, .swal-modal.swal-modal-iframe-large iframe, .swal-modal.swal-modal-iframe-full iframe{ @@ -1058,6 +1054,13 @@ li.dropdown-submenu > ul > li > a{ max-height: 100%; } +.swal-modal-iframe-xsmall { + width: 640px; + height: 480px; + max-width: 100%; + max-height: 100%; +} + .swal-modal-iframe-large { width: calc(100% - 50px); height: calc(100% - 50px); @@ -1112,6 +1115,9 @@ li.dropdown-submenu > ul > li > a{ #avideoModalIframeDiv{ padding-inline-start: 5px; } + button.hamburger{ + display: flex !important; + } } @@ -1256,4 +1262,188 @@ a:hover{ width: 100%; height: 100%; z-index: 1; +} + +/* hamburger menu styles*/ +button.hamburger{ + outline: none !important; + display: flex; + margin: 0 5px; + padding: 0 4px; +} +button.btn-sm.hamburger{ + margin: -2px 5px; + padding: 0; +} +button.btn-sm.hamburger svg{ + width: 24px; +} +.ham { + cursor: pointer; + -webkit-tap-highlight-color: transparent; + transition: transform 400ms; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.hamRotate.active { + transform: rotate(45deg); +} +.hamRotate180.active { + transform: rotate(180deg); +} +.line { + fill:none; + transition: stroke-dasharray 400ms, stroke-dashoffset 400ms; + stroke:#000; + stroke-width:5.5; + stroke-linecap:round; +} +.ham1 .top { + stroke-dasharray: 40 139; +} +.ham1 .bottom { + stroke-dasharray: 40 180; +} +.ham1.active .top { + stroke-dashoffset: -98px; +} +.ham1.active .bottom { + stroke-dashoffset: -138px; +} +.ham2 .top { + stroke-dasharray: 40 121; +} +.ham2 .bottom { + stroke-dasharray: 40 121; +} +.ham2.active .top { + stroke-dashoffset: -102px; +} +.ham2.active .bottom { + stroke-dashoffset: -102px; +} +.ham3 .top { + stroke-dasharray: 40 130; +} +.ham3 .middle { + stroke-dasharray: 40 140; +} +.ham3 .bottom { + stroke-dasharray: 40 205; +} +.ham3.active .top { + stroke-dasharray: 75 130; + stroke-dashoffset: -63px; +} +.ham3.active .middle { + stroke-dashoffset: -102px; +} +.ham3.active .bottom { + stroke-dasharray: 110 205; + stroke-dashoffset: -86px; +} +.ham4 .top { + stroke-dasharray: 40 121; +} +.ham4 .bottom { + stroke-dasharray: 40 121; +} +.ham4.active .top { + stroke-dashoffset: -68px; +} +.ham4.active .bottom { + stroke-dashoffset: -68px; +} +.ham5 .top { + stroke-dasharray: 40 82; +} +.ham5 .bottom { + stroke-dasharray: 40 82; +} +.ham5.active .top { + stroke-dasharray: 14 82; + stroke-dashoffset: -72px; +} +.ham5.active .bottom { + stroke-dasharray: 14 82; + stroke-dashoffset: -72px; +} +.ham6 .top { + stroke-dasharray: 40 172; +} +.ham6 .middle { + stroke-dasharray: 40 111; +} +.ham6 .bottom { + stroke-dasharray: 40 172; +} +.ham6.active .top { + stroke-dashoffset: -132px; +} +.ham6.active .middle { + stroke-dashoffset: -71px; +} +.ham6.active .bottom { + stroke-dashoffset: -132px; +} +.ham7 .top { + stroke-dasharray: 40 82; +} +.ham7 .middle { + stroke-dasharray: 40 111; +} +.ham7 .bottom { + stroke-dasharray: 40 161; +} +.ham7.active .top { + stroke-dasharray: 17 82; + stroke-dashoffset: -62px; +} +.ham7.active .middle { + stroke-dashoffset: 23px; +} +.ham7.active .bottom { + stroke-dashoffset: -83px; +} +.ham8 .top { + stroke-dasharray: 40 160; +} +.ham8 .middle { + stroke-dasharray: 40 142; + transform-origin: 50%; + transition: transform 400ms; +} +.ham8 .bottom { + stroke-dasharray: 40 85; + transform-origin: 50%; + transition: transform 400ms, stroke-dashoffset 400ms; +} +.ham8.active .top { + stroke-dashoffset: -64px; +} +.ham8.active .middle { + transform: rotate(90deg); +} +.ham8.active .bottom { + stroke-dashoffset: -64px; +} +.users_id_online_label .label{ + padding: 5px; + border-radius: 5px !important; +} +.users_id_online_label .label-success, +.users_id_online_label .callerButton{ + display: none; +} +.users_id_online_label .label-success:hover{ + animation: glowBox 1s infinite alternate; +} +.users_id_online_label.online .label-success, +.users_id_online_label.online .callerButton{ + display: inline; +} +.users_id_online_label.online .label-danger{ + display: none; } \ No newline at end of file diff --git a/view/css/navbar.css b/view/css/navbar.css new file mode 100644 index 000000000000..90c1a47ee0c7 --- /dev/null +++ b/view/css/navbar.css @@ -0,0 +1,215 @@ +/* if it is IE */ +@media all and (-ms-high-contrast:none){ + nav ul.items-container li:first-child { + display: block; + flex: 0 1 auto; /* Default */ + } +} + +#buttonMyNavbar{ + display: none; +} + +#mysearch.in, +#mysearch.collapsing { + display: block!important; +} +#myNavbar{ + display: block; +} +#myNavbar.in, +#myNavbar.collapsing { + display: block!important; +} +#searchForm { + width: 100%; + margin-left: 5px; + white-space: nowrap; +} +#searchForm .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left-width: 0; +} +#searchForm input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right-width: 0; +} + +#rightProfileButton{ + padding: 0; + margin: 5px; + border: 0; + background: none; + background-color: transparent; +} + +#rightLoginButton{ + margin-left: 5px; + margin-right: 40px; +} + +#navbarRegularButtons{ + max-width: 70%; + /* remove the scroll because the dropsown menus does not work */ + /*overflow-x: auto;*/ + /*overflow-y: hidden;*/ +} + +#navbarRegularButtons span.hidden-mdx{ + max-width: 15vw; + display: inline-block; +} + +#navbarRegularButtons .btn{ + overflow: hidden; +} + +#navbarRegularButtons::-webkit-scrollbar { + height: 4px; +} +#lastItemOnMenu{ + padding-right: 40px; +} +#mysearch{ + height: auto !important; +} +#searchNavItem, #lastItemOnMenu{ + display: flex; + justify-content: center; + align-items: center; +} +#lastItemOnMenu ul{ + padding: 0; +} + +@media (max-width : 992px) { + #searchForm input{ + width: 100px; + } +} +@media (max-width : 767px) { + #searchForm { + padding-left: 10px; + } + #rightLoginButton, #rightProfileButton{ + margin-right: 5px; + margin-left: 0; + } + + #searchForm > div{ + width: 100%; + } + + .mobilesecondnav { + position: absolute; + left: 40%; + right: 5px; + } + + #buttonMyNavbar, #searchNavItem{ + display: block; + } + + #mysearch{ + /* width: 100%; */ + display: none; + position: absolute; + right: 0; + left: 0; + padding-left: 0px; + padding-right: 0px; + background-color: #FFF; + + } + + #myNavbar{ + display: none; + position: absolute; + right: 0; + top: 50px; + background-color: #FFF; + padding: 4px; + width: 50%; + } + #mainNavBar .navbar-brand{ + width: 100% !important; + text-align: center; + } + #mainNavBar .navbar-brand>img { + display: unset; + } + + #myNavbar ul.right-menus{ + display: block; + } + + #myNavbar ul.right-menus li{ + margin: 0; + padding: 0; + } + #myNavbar ul.right-menus .btn, #myNavbar ul.right-menus .btn-group{ + margin: 2px; + width: 100%; + } + #myNavbar ul.right-menus .btn-group{ + margin: 0; + } + nav ul.items-container li:first-child { + display: list-item; + } + #navbarRegularButtons span.hidden-mdx { + max-width: 100vw; + } + .globalsearchfield { + width: 90% !important; + } + + .searchli { + width: 100%; + margin-right: 0; + margin-left: 0; + + } + .searchdiv { + + } + .navbar-toggle { + margin-right: 5px !important; + + + } + #navbarRegularButtons, #lastItemOnMenu, .left-side { + padding: 0 5px; + } + .searchul{ + padding-left: 0px; + } +} + +li.navsub-toggle .badge { + float: right; +} +li.navsub-toggle a + ul { + padding-left: 15px; +} + +.navbar-lang-btn .select2-container{ + margin: 8px 0; +} +.navbar-lang-btn .select2-selection{ + border-color: #00000077 !important; +} + +@media screen and (min-width: 992px) { + + body.youtube>div.container-fluid{ + margin-left: 300px; + } + body.youtube div.container-fluid .col-sm-10.col-sm-offset-1.list-group-item{ + margin-left: 0; + margin-right: 0; + width: 100%; + } +} diff --git a/view/include/head.php b/view/include/head.php index a9d55749bf27..2b224529bcde 100644 --- a/view/include/head.php +++ b/view/include/head.php @@ -179,6 +179,8 @@ var _serverTimeString = ""; var _serverDBTimeString = ""; var _serverTimezone = ""; + var avideoModalIframeFullScreenCloseButton = ; + var avideoModalIframeFullScreenCloseButtonSmall = ; var PHPSESSID = ""; + $new_query_string = http_build_query($params); + ?> " class="btn btn-default" style="position: absolute; right: 10px; top: 5px;"> - - - - @media screen and (min-width: 992px) { - - body.youtube>div.container-fluid{ - margin-left: 300px; - } - body.youtube div.container-fluid .col-sm-10.col-sm-offset-1.list-group-item{ - margin-left: 0; - margin-right: 0; - width: 100%; - } - } - - + return false; +} +_ob_start(); +?> + {$customizePluginDescription}"; - } elseif (!empty($metaDescription)) { - echo "

{$metaDescription}

"; - } + echo "

{$customizePluginDescription}

"; +} elseif (!empty($metaDescription)) { + echo "

{$metaDescription}

"; +} if (!User::isLogged() && !empty($advancedCustomUser->userMustBeLoggedIn) && !empty($advancedCustomUser->userMustBeLoggedInCloseButtonURL)) { - ?> - - userMustBeLoggedIn) && empty($advancedCustom->disableNavbar)) || $thisScriptFile["basename"] === "signUp.php" || $thisScriptFile["basename"] === "userRecoverPass.php") || User::isLogged()) { - $updateFiles = getUpdatesFilesArray(); ?> + $updateFiles = getUpdatesFilesArray(); + ?> - + underMenuBarHTMLCode->value)) { echo $advancedCustom->underMenuBarHTMLCode->value; } - } elseif ($thisScriptFile["basename"] !== 'user.php' && empty($advancedCustom->disableNavbar)) { - } +} elseif ($thisScriptFile["basename"] !== 'user.php' && empty($advancedCustom->disableNavbar)) { + +} echo '', AVideoPlugin::navBarAfter(), ''; unset($_GET['parentsOnly']); ?> diff --git a/view/include/navbarCloseButton.php b/view/include/navbarCloseButton.php new file mode 100644 index 000000000000..8b4fc612c638 --- /dev/null +++ b/view/include/navbarCloseButton.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/view/include/navbarEncoder.php b/view/include/navbarEncoder.php index 3481c19bc877..fba4e2f028f3 100644 --- a/view/include/navbarEncoder.php +++ b/view/include/navbarEncoder.php @@ -1,70 +1,71 @@ -openEncoderInIFrame) || !isSameDomainAsMyAVideo($config->getEncoderURL())) { - if (!empty($advancedCustom->encoderNetwork) && empty($advancedCustom->doNotShowEncoderNetwork)) { - ?> -
  • -
    - - - -
    - " data-placement="left" > - encoderNetworkLabel) ? __("Encoder Network") : __($advancedCustom->encoderNetworkLabel); ?> - -
  • - doNotShowEncoderButton)) { - if (!empty($config->getEncoderURL())) { - ?> -
  • -
    - - - -
    - " data-placement="left" - class="faa-parent animated-hover" > - encoderButtonLabel) ? __("Encode video and audio") : __($advancedCustom->encoderButtonLabel); ?> - -
  • - -
  • - -
  • - encoderNetwork) && empty($advancedCustom->doNotShowEncoderNetwork)) { - ?> -
  • - " data-placement="left" > - encoderNetworkLabel) ? __("Encoder Network") : __($advancedCustom->encoderNetworkLabel); ?> - -
  • - doNotShowEncoderButton)) { - if (!empty($config->getEncoderURL())) { - ?> -
  • - " data-placement="left" > - encoderButtonLabel) ? __("Encode video and audio") : __($advancedCustom->encoderButtonLabel); ?> - -
  • - -
  • - -
  • - openEncoderInIFrame) || !isSameDomainAsMyAVideo($config->getEncoderURL())) { + if (!empty($advancedCustom->encoderNetwork) && empty($advancedCustom->doNotShowEncoderNetwork)) { + ?> +
  • +
    + + + +
    + " data-placement="left" > + encoderNetworkLabel) ? __("Encoder Network") : __($advancedCustom->encoderNetworkLabel); ?> + +
  • + doNotShowEncoderButton)) { + if (!empty($config->getEncoderURL())) { + ?> +
  • +
    + + + +
    + " data-placement="left" + class="faa-parent animated-hover" > + encoderButtonLabel) ? __("Encode video and audio") : __($advancedCustom->encoderButtonLabel); ?> + +
  • + +
  • + +
  • + encoderNetwork) && empty($advancedCustom->doNotShowEncoderNetwork)) { + ?> +
  • + " data-placement="left" > + encoderNetworkLabel) ? __("Encoder Network") : __($advancedCustom->encoderNetworkLabel); ?> + +
  • + doNotShowEncoderButton)) { + if (!empty($config->getEncoderURL())) { + ?> +
  • + " data-placement="left" > + encoderButtonLabel) ? __("Encode video and audio") : __($advancedCustom->encoderButtonLabel); ?> + +
  • + +
  • + +
  • + \ No newline at end of file diff --git a/view/include/navbarLang.php b/view/include/navbarLang.php new file mode 100644 index 000000000000..31567584deb6 --- /dev/null +++ b/view/include/navbarLang.php @@ -0,0 +1,20 @@ +
  • + +
  • + \ No newline at end of file diff --git a/view/include/navbarMenuAndLogo.php b/view/include/navbarMenuAndLogo.php new file mode 100644 index 000000000000..53947b327909 --- /dev/null +++ b/view/include/navbarMenuAndLogo.php @@ -0,0 +1,40 @@ +
  • + +
  • \ No newline at end of file diff --git a/view/include/navbarNotUpload.php b/view/include/navbarNotUpload.php new file mode 100644 index 000000000000..d2bcfeb76074 --- /dev/null +++ b/view/include/navbarNotUpload.php @@ -0,0 +1,25 @@ + +
  • +
    " data-placement="left" class="btn-group"> + + '; ?> + +
    +
  • + \ No newline at end of file diff --git a/view/include/navbarRightProfile.php b/view/include/navbarRightProfile.php new file mode 100644 index 000000000000..6b5b20c248cc --- /dev/null +++ b/view/include/navbarRightProfile.php @@ -0,0 +1,169 @@ + +doNotShowRightProfile) && (User::isLogged() || empty($advancedCustomUser->signInOnRight))) { + $tooltip = ''; + if (User::isLogged()) { + $tooltip = 'data-toggle="tooltip" data-html="true" title="' . User::getNameIdentification() . ":: " . User::getMail() . '" data-placement="left"'; + } else { + $tooltip = 'data-toggle="tooltip" data-html="true" title="' . __("Login") . '" data-placement="left"'; + } + ?> + + \ No newline at end of file diff --git a/view/include/navbarRightSignIn.php b/view/include/navbarRightSignIn.php new file mode 100644 index 000000000000..a39538b63c6e --- /dev/null +++ b/view/include/navbarRightSignIn.php @@ -0,0 +1,33 @@ +signInOnRight)) { + if (User::isLogged()) { + if (!$advancedCustomUser->disableSignOutButton) { + ?> +
  • + + + + + + + + +
  • + +
  • + + + +
  • + \ No newline at end of file diff --git a/view/include/navbarSearch.php b/view/include/navbarSearch.php new file mode 100644 index 000000000000..f956bdcb10cb --- /dev/null +++ b/view/include/navbarSearch.php @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/view/include/navbarSidebar.php b/view/include/navbarSidebar.php new file mode 100644 index 000000000000..d86a5d6139b5 --- /dev/null +++ b/view/include/navbarSidebar.php @@ -0,0 +1,581 @@ + \ No newline at end of file diff --git a/view/include/navbarUpload.php b/view/include/navbarUpload.php new file mode 100644 index 000000000000..9ef9879ea74b --- /dev/null +++ b/view/include/navbarUpload.php @@ -0,0 +1,71 @@ + +
  • +
    " data-placement="left" class="btn-group"> + + onlyVerifiedEmailCanUpload) && $advancedCustomUser->onlyVerifiedEmailCanUpload && User::isVerified()) || (isset($advancedCustomUser->onlyVerifiedEmailCanUpload) && !$advancedCustomUser->onlyVerifiedEmailCanUpload) || !isset($advancedCustomUser->onlyVerifiedEmailCanUpload)) { + echo ''; + ?> + + '; + ?> + + + +
    + +
  • \ No newline at end of file diff --git a/view/js/navbarLogged.js b/view/js/navbarLogged.js new file mode 100644 index 000000000000..83cc1bb6e6b4 --- /dev/null +++ b/view/js/navbarLogged.js @@ -0,0 +1,244 @@ + +var seachFormIsRunning = 0; +$(document).ready(function () { + setTimeout(function () { + $('.nav li.navsub-toggle a:not(.selected) + ul').hide(); + var navsub_toggle_selected = $('.nav li.navsub-toggle a.selected'); + navsub_toggle_selected.next().show(); + navsub_toggle_selected = navsub_toggle_selected.parent(); + + var navsub_toggle_selected_stop = 24; + while (navsub_toggle_selected.length) { + if ($.inArray(navsub_toggle_selected.prop('localName'), ['li', 'ul']) == -1) + break; + if (navsub_toggle_selected.prop('localName') == 'ul') { + navsub_toggle_selected.show().prev().addClass('selected'); + } + navsub_toggle_selected = navsub_toggle_selected.parent(); + + navsub_toggle_selected_stop--; + if (navsub_toggle_selected_stop < 0) + break; + } + }, 500); + + + $('.nav').on('click', 'li.navsub-toggle a:not(.selected)', function (e) { + var a = $(this), + b = a.next(); + if (b.length) { + e.preventDefault(); + + a.addClass('selected'); + b.slideDown(); + + var c = a.closest('.nav').find('li.navsub-toggle a.selected').not(a).removeClass('selected').next(); + + if (c.length) + c.slideUp(); + } + }); + + $('#searchForm').submit(function (event) { + if (seachFormIsRunning) { + event.preventDefault(); + return false; + } + seachFormIsRunning = 1; + var str = $('#searchFormInput').val(); + if (isMediaSiteURL(str)) { + event.preventDefault(); + console.log("searchForm is URL " + str); + seachFormPlayURL(str); + return false; + } else { + console.log("searchForm submit " + str); + document.location = webSiteRootURL + "?search=" + str; + } + }); + + $('#buttonMenu').on("click.sidebar", function (event) { + event.stopPropagation(); + YPTSidebarToggle(); + }); + $("#sidebar").on("click", function (event) { + event.stopPropagation(); + }); + $("#buttonSearch").click(function (event) { + event.stopPropagation(); + if (isSearchOpen()) { + closeSearchMenu(); + } else { + openSearchMenu(); + } + }); + $("#buttonMyNavbar").click(function (event) { + event.stopPropagation(); + if (isMyNMavbarOpen()) { + closeRightMenu(); + } else { + openRightMenu(); + } + }); + var wasMobile = true; + $(window).resize(function () { + if ($(window).width() > 767) { + // Window is bigger than 767 pixels wide - show search again, if autohide by mobile. + if (wasMobile) { + wasMobile = false; + } + } + if ($(window).width() < 767) { + // Window is smaller 767 pixels wide - show search again, if autohide by mobile. + if (wasMobile == false) { + wasMobile = true; + } + } + }); + + $(window).resize(function () { + if (!isScreeWidthCollapseSize()) { + $("#myNavbar").css({display:''}); + $("#myNavbar").removeClass('animate__bounceOutRight'); + var selector = '#buttonMyNavbar svg'; + $(selector).removeClass('active'); + $(selector).attr('aria-expanded', 'false'); + + $("#mysearch").css({display:''}); + $("#mysearch").removeClass('animate__bounceOutUp'); + } + }); +}); + +function isScreeWidthCollapseSize() { + return $('body').width() <= 767; +} + +function closeLeftMenu() { + var selector = '#buttonMenu svg'; + $(selector).removeClass('active'); + YPTSidebarClose(); +} +function openLeftMenu() { + if (isScreeWidthCollapseSize()) { + closeRightMenu(); + closeSearchMenu(); + } + var selector = '#buttonMenu svg'; + $(selector).addClass('active'); + YPTSidebarOpen(); +} + +function closeRightMenu() { + var selector = '#buttonMyNavbar svg'; + $(selector).removeClass('active'); + $("#myNavbar").removeClass('animate__bounceInRight'); + $("#myNavbar").addClass('animate__bounceOutRight'); + setTimeout(function () { + $("#myNavbar").hide(); + }, 500); +} +function openRightMenu() { + if (isScreeWidthCollapseSize()) { + closeLeftMenu(); + closeSearchMenu(); + } + var selector = '#buttonMyNavbar svg'; + $(selector).addClass('active'); + $("#myNavbar").removeClass('animate__bounceOutRight'); + $("#myNavbar").show(); + $("#myNavbar").addClass('animate__animated animate__bounceInRight'); +} + +function closeSearchMenu() { + $("#mysearch").removeClass('animate__bounceInDown'); + $("#mysearch").addClass('animate__bounceOutUp'); + setTimeout(function () { + $("#mysearch").hide(); + }, 500); +} +function openSearchMenu() { + if (isScreeWidthCollapseSize()) { + closeLeftMenu(); + closeRightMenu(); + } + $("#mysearch").removeClass('animate__bounceOutUp'); + $("#mysearch").show(); + $("#mysearch").addClass('animate__animated animate__bounceInDown'); +} + +function seachFormPlayURL(url) { + modal.showPleaseWait(); + $.ajax({ + url: webSiteRootURL + 'view/url2Embed.json.php', + method: 'POST', + data: { + 'url': url + }, + success: function (response) { + seachFormIsRunning = 0; + if (response.error) { + modal.hidePleaseWait(); + avideoToast(response.msg); + } else { + if (typeof linksToEmbed === 'function') { + document.location = response.playEmbedLink; + } else + if (typeof flixFullScreen == 'function') { + flixFullScreen(response.playEmbedLink, response.playLink); + modal.hidePleaseWait(); + } else { + document.location = response.playLink; + } + } + } + }); +} + +function isSearchOpen() { + return $('#mysearch').hasClass('animate__bounceInDown'); +} +function isMyNMavbarOpen() { + return $('#myNavbar').hasClass('animate__bounceInRight'); +} +function YPTSidebarToggle() { + if (YPTSidebarIsOpen()) { + closeLeftMenu() + } else { + openLeftMenu(); + } +} +function YPTSidebarIsOpen() { + return $('body').hasClass('youtube'); +} +function YPTSidebarOpen() { + $("#sidebar").removeClass('animate__bounceOutLeft'); + $("#sidebar").show(); + $("#sidebar").addClass('animate__animated animate__bounceInLeft'); + setTimeout(function () { + $('body').addClass('youtube'); + }, 500); + youTubeMenuIsOpened = true; +} +function YPTSidebarClose() { + $("#sidebar").removeClass('animate__bounceInLeft'); + $("#sidebar").addClass('animate__bounceOutLeft'); + setTimeout(function () { + $('body').removeClass('youtube'); + $("#sidebar").hide(); + }, 500); + youTubeMenuIsOpened = false; +} + +function YPTHidenavbar() { + if (typeof inIframe == 'undefined') { + setTimeout(function () { + YPTHidenavbar() + }, 500); + } else { + if (inIframe()) { + $("#mainNavBar").hide(); + $("body").css("padding-top", "0"); + } + } +} diff --git a/view/js/script.js b/view/js/script.js index f76b77cce828..22c429f6dfe1 100644 --- a/view/js/script.js +++ b/view/js/script.js @@ -1360,6 +1360,10 @@ function avideoModalIframe(url) { avideoModalIframeWithClassName(url, 'swal-modal-iframe', false); } +function avideoModalIframeXSmall(url) { + avideoModalIframeWithClassName(url, 'swal-modal-iframe-xsmall', false); +} + function avideoModalIframeSmall(url) { avideoModalIframeWithClassName(url, 'swal-modal-iframe-small', false); } @@ -1376,6 +1380,12 @@ function avideoModalIframeFullScreenClose() { if (typeof swal === 'function') { $('.swal-overlay iframe').attr('src', 'about:blank'); try { + /* + $('.swal-overlay').slideUp(); + setTimeout(function(){ + swal.close(); + },500); + */ swal.close(); } catch (e) { @@ -1446,13 +1456,18 @@ function avideoModalIframeWithClassName(url, className, updateURL) { url = addGetParam(url, 'avideoIframe', 1); console.log('avideoModalIframeWithClassName', url, className, updateURL); var html = ''; - html += '
    '; - html += '
    '; + html += '
    '; + if(inIframe()){ + html += avideoModalIframeFullScreenCloseButtonSmall; + }else{ + html += avideoModalIframeFullScreenCloseButton; + html += ''; + } + html += '
    '; html += ''; var span = document.createElement("span"); span.innerHTML = html; + $('.swal-overlay').show(); swal({ content: span, closeModal: true, @@ -1529,7 +1544,9 @@ function checkIframeLoaded(id) { function avideoModalIframeIsVisible() { var modal = ''; - if ($('.swal-modal-iframe-small').length) { + if ($('.swal-modal-iframe-xsmall').length) { + modal = $('.swal-modal-iframe-xsmall'); + } else if ($('.swal-modal-iframe-small').length) { modal = $('.swal-modal-iframe-small'); } else if ($('.swal-modal-iframe-large').length) { modal = $('.swal-modal-iframe-large'); @@ -1576,7 +1593,13 @@ function avideoResponse(response) { if (!response.msg) { response.msg = 'Success'; } - avideoToastSuccess(response.msg); + if(response.warning){ + avideoToastWarning(response.msg); + }else if(response.info){ + avideoToastInfo(response.msg); + }else{ + avideoToastSuccess(response.msg); + } } } @@ -1904,6 +1927,10 @@ function addGetParam(_url, _key, _value) { return _url; } +function addQueryStringParameter(_url, _key, _value){ + return addGetParam(_url, _key, _value); +} + function removeDuplicatedGetParam(_url) { var queryParam = _url.replace(/^[^?]+\?/, ''); if (queryParam == '') { diff --git a/view/modeYoutube.php b/view/modeYoutube.php index 2f987ba369d8..a6e51e6e9d40 100644 --- a/view/modeYoutube.php +++ b/view/modeYoutube.php @@ -348,6 +348,7 @@ +
    thumbnails; - $poster = $evideo->thumbnails; - $imgw = 1280; - $imgh = 720; - $autoPlaySources = []; - $autoPlayURL = ''; - $autoPlayPoster = ''; - $autoPlayThumbsSprit = ''; -} elseif (!empty($_GET['v'])) { - $video = Video::getVideo($_GET['v'], "", true, false, false, true); -//$video['id'] = $_GET['v']; -} elseif (!empty($_GET['videoName'])) { - $video = Video::getVideoFromCleanTitle($_GET['videoName']); -} - -Video::unsetAddView($video['id']); - -AVideoPlugin::getEmbed($video['id']); - -if (empty($video)) { - forbiddenPage("Video not found"); -} -if ($video['status']=='i') { - forbiddenPage("Video inactive"); -} -if (empty($video['users_id'])) { - $video['users_id'] = User::getId(); -} -if (empty($customizedAdvanced)) { - $customizedAdvanced = AVideoPlugin::getObjectDataIfEnabled('CustomizeAdvanced'); -} - -forbiddenPageIfCannotEmbed($video['id']); - -$source = []; -$img = ''; -$imgw = 1280; -$imgh = 720; - -if ($video['type'] !== "pdf") { - if (!empty($video['filename'])) { - $source = Video::getSourceFile($video['filename']); - $poster = $img = $source['url']; - $data = getimgsize($source['path']); - $imgw = $data[0]; - $imgh = $data[1]; - } -} - -if (empty($poster)) { - $poster = ''; - if (!empty($video['filename'])) { - $images = Video::getImageFromFilename($video['filename']); - $poster = $images->poster; - if (!empty($images->posterPortrait)) { - $img = $images->posterPortrait; - $data = getimgsize($source['path']); - $imgw = $data[0]; - $imgh = $data[1]; - } - } else { - $images = []; - $poster = ''; - $imgw = 0; - $imgh = 0; - } - if (empty($poster) && !empty($video['filename'])) { - if (($video['type'] !== "audio") && ($video['type'] !== "linkAudio")) { - $poster = "{$global['webSiteRootURL']}videos/{$video['filename']}.jpg"; - } else { - $poster = "" . getCDN() . "view/img/audio_wave.jpg"; - } - } -} - -require_once $global['systemRootPath'] . 'plugin/AVideoPlugin.php'; -/* - * Swap aspect ratio for rotated (vvs) videos - - if ($video['rotation'] === "90" || $video['rotation'] === "270") { - $embedResponsiveClass = "embed-responsive-9by16"; - $vjsClass = "vjs-9-16"; - } else { - $embedResponsiveClass = "embed-responsive-16by9"; - $vjsClass = "vjs-16-9"; - } */ -$vjsClass = ''; -$obj = new Video("", "", $video['id']); -$resp = $obj->addView(); - -//https://.../vEmbed/527?modestbranding=1&showinfo=0&autoplay=1&controls=0&loop=1&mute=1&t=0 -$modestbranding = false; -$autoplay = false; -$controls = "controls"; -$showOnlyBasicControls = false; -$loop = ''; -$mute = ''; -$objectFit = ''; -$t = 0; - -if (isset($_GET['modestbranding']) && $_GET['modestbranding'] == "1") { - $modestbranding = true; -} -if (!empty($_GET['autoplay']) || $config->getAutoplay()) { - $autoplay = true; -} -if (isset($_GET['controls'])) { - if ($_GET['controls'] == "0") { - $controls = ''; - } elseif ($_GET['controls'] == "-1") { - $showOnlyBasicControls = true; - } elseif ($_GET['controls'] == "-2") { - $showOnlyBasicControls = true; - $hideProgressBarAndUnPause = true; - } -} -if (!empty($_GET['loop'])) { - $loop = "loop"; -} -if (!empty($_GET['mute'])) { - $mute = 'muted="muted"'; -} -if (!empty($_GET['objectFit']) && (intval($_GET['objectFit']) == 1 || $_GET['objectFit'] == 'true')) { - $objectFit = 'object-fit: ' . $_GET['objectFit']; -} -if (!empty($_GET['t'])) { - $t = intval($_GET['t']); -} elseif (!empty($video['progress']['lastVideoTime'])) { - $t = intval($video['progress']['lastVideoTime']); -} elseif (!empty($video['externalOptions']->videoStartSeconds)) { - $t = parseDurationToSeconds($video['externalOptions']->videoStartSeconds); -} - -$playerSkinsO = AVideoPlugin::getObjectData("PlayerSkins"); -$disableEmbedTopInfo = $playerSkinsO->disableEmbedTopInfo; - -if (isset($_REQUEST['showinfo']) && empty($_REQUEST['showinfo'])) { - $disableEmbedTopInfo = true; - $modestbranding = true; -} - -$url = Video::getLink($video['id'], $video['clean_title'], false); -$title = str_replace('"', '', $video['title']) . ' - ' . $config->getWebSiteTitle(); -$photo = User::getPhoto($video['users_id']); - -if (empty($currentTime)) { - $currentTime = 0; -} - -if (User::hasBlockedUser($video['users_id'])) { - $disableEmbedTopInfo = true; - $video['type'] = "blockedUser"; -} -?> - - - - - - - - - - - - <?php echo $video['title'] . $config->getPageTitleSeparator() . $config->getWebSiteTitle(); ?> - - - - - - - - - - - - - - - - - -
    -
    -
    - You've blocked user ()
    - You won't see any comments or videos from this user
    - -
    -
    -
    - - - - - - - -
    -

    - -

    - - - -
    - - - - - - - -
    - " class="img img-responsive" style="height: 100%;" > -
    - - - -
    -
    -
    -
      - open($sources['zip']["path"]); - for ($i = 0; $i < $za->numFiles; $i++) { - $stat = $za->statIndex($i); - $fname = basename($stat['name']); ?> -
    • - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +thumbnails; + $poster = $evideo->thumbnails; + $imgw = 1280; + $imgh = 720; + $autoPlaySources = []; + $autoPlayURL = ''; + $autoPlayPoster = ''; + $autoPlayThumbsSprit = ''; +} elseif (!empty($_GET['v'])) { + $video = Video::getVideo($_GET['v'], "", true, false, false, true); +//$video['id'] = $_GET['v']; +} elseif (!empty($_GET['videoName'])) { + $video = Video::getVideoFromCleanTitle($_GET['videoName']); +} + +Video::unsetAddView($video['id']); + +AVideoPlugin::getEmbed($video['id']); + +if (empty($video)) { + forbiddenPage("Video not found"); +} +if ($video['status']=='i') { + forbiddenPage("Video inactive"); +} +if (empty($video['users_id'])) { + $video['users_id'] = User::getId(); +} +if (empty($customizedAdvanced)) { + $customizedAdvanced = AVideoPlugin::getObjectDataIfEnabled('CustomizeAdvanced'); +} + +forbiddenPageIfCannotEmbed($video['id']); + +$source = []; +$img = ''; +$imgw = 1280; +$imgh = 720; + +if ($video['type'] !== "pdf") { + if (!empty($video['filename'])) { + $source = Video::getSourceFile($video['filename']); + $poster = $img = $source['url']; + $data = getimgsize($source['path']); + $imgw = $data[0]; + $imgh = $data[1]; + } +} + +if (empty($poster)) { + $poster = ''; + if (!empty($video['filename'])) { + $images = Video::getImageFromFilename($video['filename']); + $poster = $images->poster; + if (!empty($images->posterPortrait)) { + $img = $images->posterPortrait; + $data = getimgsize($source['path']); + $imgw = $data[0]; + $imgh = $data[1]; + } + } else { + $images = []; + $poster = ''; + $imgw = 0; + $imgh = 0; + } + if (empty($poster) && !empty($video['filename'])) { + if (($video['type'] !== "audio") && ($video['type'] !== "linkAudio")) { + $poster = "{$global['webSiteRootURL']}videos/{$video['filename']}.jpg"; + } else { + $poster = "" . getCDN() . "view/img/audio_wave.jpg"; + } + } +} + +require_once $global['systemRootPath'] . 'plugin/AVideoPlugin.php'; +/* + * Swap aspect ratio for rotated (vvs) videos + + if ($video['rotation'] === "90" || $video['rotation'] === "270") { + $embedResponsiveClass = "embed-responsive-9by16"; + $vjsClass = "vjs-9-16"; + } else { + $embedResponsiveClass = "embed-responsive-16by9"; + $vjsClass = "vjs-16-9"; + } */ +$vjsClass = ''; +$obj = new Video("", "", $video['id']); +$resp = $obj->addView(); + +//https://.../vEmbed/527?modestbranding=1&showinfo=0&autoplay=1&controls=0&loop=1&mute=1&t=0 +$modestbranding = false; +$autoplay = false; +$controls = "controls"; +$showOnlyBasicControls = false; +$loop = ''; +$mute = ''; +$objectFit = ''; +$t = 0; + +if (isset($_GET['modestbranding']) && $_GET['modestbranding'] == "1") { + $modestbranding = true; +} +if (!empty($_GET['autoplay']) || $config->getAutoplay()) { + $autoplay = true; +} +if (isset($_GET['controls'])) { + if ($_GET['controls'] == "0") { + $controls = ''; + } elseif ($_GET['controls'] == "-1") { + $showOnlyBasicControls = true; + } elseif ($_GET['controls'] == "-2") { + $showOnlyBasicControls = true; + $hideProgressBarAndUnPause = true; + } +} +if (!empty($_GET['loop'])) { + $loop = "loop"; +} +if (!empty($_GET['mute'])) { + $mute = 'muted="muted"'; +} +if (!empty($_GET['objectFit']) && (intval($_GET['objectFit']) == 1 || $_GET['objectFit'] == 'true')) { + $objectFit = 'object-fit: ' . $_GET['objectFit']; +} +if (!empty($_GET['t'])) { + $t = intval($_GET['t']); +} elseif (!empty($video['progress']['lastVideoTime'])) { + $t = intval($video['progress']['lastVideoTime']); +} elseif (!empty($video['externalOptions']->videoStartSeconds)) { + $t = parseDurationToSeconds($video['externalOptions']->videoStartSeconds); +} + +$playerSkinsO = AVideoPlugin::getObjectData("PlayerSkins"); +$disableEmbedTopInfo = $playerSkinsO->disableEmbedTopInfo; + +if (isset($_REQUEST['showinfo']) && empty($_REQUEST['showinfo'])) { + $disableEmbedTopInfo = true; + $modestbranding = true; +} + +$url = Video::getLink($video['id'], $video['clean_title'], false); +$title = str_replace('"', '', $video['title']) . ' - ' . $config->getWebSiteTitle(); +$photo = User::getPhoto($video['users_id']); + +if (empty($currentTime)) { + $currentTime = 0; +} + +if (User::hasBlockedUser($video['users_id'])) { + $disableEmbedTopInfo = true; + $video['type'] = "blockedUser"; +} +?> + + + + + + + + + + + + <?php echo $video['title'] . $config->getPageTitleSeparator() . $config->getWebSiteTitle(); ?> + + + + + + + + + + + + + + + + + +
    +
    +
    + You've blocked user ()
    + You won't see any comments or videos from this user
    + +
    +
    +
    + + + + + + + +
    +

    + +

    + + + +
    + + + + + + + +
    + " class="img img-responsive" style="height: 100%;" > +
    + + + +
    +
    +
    +
      + open($sources['zip']["path"]); + for ($i = 0; $i < $za->numFiles; $i++) { + $stat = $za->statIndex($i); + $fname = basename($stat['name']); ?> +
    • + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/view/videoNotFound.php b/view/videoNotFound.php index 017c33e4ab14..0a19e37ef4fe 100644 --- a/view/videoNotFound.php +++ b/view/videoNotFound.php @@ -1,59 +1,60 @@ - - - - - <?php echo __('Video Not Found'); ?> - - - - - -
    - -
    - - - - + + + + + <?php echo __('Video Not Found'); ?> + + + + + + +
    + +
    + + + +