Pārlūkot izejas kodu

Merge branch 'master' into feature-osal

Ernesto Nicolás Carrea 5 gadi atpakaļ
vecāks
revīzija
064209bcf4
100 mainītis faili ar 4334 papildinājumiem un 4950 dzēšanām
  1. 76 29
      README.md
  2. 6 0
      bin/v-add-user-composer
  3. 2 3
      bin/v-add-user-sftp-jail
  4. 4 0
      bin/v-add-web-domain-ssl-force
  5. 4 4
      bin/v-add-web-domain-ssl-hsts
  6. 3 0
      bin/v-delete-user-2fa
  7. 4 0
      bin/v-delete-web-domain-ssl-force
  8. 4 0
      bin/v-delete-web-domain-ssl-hsts
  9. 1 1
      bin/v-list-user-package
  10. 3 3
      bin/v-update-sys-hestia-git
  11. 3 10
      func/upgrade.sh
  12. 106 790
      install/deb/themes/dark.css
  13. 7 2
      install/deb/themes/flat.css
  14. 24 22
      install/hst-install-debian.sh
  15. 67 23
      install/hst-install-ubuntu.sh
  16. 21 2
      install/upgrade/manual/migrate_mpm_event.sh
  17. 11 4
      install/upgrade/versions/latest.sh
  18. 0 3
      src/deb/hestia/postinst
  19. 3 3
      src/hst_autocompile.sh
  20. 36 0
      web/bulk/firewall/ipset/index.php
  21. 8 0
      web/css/animate.min.css
  22. 0 8
      web/css/jquery.arcticmodal.css
  23. 0 36
      web/css/jquery.fileupload.css
  24. 0 0
      web/css/src/animate.css
  25. 3885 0
      web/css/src/styles.css
  26. 0 3885
      web/css/styles.min.css
  27. 0 92
      web/css/uploadify.css
  28. BIN
      web/images/background-dots.png
  29. BIN
      web/images/document.png
  30. BIN
      web/images/edit_bg.png
  31. BIN
      web/images/flat_icons.png
  32. BIN
      web/images/in_progress.gif
  33. BIN
      web/images/progress.gif
  34. BIN
      web/images/ui-bg_flat_0_aaaaaa_40x100.png
  35. BIN
      web/images/ui-bg_glass_55_fbf9ee_1x400.png
  36. BIN
      web/images/ui-bg_glass_95_fef1ec_1x400.png
  37. BIN
      web/images/ui-icons_2e83ff_256x240.png
  38. BIN
      web/images/ui-icons_454545_256x240.png
  39. BIN
      web/images/ui-icons_888888_256x240.png
  40. BIN
      web/images/ui-icons_cd0a0a_256x240.png
  41. 11 0
      web/inc/i18n/de.php
  42. 10 0
      web/inc/i18n/en.php
  43. 11 1
      web/inc/i18n/fr.php
  44. 10 0
      web/inc/i18n/it.php
  45. 14 3
      web/inc/i18n/nl.php
  46. 0 1
      web/js/cheef-editor/.gitignore
  47. 0 22
      web/js/cheef-editor/README.md
  48. 0 0
      web/js/cheef-editor/ace/ace.js
  49. 0 1
      web/js/cheef-editor/ace/ext-static_highlight.js
  50. 0 0
      web/js/cheef-editor/ace/ext-textarea.js
  51. 0 0
      web/js/cheef-editor/ace/keybinding-emacs.js
  52. 0 0
      web/js/cheef-editor/ace/keybinding-vim.js
  53. 0 0
      web/js/cheef-editor/ace/mode-abap.js
  54. 0 0
      web/js/cheef-editor/ace/mode-asciidoc.js
  55. 0 0
      web/js/cheef-editor/ace/mode-c9search.js
  56. 0 0
      web/js/cheef-editor/ace/mode-c_cpp.js
  57. 0 0
      web/js/cheef-editor/ace/mode-clojure.js
  58. 0 0
      web/js/cheef-editor/ace/mode-coffee.js
  59. 0 0
      web/js/cheef-editor/ace/mode-coldfusion.js
  60. 0 0
      web/js/cheef-editor/ace/mode-csharp.js
  61. 0 0
      web/js/cheef-editor/ace/mode-css.js
  62. 0 0
      web/js/cheef-editor/ace/mode-dart.js
  63. 0 0
      web/js/cheef-editor/ace/mode-diff.js
  64. 0 0
      web/js/cheef-editor/ace/mode-dot.js
  65. 0 0
      web/js/cheef-editor/ace/mode-glsl.js
  66. 0 0
      web/js/cheef-editor/ace/mode-golang.js
  67. 0 0
      web/js/cheef-editor/ace/mode-groovy.js
  68. 0 0
      web/js/cheef-editor/ace/mode-haml.js
  69. 0 0
      web/js/cheef-editor/ace/mode-haxe.js
  70. 0 0
      web/js/cheef-editor/ace/mode-html.js
  71. 0 0
      web/js/cheef-editor/ace/mode-jade.js
  72. 0 0
      web/js/cheef-editor/ace/mode-java.js
  73. 0 0
      web/js/cheef-editor/ace/mode-javascript.js
  74. 0 0
      web/js/cheef-editor/ace/mode-json.js
  75. 0 0
      web/js/cheef-editor/ace/mode-jsp.js
  76. 0 0
      web/js/cheef-editor/ace/mode-jsx.js
  77. 0 0
      web/js/cheef-editor/ace/mode-latex.js
  78. 0 0
      web/js/cheef-editor/ace/mode-less.js
  79. 0 0
      web/js/cheef-editor/ace/mode-liquid.js
  80. 0 1
      web/js/cheef-editor/ace/mode-lisp.js
  81. 0 0
      web/js/cheef-editor/ace/mode-lua.js
  82. 0 0
      web/js/cheef-editor/ace/mode-luapage.js
  83. 0 1
      web/js/cheef-editor/ace/mode-lucene.js
  84. 0 0
      web/js/cheef-editor/ace/mode-makefile.js
  85. 0 0
      web/js/cheef-editor/ace/mode-markdown.js
  86. 0 0
      web/js/cheef-editor/ace/mode-objectivec.js
  87. 0 0
      web/js/cheef-editor/ace/mode-ocaml.js
  88. 0 0
      web/js/cheef-editor/ace/mode-perl.js
  89. 0 0
      web/js/cheef-editor/ace/mode-pgsql.js
  90. 0 0
      web/js/cheef-editor/ace/mode-php.js
  91. 0 0
      web/js/cheef-editor/ace/mode-powershell.js
  92. 0 0
      web/js/cheef-editor/ace/mode-python.js
  93. 0 0
      web/js/cheef-editor/ace/mode-r.js
  94. 0 0
      web/js/cheef-editor/ace/mode-rdoc.js
  95. 0 0
      web/js/cheef-editor/ace/mode-rhtml.js
  96. 0 0
      web/js/cheef-editor/ace/mode-ruby.js
  97. 0 0
      web/js/cheef-editor/ace/mode-scad.js
  98. 0 0
      web/js/cheef-editor/ace/mode-scala.js
  99. 0 0
      web/js/cheef-editor/ace/mode-scss.js
  100. 0 0
      web/js/cheef-editor/ace/mode-sh.js

+ 76 - 29
README.md

@@ -2,40 +2,56 @@
 
 [Hestia Control Panel](https://www.hestiacp.com/)
 ==================================================
-**Latest stable release:** Version 1.2.0 - June 29, 2020 | [View Changelog](https://github.com/hestiacp/hestiacp/blob/master/CHANGELOG.md)<br>
-
-**Web:** [www.hestiacp.com](https://www.hestiacp.com/)<br>
-**Documentation:** [docs.hestiacp.com](https://docs.hestiacp.com/)<br>
-**Forums:** [forum.hestiacp.com](https://forum.hestiacp.com/)<br><br>
-[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ST87LQH2CHGLA)
-<br>
+**Current stable release:** Version 1.1.1, released on March 26th, 2020.<br>
+**Current development release:** Version 1.2.0.
+<br><br>
+**Due to a change of the repository infrastructure, please install the new key before you upgrade your existing installations:**
+```bash
+wget -qO - https://gpg.hestiacp.com/deb_signing.key | sudo apt-key add -
+```
 
 **Welcome!**
 ---------------------------- 
-Hestia Control Panel is designed to provide administrators an easy to use web and command line interface, enabling them to quickly deploy and manage web domains, mail accounts, DNS zones, and databases from one central dashboard without the hassle of manually deploying and configuring individual components or services. 
+Hestia Control Panel offers easy to use web and command line interfaces, enabling web server administrators to quickly deploy and manage web domains, mail accounts, and DNS zones from one central location without the hassle of manually deploying and configuring individual components. 
+
+While we have taken every effort to make the interface as friendly as possible (even for new users), it is assumed that you will have some prior knowledge and understanding in the basics how to set up a Linux server and managing web applications.
+
+**We cannot provide support for requests that do not describe in detail the troubleshooting that has already been performed, or for third-party applications which do not directly relate to Hestia Control Panel. Please make sure that you fill in the necessary details in your issue reports, and remove any sections that do not apply to your issue or use case.**
+
+Interested in helping shape the future of Hestia Control Panel?
+---------------------------- 
+Are you a software developer, tester, or have experience in writing documentation or guides and have some time to contibute to the project?<br><br>Please send an email to info@hestiacp.com with a quick outline of your previous experience in any of these areas or where you think you could help on the project and we'll reach out to discuss the next steps.
+
+As always we welcome all feedback and contributions!
+
+Sincerely,<br>
+The Hestia Control Panel development team
 
-Features and Services
+What is Hestia Control Panel?
 ----------------------------
-* Apache2 and NGINX with PHP-FPM
-* Multiple PHP versions (5.6 - 7.4, 7.3 as default for optimal compatibility)
+* An open source web server control panel with an easy-to-use interface.
+* A lightweight alternative to cPanel, Plesk, etc.
+
+What does Hestia Control Panel support?
+----------------------------
+* Standard Web Server (Apache/NGINX) with PHP
+* PHP Web Application Server (NGINX + PHP-FPM)
+* Multiple PHP versions (5.6 - 7.4, with 7.3 currently as default for optimal compatibility)
 * DNS Server (Bind) with clustering capabilities
-* POP/IMAP/SMTP mail services with Anti-Virus, Anti-Spam, and Webmail (ClamAV, SpamAssassin, and Roundcube)
-* MariaDB or PostgreSQL databases
-* Let's Encrypt SSL support with wildcard certificates
-* Firewall with brute-force attack detection and IP lists (iptables, fail2ban, and ipset).
+* Mail Server (Exim/Dovecot) with Anti-Virus and Anti-Spam (ClamAV and SpamAssassin)
+* Database functionality (MariaDB/PostgreSQL)
+* Let's Encrypt SSL with wildcard certificates
 
-Supported operating systems
+Supported operating systems:
 ----------------------------
-* Debian 10, 9
-* Ubuntu 20.04 LTS, 18.04 LTS, or 16.04 LTS
+* Debian 8, 9, 10
+* Ubuntu 16.04 LTS or Ubuntu 18.04 LTS (the latest LTS release is generally recommended)
 * **NOTE:** Hestia Control Panel must be installed on top of a fresh operating system installation to ensure proper functionality.
 
 Installing Hestia Control Panel
 ============================
-While we have taken every effort to make the installation process and the control panel interface as friendly as possible (even for new users), it is assumed that you will have some prior knowledge and understanding in the basics how to set up a Linux server before continuing.
-
 ## Step 1: Log in
-To start the installation process on your server, you will need to be logged in as **root** or a user with super-user privileges in order to continue. You can perform the installation either directly from the command line console or remotely via SSH:
+To install Hestia Control Panel on your server, you will need to be logged in as **root** or a user with super-user privileges in order to continue. You can perform the installation either directly from the command line console or remotely via SSH:
 ```bash
 ssh root@your.server
 ```
@@ -56,6 +72,11 @@ bash hst-install.sh
 ```
 You will receive a welcome email at the address specified during installation (if applicable) and on-screen instructions after the installation is completed to log in and access your server.
 
+## Additional installation notes:
+To perform an unattended installation using the default options:
+```bash
+bash hst-install.sh -f -y no -e <email> -p <password> -s <hostname>
+```
 ## Custom installation:
 You may specify a number of various flags during installation to only install the features in which you need. To view a list of available options, run:
 ```bash
@@ -63,15 +84,45 @@ bash hst-install.sh -h
 ```
 Alternatively, @gabizz has made available a command-line script generator at https://gabizz.github.io/hestiacp-scriptline-generator/ which allows you to easily generate the installation command via GUI.
 
-Issues
+Installing & testing development builds
 =============================
-If you've run into a problem, [file a new issue report via GitHub](https://github.com/hestiacp/hestiacp/issues) so that we may investigate further.
+In order to install a development build based on the latest published code, you should first have an instance of Hestia Control Panel set up. If you do not have a server configured, please install the latest stable build using the instructions above before continuing.
 
-**We cannot provide support for requests that do not describe the troubleshooting steps that have already been performed, or for third-party applications which do not relate to Hestia Control Panel. Please make sure that you fill in the necessary details in your issue reports!**
+**PLEASE NOTE: Development builds should not be installed on systems with live production data without understanding the potential risks involved.**
+
+To install a development build, first ensure that you have the latest Git upgrade script installed which handles new dependencies added after the 1.0.x branch:
+```bash
+wget -O $HESTIA/bin/v-update-sys-hestia-git https://raw.githubusercontent.com/hestiacp/hestiacp/master/bin/v-update-sys-hestia-git
+chmod +x $HESTIA/bin/v-update-sys-hestia-git
+```
+
+Then run the following command:
+```bash
+v-update-sys-hestia-git branchname
+```
+Replace *branchname* with the name of the branch you wish to install from, such as **release** or **master** (stable and current development branches, respectively). 
+
+Reporting Issues
+=============================
+If you've run into an issue with Hestia Control Panel, please let us know as soon as possible so that we may investigate further and resolve any issues in a timely manner.
+
+Bug reports can be filed using GitHub's [Issues](https://github.com/hestiacp/hestiacp/issues) feature.
 
 Contributions
 =============================
-If you would like to contribute to the project, please [read our Contribution Guidelines](https://github.com/hestiacp/hestiacp/blob/master/CONTRIBUTING.md) for a brief overview of our development process and standards.
+If you would like to contribute to the project, please [read our submission guidelines](https://github.com/hestiacp/hestiacp/blob/master/CONTRIBUTING.md) for a brief overview of our development processes and standards.
+
+Donations
+=============================
+Hestia Control Panel is open source and completely free for everyone to use.
+
+If you would like to help our developers cover their time and infrastucture costs, or to support the Hestia Control Panel project as a whole, please consider making a donation via PayPal or become a sponsor.
+
+[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ST87LQH2CHGLA)
+
+License
+=============================
+Hestia Control Panel is licensed under [GPL v3](https://github.com/hestiacp/hestiacp/blob/master/LICENSE) license, and is based on the [VestaCP](https://www.vestacp.com/) project.<br>
 
 Copyright
 =============================
@@ -84,7 +135,3 @@ Copyright
 - sell or redistribute the application under the name "Hestia Control Panel", "HestiaCP", or similar derivatives, including the use of the Hestia logo in any brand or marketing materials related to revenue generating activities,
 - use the names "Hestia Control Panel", "HestiaCP", or the Hestia logo in any context that is not related to the project,
 - alter the name "Hestia Control Panel", "HestiaCP", or the Hestia logo in any way.
-
-License
-=============================
-Hestia Control Panel is licensed under [GPL v3](https://github.com/hestiacp/hestiacp/blob/master/LICENSE) license, and is based on the [VestaCP](https://www.vestacp.com/) project.<br>

+ 6 - 0
bin/v-add-user-composer

@@ -46,8 +46,14 @@ if [ -f "$COMPOSER_BIN" ]; then
     exit
 fi
 
+[ -z "$(readlink -f "$COMPOSER_DIR" | egrep "^$HOMEDIR/$user/")" ] && check_result $E_FORBIDEN "Path outside of user homedir (Composer dir)"
+[ -z "$(readlink -f "$COMPOSER_BIN" | egrep "^$HOMEDIR/$user/")" ] && check_result $E_FORBIDEN "Path outside of user homedir (Composer bin)"
+[ -z "$(readlink -f "$HOMEDIR/$user/.config/" | egrep "^$HOMEDIR/$user/")" ] && check_result $E_FORBIDEN "Path outside of user homedir (.conf)"
+
 mkdir -p "$COMPOSER_DIR"
 chown $user: "$COMPOSER_DIR"
+mkdir -p "$HOMEDIR/$user/.config"
+chown $user: "$HOMEDIR/$user/.config"
 
 COMPOSER_SETUP_FILE=$(mktemp)
 check_result $? "Create temp file"

+ 2 - 3
bin/v-add-user-sftp-jail

@@ -40,13 +40,12 @@ IFS=',' read -r -a users <<< "$ssh_users"
 
 # Check if jail is already enabled
 if [[ " ${users[@]} " =~ " ${user} " ]]; then
-    if [ ! -n "$(find /home/$user -user root -print -prune -o -prune)" ]; then
-      chown root:root /home/$user
+    if [[ -d /home/$user && ! -n "$(find /home/$user -user root -print -prune -o -prune)" ]]; then
+       chown root:root /home/$user
     fi
     exit;
 fi
 
-
 #----------------------------------------------------------#
 #                       Action                             #
 #----------------------------------------------------------#

+ 4 - 0
bin/v-add-web-domain-ssl-force

@@ -87,4 +87,8 @@ check_result $? "Web restart failed" > /dev/null
 $BIN/v-restart-proxy
 check_result $? "Proxy restart failed" > /dev/null
 
+# Logging
+log_history "enabled automatic HTTP-to-HTTPS redirection for $domain"
+log_event "$OK" "$ARGUMENTS"
+
 exit

+ 4 - 4
bin/v-add-web-domain-ssl-hsts

@@ -68,10 +68,6 @@ fi
 # Set forcessl flag to enabled
 update_object_value 'web' 'DOMAIN' "$domain" '$SSL_HSTS' 'yes'
 
-# Logging
-log_history "Turned HTTP Strict Transport Security $status for $domain."
-log_event "$OK" "$ARGUMENTS"
-
 # Restart web server
 $BIN/v-restart-web
 check_result $? "Web restart failed" > /dev/null
@@ -80,4 +76,8 @@ check_result $? "Web restart failed" > /dev/null
 $BIN/v-restart-proxy
 check_result $? "Proxy restart failed" > /dev/null
 
+# Logging
+log_history "enabled HTTP Strict Transport Security (HSTS) for $domain"
+log_event "$OK" "$ARGUMENTS"
+
 exit

+ 3 - 0
bin/v-delete-user-2fa

@@ -50,4 +50,7 @@ sed -i '/QRCODE=/d' $USER_DATA/user.conf
 #                       Hestia                             #
 #----------------------------------------------------------#
 
+log_history "2FA Disabled for $user"
+log_event "$OK" "$ARGUMENTS"
+
 exit

+ 4 - 0
bin/v-delete-web-domain-ssl-force

@@ -68,4 +68,8 @@ if [ ! -z "$restart" ]; then
     check_result $? "Proxy restart failed" >/dev/null
 fi
 
+# Logging
+log_history "disabled automatic HTTP-to-HTTPS redirection for $domain"
+log_event "$OK" "$ARGUMENTS"
+
 exit

+ 4 - 0
bin/v-delete-web-domain-ssl-hsts

@@ -67,4 +67,8 @@ if [ ! -z "$restart" ]; then
     check_result $? "Proxy restart failed" >/dev/null
 fi
 
+# Logging
+log_history "disabled HTTP Strict Transport Security (HSTS) for $domain"
+log_event "$OK" "$ARGUMENTS"
+
 exit

+ 1 - 1
bin/v-list-user-package

@@ -48,7 +48,7 @@ json_list() {
 shell_list() {
     echo "PACKAGE:          $PACKAGE"
     echo "WEB TEMPLATE:     $WEB_TEMPLATE"
-    echo "BACKEND_TEMPLATE: $BACKEND_TEMPLATE"
+    echo "BACKEND TEMPLATE: $BACKEND_TEMPLATE"
     echo "PROXY TEMPLATE:   $PROXY_TEMPLATE"
     echo "DNS TEMPLATE:     $DNS_TEMPLATE"
     echo "WEB DOMAINS:      $WEB_DOMAINS"

+ 3 - 3
bin/v-update-sys-hestia-git

@@ -50,10 +50,10 @@ download_file() {
 }
 
 # Set compiling directory
-BUILD_DIR='/tmp/hestiacp-src/'
-DEB_DIR="$BUILD_DIR/debs/"
+BUILD_DIR='/tmp/hestiacp-src'
+DEB_DIR="$BUILD_DIR/debs"
 INSTALL_DIR='/usr/local/hestia'
-ARCHIVE_DIR="${BUILD_DIR}/archive/"
+ARCHIVE_DIR="${BUILD_DIR}/archive"
 
 # Set command variables
 branch=$1

+ 3 - 10
func/upgrade.sh

@@ -147,20 +147,20 @@ upgrade_start_routine() {
 
     # Upgrade to Version 1.1.0
     if [ $VERSION = "1.0.6" ]; then
-        source $HESTIA/install/upgrade/versions/latest.sh
+        source $HESTIA/install/upgrade/versions/previous/1.1.0.sh
         VERSION="1.1.0"
         upgrade_refresh_config
     fi
 
     # Upgrade to Version 1.1.1
     if [ $VERSION = "1.1.0" ]; then
-        source $HESTIA/install/upgrade/versions/latest.sh
+        source $HESTIA/install/upgrade/versions/previous/1.1.1.sh
         VERSION="1.1.1"
         upgrade_refresh_config
     fi
 
     # Upgrade to Version 1.2.0
-    if [ $VERSION = "1.1.1" ]; then
+    if [ $VERSION = "1.1.1" ] || [ $VERSION = "1.1.2" ]; then
         source $HESTIA/install/upgrade/versions/latest.sh
         VERSION="$new_version"
         upgrade_refresh_config
@@ -214,13 +214,6 @@ upgrade_phpmyadmin() {
     fi
 }
 
-upgrade_fm_configuration() {
-    if [ -e "$HESTIA/web/fm/configuration.php" ]; then
-        echo "(*) Updating File Manager Configuration..."
-        cp -f $HESTIA_INSTALL_DIR/filemanager/filegator/configuration.php $HESTIA/web/fm/configuration.php
-    fi
-}
-
 upgrade_get_version() {
     # Retrieve new version number for Hestia Control Panel from .deb package
     new_version=$(dpkg -l | awk '$2=="hestia" { print $3 }')

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 106 - 790
install/deb/themes/dark.css


+ 7 - 2
install/deb/themes/flat.css

@@ -1,4 +1,8 @@
-/* Flat theme */
+/*  
+    Theme Name:  Flat
+    Author:      Robert Zollner (@Lupul)
+    Website:     www.hestiacp.com 
+*/
 
 body {
     letter-spacing: 0;
@@ -76,6 +80,7 @@ b, strong {
 .l-unit:hover, .units .l-unit:hover {
     box-shadow: none;
 }
+
 .vst-input {
     box-shadow: none;
 }
@@ -170,4 +175,4 @@ b, strong {
     background-color: rgba(255,255,255,0.8) !important;
     box-shadow: 0px 2px 10px rgba(0,0,0, 0.3), 
                 inset 0px 0px 2px rgba(255,255,255,1) !important;
-}
+}

+ 24 - 22
install/hst-install-debian.sh

@@ -301,8 +301,7 @@ fi
 # Welcome message
 echo "Welcome to the Hestia Control Panel installer!"
 echo 
-echo "Please wait a moment while we update your system's repositories and"
-echo "install any necessary dependencies required to proceed with the installation..."
+echo "Please wait, the installer is now checking for missing dependencies..."
 echo 
 
 # Update apt repository
@@ -413,6 +412,25 @@ if [ -d /etc/netplan ] && [ -z "$force" ]; then
     fi
 fi
 
+# Validate whether installation script matches release version before continuing with install
+if [ -z "$withdebs" ] || [ ! -d "$withdebs" ]; then
+    release_branch_ver=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/release/src/deb/hestia/control |grep "Version:" |awk '{print $2}')
+    if [ "$HESTIA_INSTALL_VER" != "$release_branch_ver" ]; then
+        echo
+        echo -e "\e[91mInstallation aborted\e[0m"
+        echo "===================================================================="
+        echo -e "\e[33mERROR: Install script version does not match package version!\e[0m"
+        echo -e "\e[33mPlease download the installer from the release branch in order to continue:\e[0m"
+        echo ""
+        echo -e "\e[33mhttps://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh\e[0m"
+        echo ""
+        echo -e "\e[33mTo test pre-release versions, build the .deb packages and re-run the installer:\e[0m"
+        echo -e "  \e[33m./hst_autocompile.sh \e[1m--hestia no\e[21m\e[0m"
+        echo -e "  \e[33m./hst-install.sh .. \e[1m--with-debs /tmp/hestiacp-src/debs\e[21m\e[0m"
+        echo ""
+        check_result 1 "Installation aborted"
+    fi
+fi
 
 #----------------------------------------------------------#
 #                       Brief Info                         #
@@ -432,7 +450,7 @@ echo "                                    v${HESTIA_INSTALL_VER}"
 echo -e "\n"
 echo "===================================================================="
 echo -e "\n"
-echo 'The following server components will be installed on your system:'
+echo 'The following components will be installed on your server:'
 echo
 
 # Web stack
@@ -833,22 +851,6 @@ fi
 #                     Install packages                     #
 #----------------------------------------------------------#
 
-if [ -z "$withdebs" ] || [ ! -d "$withdebs" ]; then
-    release_branch_ver=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/release/src/deb/hestia/control |grep "Version:" |awk '{print $2}')
-    if [ "$HESTIA_INSTALL_VER" != "$release_branch_ver" ]; then
-        echo
-        echo -e "\e[91mInstallation Aborted\e[0m"
-        echo "===================================================================="
-        echo -e "\e[33mInstall script does not match Hestia release version\e[0m"
-        echo -e "\e[33mPlease use the installer from the release branch\e[0m"
-        echo ""
-        echo -e "\e[33mTo test the beta version you need to build the hestia deb packages and re-run the installer\e[0m"
-        echo -e "  \e[33m./hst_autocompile.sh \e[1m--hestia no\e[21m\e[0m"
-        echo -e "  \e[33m./hst-install.sh .. \e[1m--with-debs /tmp/hestiacp-src/debs\e[21m\e[0m"
-        check_result 1 "Installation aborted"
-    fi
-fi
-
 # Disabling daemon autostart on apt-get install
 echo -e '#!/bin/sh\nexit 101' > /usr/sbin/policy-rc.d
 chmod a+x /usr/sbin/policy-rc.d
@@ -1844,10 +1846,10 @@ chown admin:admin $HESTIA/data/sessions
 
 
 #----------------------------------------------------------#
-#                  Configure FileManager                   #
+#                  Configure File Manager                   #
 #----------------------------------------------------------#
 
-echo "(*) Configuring Filegator FileManager..."
+echo "(*) Configuring File Manager..."
 source $HESTIA_INSTALL_DIR/filemanager/install-fm.sh > /dev/null 2>&1
 
 
@@ -1908,7 +1910,7 @@ cat $tmpfile
 rm -f $tmpfile
 
 # Add welcome message to notification panel
-$HESTIA/bin/v-add-user-notification admin 'Welcome!' 'For more information on how to use Hestia Control Panel, click on the Help icon in the top right corner of the toolbar.<br><br>Please report any bugs or issues on GitHub at<br>https://github.com/hestiacp/hestiacp/issues<br><br>Have a great day!'
+$HESTIA/bin/v-add-user-notification admin 'Welcome to Hestia Control Panel!' 'Please report any bugs or issues via <a href="https://github.com/hestiacp/hestiacp/issues" target="_new"><i class="fab fa-github"></i> GitHub</a> or e-mail <a href="mailto:info@hestiacp.com?Subject="['$new_version'] Bug Report: ">info@hestiacp.com</a><br><br><b>Have a wonderful day!</b><br><br><i class="fas fa-heart status-icon red"></i> The Hestia Control Panel development team'
 
 echo "(!) IMPORTANT: You must logout or restart the server before continuing."
 echo ""

+ 67 - 23
install/hst-install-ubuntu.sh

@@ -44,7 +44,7 @@ software="apache2 apache2.2-common apache2-suexec-custom apache2-utils
     postgresql postgresql-contrib proftpd-basic quota roundcube-core
     roundcube-mysql roundcube-plugins rrdtool rssh spamassassin sudo hestia
     hestia-nginx hestia-php vim-common vsftpd whois zip acl sysstat setpriv
-    ipset libonig5"
+    ipset libonig5 libzip5"
 
 # Defining help function
 help() {
@@ -283,8 +283,7 @@ fi
 # Welcome message
 echo "Welcome to the Hestia Control Panel installer!"
 echo 
-echo "Please wait a moment while we update your system's repositories and"
-echo "install any necessary dependencies required to proceed with the installation..."
+echo "Please wait, the installer is now checking for missing dependencies..."
 echo 
 
 # Update apt repository
@@ -388,6 +387,25 @@ if [ -d /etc/netplan ] && [ -z "$force" ]; then
     fi
 fi
 
+# Validate whether installation script matches release version before continuing with install
+if [ -z "$withdebs" ] || [ ! -d "$withdebs" ]; then
+    release_branch_ver=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/release/src/deb/hestia/control |grep "Version:" |awk '{print $2}')
+    if [ "$HESTIA_INSTALL_VER" != "$release_branch_ver" ]; then
+        echo
+        echo -e "\e[91mInstallation aborted\e[0m"
+        echo "===================================================================="
+        echo -e "\e[33mERROR: Install script version does not match package version!\e[0m"
+        echo -e "\e[33mPlease download the installer from the release branch in order to continue:\e[0m"
+        echo ""
+        echo -e "\e[33mhttps://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh\e[0m"
+        echo ""
+        echo -e "\e[33mTo test pre-release versions, build the .deb packages and re-run the installer:\e[0m"
+        echo -e "  \e[33m./hst_autocompile.sh \e[1m--hestia no\e[21m\e[0m"
+        echo -e "  \e[33m./hst-install.sh .. \e[1m--with-debs /tmp/hestiacp-src/debs\e[21m\e[0m"
+        echo ""
+        check_result 1 "Installation aborted"
+    fi
+fi
 
 #----------------------------------------------------------#
 #                       Brief Info                         #
@@ -407,7 +425,7 @@ echo "                                    v${HESTIA_INSTALL_VER}"
 echo -e "\n"
 echo "===================================================================="
 echo -e "\n"
-echo 'The following server components will be installed on your system:'
+echo 'The following components will be installed on your server:'
 echo
 
 # Web stack
@@ -803,9 +821,11 @@ if [ -d "$withdebs" ]; then
 fi
 if [ "$release" = '16.04' ]; then
     software=$(echo "$software" | sed -e "s/libonig5/libonig2/")
+    software=$(echo "$software" | sed -e "s/libzip5/libzip4/")
 fi
 if [ "$release" = '18.04' ]; then
     software=$(echo "$software" | sed -e "s/libonig5/libonig4/")
+    software=$(echo "$software" | sed -e "s/libzip5/libzip4/")
 fi
 if [ "$release" = '20.04' ]; then
     software=$(echo "$software" | sed -e "s/setpriv/util-linux/")
@@ -829,22 +849,6 @@ fi
 #                     Install packages                     #
 #----------------------------------------------------------#
 
-if [ -z "$withdebs" ] || [ ! -d "$withdebs" ]; then
-    release_branch_ver=$(curl -s https://raw.githubusercontent.com/hestiacp/hestiacp/release/src/deb/hestia/control |grep "Version:" |awk '{print $2}')
-    if [ "$HESTIA_INSTALL_VER" != "$release_branch_ver" ]; then
-        echo
-        echo -e "\e[91mInstallation Aborted\e[0m"
-        echo "===================================================================="
-        echo -e "\e[33mInstall script does not match Hestia release version\e[0m"
-        echo -e "\e[33mPlease use the installer from the release branch\e[0m"
-        echo ""
-        echo -e "\e[33mTo test the beta version you need to build the hestia deb packages and re-run the installer\e[0m"
-        echo -e "  \e[33m./hst_autocompile.sh \e[1m--hestia no\e[21m\e[0m"
-        echo -e "  \e[33m./hst-install.sh .. \e[1m--with-debs /tmp/hestiacp-src/debs\e[21m\e[0m"
-        check_result 1 "Installation aborted"
-    fi
-fi
-
 # Disabling daemon autostart on apt-get install
 echo -e '#!/bin/sh\nexit 101' > /usr/sbin/policy-rc.d
 chmod a+x /usr/sbin/policy-rc.d
@@ -948,6 +952,46 @@ if [ "$release" != '20.04' ]; then
     chmod 755 /usr/bin/rssh
 fi
 
+# Check iptables paths and add symlinks when necessary
+if [ ! -e "/sbin/iptables" ]; then
+    if which iptables; then
+        ln -s "$(which iptables)" /sbin/iptables
+    elif [ -e "/usr/sbin/iptables" ]; then
+        ln -s /usr/sbin/iptables /sbin/iptables
+    elif whereis -B /bin /sbin /usr/bin /usr/sbin -f -b iptables; then
+        autoiptables=$(whereis -B /bin /sbin /usr/bin /usr/sbin -f -b iptables | cut -d '' -f 2)
+        if [ -x "$autoiptables" ]; then
+            ln -s "$autoiptables" /sbin/iptables
+        fi
+    fi
+fi
+
+if [ ! -e "/sbin/iptables-save" ]; then
+    if which iptables-save; then
+        ln -s "$(which iptables-save)" /sbin/iptables-save
+    elif [ -e "/usr/sbin/iptables-save" ]; then
+        ln -s /usr/sbin/iptables-save /sbin/iptables-save
+    elif whereis -B /bin /sbin /usr/bin /usr/sbin -f -b iptables-save; then
+        autoiptables_save=$(whereis -B /bin /sbin /usr/bin /usr/sbin -f -b iptables-save | cut -d '' -f 2)
+        if [ -x "$autoiptables_save" ]; then
+            ln -s "$autoiptables_save" /sbin/iptables-save
+        fi
+    fi
+fi
+
+if [ ! -e "/sbin/iptables-restore" ]; then
+    if which iptables-restore; then
+        ln -s "$(which iptables-restore)" /sbin/iptables-restore
+    elif [ -e "/usr/sbin/iptables-restore" ]; then
+        ln -s /usr/sbin/iptables-restore /sbin/iptables-restore
+    elif whereis -B /bin /sbin /usr/bin /usr/sbin -f -b iptables-restore; then
+        autoiptables_restore=$(whereis -B /bin /sbin /usr/bin /usr/sbin -f -b iptables-restore | cut -d '' -f 2)
+        if [ -x "$autoiptables_restore" ]; then
+            ln -s "$autoiptables_restore" /sbin/iptables-restore
+        fi
+    fi
+fi
+
 
 #----------------------------------------------------------#
 #                     Configure Hestia                     #
@@ -1806,10 +1850,10 @@ chown admin:admin $HESTIA/data/sessions
 
 
 #----------------------------------------------------------#
-#                  Configure FileManager                   #
+#                  Configure File Manager                   #
 #----------------------------------------------------------#
 
-echo "(*) Configuring Filegator FileManager..."
+echo "(*) Configuring File Manager..."
 source $HESTIA_INSTALL_DIR/filemanager/install-fm.sh > /dev/null 2>&1
 
 
@@ -1870,7 +1914,7 @@ cat $tmpfile
 rm -f $tmpfile
 
 # Add welcome message to notification panel
-$HESTIA/bin/v-add-user-notification admin 'Welcome!' 'For more information on how to use Hestia Control Panel, click on the Help icon in the top right corner of the toolbar.<br><br>Please report any bugs or issues on GitHub at<br>https://github.com/hestiacp/hestiacp/issues<br><br>Have a great day!'
+$HESTIA/bin/v-add-user-notification admin 'Welcome to Hestia Control Panel!' 'Please report any bugs or issues via <a href="https://github.com/hestiacp/hestiacp/issues" target="_new"><i class="fab fa-github"></i> GitHub</a> or e-mail <a href="mailto:info@hestiacp.com?Subject="['$new_version'] Bug Report: ">info@hestiacp.com</a><br><br><b>Have a wonderful day!</b><br><br><i class="fas fa-heart status-icon red"></i> The Hestia Control Panel development team'
 
 echo "(!) IMPORTANT: You must logout or restart the server before continuing."
 echo ""

+ 21 - 2
install/upgrade/manual/migrate_mpm_event.sh

@@ -34,7 +34,7 @@ for module in $a2modules; do
 done
 
 a2enmod --quiet mpm_event
-cp -f $HESTIA_INSTALL_DIR/apache2/hestia-event.conf /etc/apache2/conf.d/
+cp -f /usr/local/hestia/install/deb/apache2/hestia-event.conf /etc/apache2/conf.d/
 
 # Check if all went well
 if ! apache2ctl configtest >/dev/null 2>&1; then
@@ -47,5 +47,24 @@ if ! apache2ctl configtest >/dev/null 2>&1; then
     exit 1
 fi
 
-echo "mpm_event module was successfully activated."
+# Validate if www.conf is existent and port 9000 is active
+if ! lsof -Pi :9000 -sTCP:LISTEN -t >/dev/null; then
+    if [ $(ls /etc/php/7.3/fpm/pool.d/www.conf) ]; then
+        # Replace listen port to 9000
+        sed -i "s/listen = 127.0.0.1:.*/listen = 127.0.0.1:9000/g" /etc/php/7.3/fpm/pool.d/www.conf
+    else
+        # Copy www.conf file
+        cp -f $HESTIA_INSTALL_DIR/php-fpm/www.conf /etc/php/7.3/fpm/pool.d/
+    fi
+    # Restart php7.3 fpm service.
+    systemctl restart php7.3-fpm
+fi
+
+# Check again if port 9000 is now in use.
+if lsof -Pi :9000 -sTCP:LISTEN -t >/dev/null; then
+    echo "mpm_event module was successfully activated."
+else
+    echo "There went something wrong with your php-fpm configuration - port 9000 isnt active. Please check if webmail and phpmyadmin (if installed) are working properly."
+fi
+
 systemctl restart apache2

+ 11 - 4
install/upgrade/versions/latest.sh

@@ -7,6 +7,7 @@
 #######################################################################################
 
 # Check iptables paths and add symlinks when necessary
+
 if [ ! -e "/sbin/iptables" ]; then
     if which iptables; then
         ln -s "$(which iptables)" /sbin/iptables
@@ -47,13 +48,12 @@ if [ ! -e "/sbin/iptables-restore" ]; then
 fi
 
 if [ -e "/etc/apache2/mods-enabled/status.conf" ]; then
-    echo "(*) Hardening Apache2 Server Status Module..."
     sed -i '/Allow from all/d' /etc/apache2/mods-enabled/status.conf
 fi
 
 # Add sury apache2 repository
 if [ "$WEB_SYSTEM" = "apache2" ] && [ ! -e "/etc/apt/sources.list.d/apache2.list" ]; then
-    echo "(*) Install sury.org Apache2 repository..."
+    echo "(*) Configuring sury.org Apache2 repository..."
 
     # Check OS and install related repository
     if [ -e "/etc/os-release" ]; then
@@ -96,6 +96,7 @@ fi
 
 # Add daily midnight cron
 if [ -z "$($BIN/v-list-cron-jobs admin | grep 'v-update-sys-queue daily')" ]; then
+    echo "(*) Updating cron jobs..."
     command="sudo $BIN/v-update-sys-queue daily"
     $BIN/v-add-cron-job 'admin' '01' '00' '*' '*' '*' "$command"
 fi
@@ -114,6 +115,7 @@ fi
 
 # Add hestia-event.conf, if the server is running apache2
 if [ "$WEB_SYSTEM" = "apache2" ]; then
+    echo "(*) Updating Apache2 configuration..."
     # Cleanup
     rm --force /etc/apache2/mods-available/hestia-event.conf
     rm --force /etc/apache2/mods-enabled/hestia-event.conf
@@ -128,19 +130,24 @@ if [ "$WEB_SYSTEM" = "apache2" ]; then
     cp -f $HESTIA_INSTALL_DIR/apache2/status.conf /etc/apache2/mods-available/hestia-status.conf
     cp -f /etc/apache2/mods-available/status.load /etc/apache2/mods-available/hestia-status.load
     a2dismod --quiet status > /dev/null 2>&1
-    a2enmod --quiet hestia-status
+    a2enmod --quiet hestia-status > /dev/null 2>&1
     rm --force /etc/apache2/mods-enabled/status.conf # a2dismod will not remove the file if it isn't a symlink
 fi
 
 # Install Filegator FileManager during upgrade
 if [ ! -e "$HESTIA/web/fm/configuration.php" ]; then
-    echo "(*) Installing File Manager..."
+    echo "(*) Configuring File Manager..."
     # Install the FileManager
     source $HESTIA_INSTALL_DIR/filemanager/install-fm.sh > /dev/null 2>&1
+else 
+    echo "(*) Updating File Manager configuration..."
+    # Update configuration.php
+    cp -f $HESTIA_INSTALL_DIR/filemanager/filegator/configuration.php $HESTIA/web/fm/configuration.php
 fi
 
 # Enable nginx module loading
 if [ -f "/etc/nginx/nginx.conf" ]; then
+    echo "(*) Updating NGINX configuration..."
     if [ ! -d "/etc/nginx/modules-enabled" ]; then
         mkdir -p "/etc/nginx/modules-enabled"
     fi

+ 0 - 3
src/deb/hestia/postinst

@@ -37,9 +37,6 @@ upgrade_start_routine
 # Upgrade phpMyAdmin if applicable
 upgrade_phpmyadmin
 
-# Ensure that File Manager configuration is up-to-date
-upgrade_fm_configuration
-
 # Set new version number in hestia.conf
 upgrade_set_version
 

+ 3 - 3
src/hst_autocompile.sh

@@ -58,11 +58,11 @@ download_file() {
 }
 
 # Set compiling directory
-BUILD_DIR='/tmp/hestiacp-src/'
-DEB_DIR="$BUILD_DIR/debs/"
+BUILD_DIR='/tmp/hestiacp-src'
+DEB_DIR="$BUILD_DIR/debs"
 INSTALL_DIR='/usr/local/hestia'
 SRC_DIR="$(cd "$(dirname "$0")/.." && pwd)"
-ARCHIVE_DIR="$SRC_DIR/src/archive/"
+ARCHIVE_DIR="$SRC_DIR/src/archive"
 
 # Set command variables
 if [ ! -z "$2" ]; then

+ 36 - 0
web/bulk/firewall/ipset/index.php

@@ -0,0 +1,36 @@
+<?php
+// Init
+error_reporting(NULL);
+ob_start();
+session_start();
+
+// Main include
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+// Check token
+if ((!isset($_POST['token'])) || ($_SESSION['token'] != $_POST['token'])) {
+    header('location: /login/');
+    exit();
+}
+
+// Check user
+if ($_SESSION['user'] != 'admin') {
+    header("Location: /list/user");
+    exit;
+}
+
+$setname = $_POST['setname'];
+$action = $_POST['action'];
+switch ($action) {
+    case 'delete': $cmd='v-delete-firewall-ipset';
+        break;
+    default: header("Location: /list/firewall/ipset/"); exit;
+}
+
+
+foreach ($setname as $value) {
+    $v_name = escapeshellarg($value);
+    exec (HESTIA_CMD.$cmd." ".$v_name, $output, $return_var);
+}
+
+header("Location: /list/firewall/ipset/");

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 8 - 0
web/css/animate.min.css


+ 0 - 8
web/css/jquery.arcticmodal.css

@@ -1,8 +0,0 @@
-.arcticmodal-overlay,
-.arcticmodal-container { position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 1000; }
-.arcticmodal-container { overflow: auto; margin: 0; padding: 0; border: 0; border-collapse: collapse; }
-*:first-child+html .arcticmodal-container { height: 100% }
-.arcticmodal-container_i { height: 100%; margin: 0 auto; }
-.arcticmodal-container_i2 { padding: 24px; margin: 0; border: 0; vertical-align: middle; }
-.arcticmodal-error { padding: 20px; border-radius: 10px; background: #000; color: #fff; }
-.arcticmodal-loading { width: 80px; height: 80px; border-radius: 10px; background: #000 url(loading.gif) no-repeat 50% 50%; }

+ 0 - 36
web/css/jquery.fileupload.css

@@ -1,36 +0,0 @@
-@charset "UTF-8";
-/*
- * jQuery File Upload Plugin CSS 1.3.0
- * https://github.com/blueimp/jQuery-File-Upload
- *
- * Copyright 2013, Sebastian Tschan
- * https://blueimp.net
- *
- * Licensed under the MIT license:
- * http://www.opensource.org/licenses/MIT
- */
-
-.fileinput-button {
-  position: relative;
-  overflow: hidden;
-}
-.fileinput-button input {
-  position: absolute;
-  top: 0;
-  right: 0;
-  margin: 0;
-  opacity: 0;
-  -ms-filter: 'alpha(opacity=0)';
-  font-size: 200px;
-  direction: ltr;
-  cursor: pointer;
-}
-
-/* Fixes for IE < 8 */
-@media screen\9 {
-  .fileinput-button input {
-    filter: alpha(opacity=0);
-    font-size: 100%;
-    height: 100%;
-  }
-}

+ 0 - 0
web/css/animate.css → web/css/src/animate.css


+ 3885 - 0
web/css/src/styles.css

@@ -0,0 +1,3885 @@
+/*  Syntax Quick Reference
+  --------------------------
+  column($ratios: 1, $offset: 0, $cycle: 0, $uncycle: 0, $gutter: $jeet-gutter)
+  span($ratio: 1, $offset: 0)
+  shift($ratios: 0, $col_or_span: column, $gutter: $jeet-gutter)
+  unshift()
+  edit()
+  center($max_width: 1410px, $pad: 0)
+  stack($pad: 0, $align: false)
+  unstack()
+  align($direction: both)
+  cf()
+*/
+/**
+ * Grid settings.
+ * All values are defaults and can therefore be easily overidden.
+ */
+/**
+ * List functions courtesy of the wonderful folks at Team Sass.
+ * Check out their awesome grid: Singularity.
+ */
+/**
+ * Get  percentage from a given ratio.
+ * @param {number} [$ratio=1] - The column ratio of the element.
+ * @returns {number} - The percentage value.
+ */
+/**
+ * Work out the column widths based on the ratio and gutter sizes.
+ * @param {number} [$ratios=1] - The column ratio of the element.
+ * @param {number} [$gutter=$jeet-gutter] - The gutter for the column.
+ * @returns {list} $width $gutter - A list containing the with and gutter for the element.
+ */
+/**
+ * Get the set layout direction for the project.
+ * @returns {string} $direction - The layout direction.
+ */
+/**
+ * Replace a specified list value with a new value (uses built in set-nth() if available)
+ * @param {list} $list - The list of values you want to alter.
+ * @param {number} $index - The index of the list item you want to replace.
+ * @param {*} $value - The value you want to replace $index with.
+ * @returns {list} $list - The list with the value replaced or removed.
+ * @warn if an invalid index is supplied.
+ */
+/**
+ * Reverse a list (progressively enhanced for Sass 3.3)
+ * @param {list} $list - The list of values you want to reverse.
+ * @returns {list} $result - The reversed list.
+ */
+/**
+ * Get the opposite direction to a given value.
+ * @param {string} $dir - The direction you want the opposite of.
+ * @returns {string} - The opposite direction to $dir.
+ * @warn if an incorrect string is provided.
+ */
+/**
+ * Style an element as a column with a gutter.
+ * @param {number} [$ratios=1] - A width relative to its container as a fraction.
+ * @param {number} [$offset=0] - A offset specified as a fraction (see $ratios).
+ * @param {number} [$cycle=0] - Easily create an nth column grid where $cycle equals the number of columns.
+ * @param {number} [$uncycle=0] - Undo a previous cycle value to allow for a new one.
+ * @param {number} [$gutter=$jeet-gutter] - Specify the gutter width as a percentage of the containers width.
+ */
+/**
+ * An alias for the column mixin.
+ * @param [$args...] - All arguments get passed through to column().
+ */
+/**
+ * Get the width of a column and nothing else.
+ * @param {number} [$ratios=1] - A width relative to its container as a fraction.
+ * @param {number} [$gutter=$jeet-gutter] - Specify the gutter width as a percentage of the containers width.
+ */
+/**
+ * Get the gutter size of a column and nothing else.
+ * @param {number} [ratios=1] - A width relative to its container as a fraction.
+ * @param {number} [gutter=jeet.gutter] - Specify the gutter width as a percentage of the containers width.
+ */
+/**
+ * An alias for the column-width function.
+ * @param [$args...] - All arguments get passed through to column().
+ */
+/**
+ * An alias for the column-gutter function.
+ * @param [$args...] - All arguments get passed through to column().
+ */
+/**
+ * Style an element as a column without any gutters for a seamless row.
+ * @param {number} [$ratios=1] - A width relative to its container as a fraction.
+ * @param {number} [$offset=0] - A offset specified as a fraction (see $ratios).
+ * @param {number} [cycle=0] - Easily create an nth column grid where cycle equals the number of columns.
+ * @param {number} [uncycle=0] - Undo a previous cycle value to allow for a new one.
+ */
+/**
+ * Reorder columns without altering the HTML.
+ * @param {number} [$ratios=0] - Specify how far along you want the element to move.
+ * @param {string} [$col-or-span=column] - Specify whether the element has a gutter or not.
+ * @param {number} [$gutter=$jeet-gutter] - Specify the gutter width as a percentage of the containers width.
+ */
+/**
+ * Reset an element that has had shift() applied to it.
+ */
+/**
+ * View the grid and its layers for easy debugging.
+ * @param {string} [$color=black] - The background tint applied.
+ * @param {boolean} [$important=false] - Whether to apply the style as !important.
+ */
+/**
+ *  Alias for edit().
+ */
+/**
+ * Horizontally center an element.
+ * @param {number} [$max-width=1410px] - The max width the element can be.
+ * @param {number} [$pad=0] - Specify the element's left and right padding.
+ */
+/**
+ * Uncenter an element.
+ */
+/**
+ * Stack an element so that nothing is either side of it.
+ * @param {number} [$pad=0] - Specify the element's left and right padding.
+ * @param {boolean/string} [$align=false] - Specify the text align for the element.
+ */
+/**
+ * Unstack an element.
+ */
+/**
+ * Center an element on either or both axes.
+ * @requires A parent container with relative positioning.
+ * @param {string} [$direction=both] - Specify which axes to center the element on.
+ */
+/**
+ * Apply a clearfix to an element.
+ */
+/* ==========================================================================
+   Normalize.scss settings
+   ========================================================================== */
+/**
+ * Includes legacy browser support IE6/7
+ *
+ * Set to false if you want to drop support for IE6 and IE7
+ */
+
+/* ==========================================================================
+   Define Exo font family
+   ========================================================================== */
+/* exo-300 - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Exo Light'), local('Exo-Light'),
+       url('../webfonts/exo-v8-latin-ext_latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-300italic - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: italic;
+  font-weight: 300;
+  src: local('Exo Light Italic'), local('Exo-LightItalic'),
+       url('../webfonts/exo-v8-latin-ext_latin-300italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-300italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-regular - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Exo Regular'), local('Exo-Regular'),
+       url('../webfonts/exo-v8-latin-ext_latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-italic - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: italic;
+  font-weight: 400;
+  src: local('Exo Italic'), local('Exo-Italic'),
+       url('../webfonts/exo-v8-latin-ext_latin-italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-500 - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: normal;
+  font-weight: 500;
+  src: local('Exo Medium'), local('Exo-Medium'),
+       url('../webfonts/exo-v8-latin-ext_latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-500italic - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: italic;
+  font-weight: 500;
+  src: local('Exo Medium Italic'), local('Exo-MediumItalic'),
+       url('../webfonts/exo-v8-latin-ext_latin-500italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-500italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-600 - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Exo SemiBold'), local('Exo-SemiBold'),
+       url('../webfonts/exo-v8-latin-ext_latin-600.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-600.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-600italic - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: italic;
+  font-weight: 600;
+  src: local('Exo SemiBold Italic'), local('Exo-SemiBoldItalic'),
+       url('../webfonts/exo-v8-latin-ext_latin-600italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-600italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-700 - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Exo Bold'), local('Exo-Bold'),
+       url('../webfonts/exo-v8-latin-ext_latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* exo-700italic - latin-ext_latin */
+@font-face {
+  font-family: 'Exo';
+  font-style: italic;
+  font-weight: 700;
+  src: local('Exo Bold Italic'), local('Exo-BoldItalic'),
+       url('../webfonts/exo-v8-latin-ext_latin-700italic.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
+       url('../webfonts/exo-v8-latin-ext_latin-700italic.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+/* inconsolata-bold - latin */
+@font-face {
+  font-family: 'Inconsolata';
+  src: local('Inconsolata Bold'), local('Inconsolata-Bold'),
+      url('../webfonts/Inconsolata-Bold.woff2') format('woff2'),
+      url('../webfonts/Inconsolata-Bold.woff') format('woff');
+  font-weight: bold;
+  font-style: normal;
+}
+/* inconsolata - latin */
+@font-face {
+  font-family: 'Inconsolata';
+  src: local('Inconsolata Regular'), local('Inconsolata-Regular'),
+      url('../webfonts/Inconsolata-Regular.woff2') format('woff2'),
+      url('../webfonts/Inconsolata-Regular.woff') format('woff');
+  font-weight: normal;
+  font-style: normal;
+}
+
+/* Base
+   ========================================================================== */
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *  user zoom.
+ * 3. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using
+ *  `em` units.
+ */
+
+html {
+  font-family: sans-serif;
+  /* 1 */
+  -ms-text-size-adjust: 100%;
+  /* 2 */
+  -webkit-text-size-adjust: 100%;
+  /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+body {
+  margin: 0;
+  background-color: #fff;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+  /* 1 */
+  vertical-align: baseline;
+  /* 2 */
+}
+
+/**
+ * Prevents modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+[hidden],
+template {
+  display: none;
+}
+
+.hidden {
+  display: none;
+}
+/* Links
+   ========================================================================== */
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+a {
+  background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+a:active, a:hover {
+  outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+b,
+strong {
+  font-weight: 600;
+  color: #5f5f5f;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Addresses styling not present in IE 8/9.
+ */
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+/**
+ * 1. Remove border when inside `a` element in IE 8/9/10.
+ * 2. Improves image quality when scaled in IE 7.
+ */
+img {
+  border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+hr {
+  box-sizing: content-box;
+  height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+pre {
+  overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ * Correct font family set oddly in IE 6, Safari 4/5, and Chrome.
+ */
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+/**
+ * 1. Correct color not being inherited.
+ *  Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ * 4. Improves appearance and consistency in all browsers.
+ */
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit;
+  /* 1 */
+  font: inherit;
+  /* 2 */
+  margin: 0;
+  /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+button {
+  overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+button,
+select {
+  text-transform: none;
+  /*color: transparent !important;*/
+  text-shadow: 0 0 0 #4b4b4b !important;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *  and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *  `input` and others.
+ * 4. Removes inner spacing in IE 7 without affecting normal text inputs.
+ *  Known issue: inner spacing remains in IE 6.
+ */
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  /* 2 */
+  cursor: pointer;
+  /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+input {
+  line-height: normal;
+}
+
+/**
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ *  Known issue: excess padding remains in IE 6.
+ */
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box;
+  /* 1 */
+  padding: 0;
+  /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ *  (include `-moz` to future-proof).
+ */
+input[type="search"] {
+  -webkit-appearance: textfield;
+  /* 1 */
+  /* 2 */
+  box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ * 3. Corrects text not wrapping in Firefox 3.
+ * 4. Corrects alignment displayed oddly in IE 6/7.
+ */
+legend {
+  border: 0;
+  /* 1 */
+  padding: 0;
+  /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+textarea {
+  overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+optgroup {
+  font-weight: 600;
+}
+
+/* Tables
+   ========================================================================== */
+/**
+ * Remove most spacing between table cells.
+ */
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}
+
+* {
+  -webkit-tap-highlight-color: transparent;
+}
+
+body {
+/*  -webkit-touch-callout: none;
+  -webkit-text-size-adjust: none;
+  -webkit-user-select: none; */
+}
+
+html,
+input,
+textarea,
+select,
+button {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+html {
+  height: 100%;
+}
+
+body {
+  font-family: 'Exo', Arial;
+  overflow-x: hidden;
+  font-size: 0.9rem;
+  height: 100%;
+  color: #7c7c7c;
+}
+
+.body-login, .body-reset {
+  height: auto;
+  padding-top: 10%;
+  background: rgb(102,158,231) !important;
+  background: radial-gradient(circle, rgba(102,158,231,1) 0%, rgba(43,86,177,1) 100%) !important;
+}
+
+a {
+  text-decoration: none;
+  color: #7c7c7c;
+}
+
+.disabled {
+  text-decoration: line-through;
+}
+
+.clearfix:before,
+.clearfix:after {
+  content: '';
+  display: table;
+}
+
+.clearfix:after {
+  clear: both;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-small {
+  font-size: 0.85em;
+}
+
+.check-label {
+  display: inline-block;
+  cursor: pointer;
+  position: relative;
+  line-height: 16px;
+  padding-left: 26px;
+}
+
+.check-label:before {
+  content: '';
+  width: 16px;
+  height: 16px;
+  position: absolute;
+  left: 0;
+  top: 0;
+  display: inline-block;
+  z-index: 99;
+}
+
+.clicked-on.check-label:before,
+.selected .check-label:before {
+  content: '';
+  display: inline-block;
+  width: 27px;
+  height: 27px;
+  background-position: -225px -42px;
+  left: -6px;
+  top: -6px;
+}
+
+.l-center {
+  margin: 0 auto;
+  max-width: 1020px;
+}
+
+.l-logo {
+  background-image: url("/images/logo-header.png");
+  background-repeat: no-repeat;
+  float: left;
+  height: 28px;
+  margin-top: 5px;
+  width: 54px
+}
+
+.l-header {
+  background: linear-gradient(to bottom, rgba(104,145,196,1) 0%,rgba(69,114,181,1) 50%,rgba(65,90,149,1) 100%); 
+  background-color: #5070a6;
+  border-bottom: 1px solid rgba(255,255,255,0.95);
+  overflow: hidden;
+  position: fixed;
+  width: 100%;
+  z-index: 900;
+  height: 38px;
+  text-shadow: 1px 1px rgba(0,0,0,0.25);
+  box-shadow: 0px 4px 10px rgba(100,100,100,0.4);
+  border-bottom: 1px solid #fff;
+}
+
+.l-header a {
+  font-size: 0.8rem;
+}
+
+.l-menu__item--active {
+  /*background-color: #fff;*/
+}
+
+.l-menu__item.l-menu__item--active a {
+  color: #4686b8;
+  font-size: 0.8rem;
+  background: linear-gradient(to bottom, rgba(255,255,255,0.6) 0%,rgba(255,255,255,0.75) 30%,rgba(255,255,255,1) 95%);
+  text-shadow: 0px 1px rgba(255,255,255,0.8);
+  border-left: 1px solid rgba(255,255,255,0.98);
+  border-right: 1px solid rgba(255,255,255,0.98);
+}
+
+.l-menu__item.l-menu__item--active:hover {
+  box-shadow: none;
+}
+
+.l-menu {
+  float: left;
+  position: fixed;
+  margin-left: 70px;
+}
+.l-menu__item {
+  float: left;
+  font-weight: 600;
+}
+.l-menu__item a {
+  color: #f7f7f7;
+  position: relative;
+  line-height: 39px;
+  padding: 11px 10px;
+  border-left: 1px solid transparent;
+  border-right: 1px solid transparent; 
+}
+
+.l-menu__item a:hover {
+  color: #3b9de8 !important;
+  border: 0;
+  box-shadow: inset 0px 0px 6px rgba(255,255,255,0.6) !important;
+  transition: 0.2s;
+  border-left: 1px solid rgba(0,0,0,0.1);
+  border-right: 1px solid rgba(0,0,0,0.1);
+  color: #4686b8 !important;
+  background: linear-gradient(to bottom, rgba(255,255,255,0.6) 0%,rgba(255,255,255,0.75) 30%,rgba(255,255,255,1) 95%);
+  text-shadow: 0px 1px rgba(255,255,255,0.8);
+}
+
+.l-menu__item a:active {
+  border: 0;
+  background: linear-gradient(to bottom, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0.6) 30%,rgba(255,255,255,0.95) 95%);
+  color: #046c98 !important;
+  text-shadow: 0px -1px 1px rgba(255,255,255,0.5) !important;
+  box-shadow: inset 0px 0px 1px #fff,
+              inset -1px -1px 4px rgba(220,220,220,0.4) !important;
+  transition: 0.2s;
+  border-left: 1px solid rgba(0,0,0,0.15);
+  border-right: 1px solid rgba(0,0,0,0.15);
+}
+
+.l-menu.active .l-menu__item.focus a {
+  text-decoration: underline;
+  color: #5edad0;
+}
+.l-menu.active .l-menu__item.focus a:hover {
+  background-color: #f79b44;
+  color: #fff;
+}
+
+.panel-icon {
+  font-size: 1rem;
+  vertical-align: middle;
+  margin-top: -4px;
+}
+
+.l-profile {
+  overflow: hidden;
+  float: right;
+}
+
+.l-profile__username, .l-profile__logout,
+.l-profile__help, .l-profile__serversettings {
+  font-size: 1.1rem !important;
+}
+
+.l-profile__logout {
+  color: #dbf94e !important;
+}
+
+.l-profile__server {
+  color: #ceefff;
+  margin-top: 10px;
+  float: left;
+}
+
+.l-profile__notifications {
+  color: #fff;
+  cursor: pointer;
+  font-weight: 600;
+  padding: 10px 5px 0;
+  font-size: 1.2rem !important;
+  line-height: 0.95rem;
+}
+
+.l-profile__notifications.active.l-profile__notifications.updates:active {
+  background: linear-gradient(to bottom, rgba(255,255,255,0.6) 0%,rgba(255,255,255,0.75) 30%,rgba(255,255,255,1) 95%) !important;
+  color: #046c98 !important;
+  text-shadow: 0px -1px 1px rgba(255,255,255,0.5) !important;
+  box-shadow: 0px 1px 3px rgba(0,0,0,0.15),
+              inset 0px 0px 1px #fff,
+              inset -1px -1px 4px rgba(220,220,220,0.4) !important;
+  transition: 0.2s;
+}
+.l-profile__notifications:hover,.l-profile__notifications.updates:hover {
+  color: #3b9de8 !important;
+  text-shadow: 1px 1px rgba(255,255,255,0.5) !important;
+  background: linear-gradient(to bottom, rgba(255,255,255,0.75) 0%,rgba(255,255,255,0.87) 30%,rgba(255,255,255,1) 95%) !important;
+  transition: 0.2s;
+}
+
+.notification-container {
+  background-color: rgba(255,255,255,0.95);
+  box-shadow: 0 3px 20px 0 rgba(0, 0, 0, 0.4);
+  list-style-type: none;
+  margin: 0 18px;
+  max-height: 90%;
+  overflow-y: auto;
+  padding-left: 0;
+  position: fixed;
+  top: 34px;
+  width: 390px;
+  z-index: 300;
+  font-size: 0.8rem;
+  padding: 0;
+  color: #6f6f6f;
+  border-bottom-left-radius: 6px;
+  border-bottom-right-radius: 6px;
+  border: 1px solid #fff;
+  border-top: none;
+}
+
+.notification-container .empty {
+  text-align: center;
+  font-size: 1.2rem;
+  font-weight: normal;
+  padding: 4rem;
+}
+
+.notification-container .empty .status-icon {
+  color: #54a6e5;
+}
+
+.notification-container .unseen {
+  color: #6f6f6f;
+}
+
+.notification-container li {
+  border-bottom: 1px solid #e9e4e4;
+  padding: 1rem;
+}
+
+.notification-container  li:last-child {
+  border-bottom: none;
+}
+
+.notification-container .mark-seen {
+  background-color: #cc3366;
+  border: 1px solid #c41650;
+  border-radius: 10px;
+  cursor: pointer;
+  display: none;
+  float: right;
+  height: 7px;
+  margin-right: -5px;
+  margin-top: 9px;
+  width: 7px;
+}
+.notification-container .mark-seen:hover {
+  background-color: #fff;
+  border-color: #e83b75;
+}
+.notification-container .mark-seen:active {
+  background-color: #777;
+  border-color: #777;
+}
+.notification-container .unseen .mark-seen{
+  display: inline-block;
+}
+.notification-container .title {
+  color: #9e9e9e;
+  font-weight: 600;
+  line-height: 30px;
+  padding: 0;
+  text-transform: none;
+  float: none;
+  display: block;
+}
+.notification-container .title a {
+  color: #9e9e9e;
+}
+
+.notification-container .unseen .title a,
+.notification-container .unseen .title {
+  color: #cc3366;
+}
+.notification-container .unseen .title a:hover {
+  color: #e83b75;
+}
+.notification-container .unseen .title a:active {
+  color: #e83b75;
+}
+
+.notification-container a {
+  font-weight: 600;
+  color: #1a4492;/* #eee;*/
+}
+.notification-container a:hover {
+  color: #4a87fb;
+}
+.notification-container a:active {
+  color: #1a4492;
+}
+
+.notification-container .icon {
+  display: inline-block;
+  width: 0;
+}
+.notification-container .icon.starred {
+  display: inline-block;
+  width: 21px;
+}
+
+.notification-container .time {
+  font-size: 0.9em;
+  display: block;
+  text-align: right;
+  padding-top: 0.6rem;
+}
+
+.alert {
+  border-radius: 4px;
+  box-sizing: border-box;
+  display: block;
+  font-size: 0.8rem;
+  font-weight: 400;
+  margin-top: 1rem;
+  padding: 0.8rem;
+  position: relative;
+  text-align: left;
+  box-shadow: 0px 2px 4px rgba(0,0,0,0.2);
+  text-shadow: 0px 1px rgba(0,0,0,0.45);
+  border: 1px solid #fff;
+}
+
+.alert i.fas {
+  border-radius: 1rem;
+  font-size: 1.4rem;
+  font-weight: 600;
+  height: 2rem;
+  left: 0.6rem;
+  line-height: 2rem;
+  position: absolute;
+  text-align: center;
+  top: 0.8rem;
+  width: 2rem;
+}
+
+.alert.alert-with-icon {
+  padding-left: 3.2rem;
+  min-height: 3.5rem;
+}
+.alert.alert-info {
+  color: #fff;
+  background-color: #618ecc;
+}
+.alert.alert-info i.fas {
+  color: #618ecc;
+  background-color: white;
+}
+
+.alert.alert-danger {
+  color: #fff;
+  background-color: #ec6c6c;
+}
+.alert.alert-danger i.fas {
+  color: #ec6c6c;
+  background-color: white;
+}
+
+.alert.alert-success {
+  color: #fff;
+  background-color: #5ea64c;
+}
+.alert.alert-success i.fas {
+  color: #5ea64c;
+  background-color: white;
+}
+.alert a {
+  font-weight: bold;
+  color: #fff;
+}
+
+form#vstobjects .alert {
+  width: 380px;
+}
+
+.app-list.cards {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+}
+
+.app-form {
+  padding: 2em 1em 2em 9rem;
+}
+
+.app-form label {
+  font-size: 0.85rem;
+  padding-bottom: 3px;
+  font-weight: 600;
+  cursor: default;
+}
+
+.card {
+  float:left;
+  overflow: hidden;
+  background-color: #f5f5f5;
+  border:1px solid #d3d3d3;
+  box-sizing: border-box;
+  width:200px;
+  min-height:260px;
+  margin:1em;
+  padding-bottom: 0.5em;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.2);
+  color: #353535;
+  border-radius: 4px;
+  text-align: center;
+}
+
+.card.disable {
+  color: #b6b6b6;
+}
+
+.card.disable .card-thumb {
+  filter: grayscale(100%);
+  opacity: 0.3;
+}
+
+.card .card-details {
+  font-size: 0.8rem;
+  padding: 0.5em 0.8em;
+  border-top: 1px solid #e6e6e6;
+  text-align: center;
+
+}
+.card .card-details p {
+  margin: 0 0 0.3em 0;
+  font-size: 1em;
+}
+
+.card p.card-title {
+  font-size: 1.1em;
+  font-weight: 600;
+}
+
+.card .card-thumb {
+  background-color: #fff;
+  display: block;
+  height: 180px;
+  width: 200px;
+  text-align: center;
+}
+.card .card-thumb img {
+  max-height: 180px;
+  max-width: 200px;
+  height: auto;
+  width: auto;
+}
+
+.card button {
+  margin-top: 0.5em;
+  margin:0.3em;
+}
+
+.l-stat {
+  margin: 34px auto;
+  position: fixed;
+  background-color: #fff;
+  z-index: 100;
+  padding-top: 36px;
+  overflow: hidden;
+  text-align: center;
+  display: flex;
+  width: 100%;
+  max-width: 1020px;
+}
+
+.l-stat__col {
+  display: inline-block;
+  vertical-align: top;
+  flex: 1;
+}
+
+.l-stat__col a {
+  display: inline-block;
+  padding-bottom: 36px;
+  min-height: 70px;
+  width: 136px;
+  border-bottom: 4px solid #fff;
+  overflow: hidden;
+  background-color: #fff;
+  padding-top: 3px;
+  margin-top: -3px;
+  padding-left: 5px;
+}
+
+.l-stat__col a:hover {
+  border-bottom: 4px solid #e83b75;
+  transition: 0.3s;
+}
+.l-stat__col a:active {
+  border-bottom: 4px solid #d53067;
+}
+.l-stat__col--active a {
+  border-bottom: 4px solid #cc3366;
+}
+
+.l-stat.active .l-stat__col.focus a {
+  border-bottom: 4px solid #5edad0;
+}
+.l-stat.active .l-stat__col.focus a .l-stat__col-title {
+  color: #36B3A9;
+}
+
+
+.l-stat__col a:hover .l-stat__col-title {
+  color: #e83b75;
+}
+.l-stat__col a:active .l-stat__col-title {
+  color: #d53067;
+}
+
+
+.l-stat__col ul {
+  list-style-type: none;
+  font-size: 0.8rem;
+  padding-left: 0;
+  line-height: 14px;
+}
+.l-stat__col li {
+  color: #a0a0a0;
+  margin-bottom: 8px;
+  text-transform: lowercase;
+}
+.l-stat__col span {
+  padding-left: 15px;
+}
+.l-stat__col-title {
+  text-transform: uppercase;
+  font-weight: 600;
+  color: #5b5b5b;
+  min-height: 21px;
+  font-size: 16px;
+}
+
+.l-stat__col--active .l-stat__col-title {
+  color: #cc3366;
+  font-size: 16px;
+}
+
+.l-stat__col .fas {
+  color: #999999;
+  padding: 4px;
+}
+
+.l-stat__col--active .fas {
+  color: #cc3366;
+}
+
+.l-separator.selected,
+.l-separator {
+  height: 1px;
+  border-top: 1px solid #ddd;
+}
+
+div.l-content > div.l-separator:nth-of-type(2) {
+  margin-top: 180px;
+  width: 100%;
+  position: fixed;
+  z-index: 120;
+}
+
+div.l-content > div.l-separator:nth-of-type(4) {
+  margin-top: 225px;
+  width: 100%;
+  position: fixed;
+  z-index: 110;
+  border-top: none;
+  border-bottom: 1px solid #ddd;
+}
+
+.l-sort {
+  position: fixed;
+  width: 100%;
+  max-width: 1020px;
+  background-color: #fff;
+  z-index: 120;
+  margin-top: 181px;
+  height: 44px;
+}
+
+.l-sort__create-btn {
+  background-position: -331px -107px;
+  background-repeat: no-repeat;
+  bottom: -23px;
+  display: inline-block;
+  height: 45px;
+  left: 30px;
+  position: absolute;
+  width: 45px;
+  z-index: 3;
+}
+.l-sort__create-btn:hover {
+  background-position: -378px -107px;
+}
+.l-sort__create-btn:active {
+  background-position: -425px -107px;
+}
+.l-sort__create-btn--active {
+  background-position: -425px -107px;
+}
+
+.l-sort__create-btn.restore {
+  background-position: -331px -250px;
+  bottom: -22px;
+}
+.l-sort__create-btn.restore:hover {
+  background-position: -331px -250px;
+}
+.l-sort__create-btn.restore:active {
+  background-position: -331px -250px;
+}
+
+.l-sort__create-btn.edit {
+  background-position: -331px -154px;
+  bottom: -22px;
+}
+.l-sort__create-btn.edit:hover {
+  background-position: -378px -154px;
+}
+.l-sort__create-btn.edit:active {
+  background-position: -425px -154px;
+}
+
+.context-menu.sort-order {
+  display: inline-block;
+  position: absolute;
+  z-index: 3;
+  left: 397px;
+  margin: 0;
+  overflow: hidden;
+  top: 42px;
+  background-color: rgba(255,255,255,0.95);
+  list-style-type: none;
+  box-shadow: 0 2px 14px 0 rgba(20, 20, 20, 0.35);
+  border-radius: 4px;
+  border: 1px solid rgba(255,255,255,1);
+  padding: 0px;
+}
+.context-menu.sort-order li {
+  padding: 0;
+}
+.context-menu li {
+  border-bottom: 1px solid #ddd;
+  color: #2e2e2e;
+  cursor: pointer;
+  font-size: 0.8rem;
+  padding: 12px;
+}
+.context-menu.sort-order span.name {
+  display: inline-block;
+  padding: 12px;
+  width: 117px;
+  font-weight: 500;
+}
+.context-menu.sort-order span.up {
+  display: inline-block;
+  padding: 12px 14px;
+  width: 16px;
+}
+.context-menu.sort-order span.active {
+  background-color: #4f8bbc !important;
+  color: #4686b8;
+  font-size: 0.8rem;
+  background: linear-gradient(to bottom, rgba(255,255,255,0.6) 0%,rgba(255,255,255,0.75) 50%,rgba(255,255,255,0.95) 95%);
+  text-shadow: 0px 1px rgba(255,255,255,0.8);
+}
+.context-menu.sort-order span:hover {
+  color: #3b9de8;
+  text-shadow: 1px 1px rgba(255,255,255,0.5);
+  background: linear-gradient(to bottom, rgba(241,248,253,1) 0%,rgba(218,236,250,1) 50%,rgba(190,221,246,1) 51%,rgba(227,240,251,1) 100%);
+  box-shadow: inset 0px 0px 1px #fff,
+              inset 0px 0px 6px rgba(255,255,255,0.6);
+  transition: 0.2s;
+}
+.context-menu.sort-order span:active,.context-menu.sort-order span:focus {
+  background: linear-gradient(to bottom, rgba(210,232,250,1) 0%,rgba(187,220,247,1) 50%,rgba(162,207,244,1) 51%,rgba(194,224,248,1) 100%);
+  color: #046c98;
+  text-shadow: 0px -1px 1px rgba(255,255,255,0.5);
+  box-shadow: inset 0px 0px 1px #fff,
+              inset -1px -1px 4px rgba(220,220,220,0.4);
+}
+.context-menu.sort-order span.name i.fas.fa-sort-amount-down {
+  float: right;
+  margin-top: 2px;
+}
+.context-menu.sort-order li:last-child {
+  border-bottom: none;
+}
+.l-sort-toolbar {
+  float: right;
+  padding: 7px 0 7px 0;
+  text-transform: uppercase;
+  font-size: 0.8rem;
+}
+
+.l-sort-toolbar table{
+  float: right;
+}
+
+.l-sort-toolbar td.toggle-all {
+  padding-top: 7px;
+  padding-right: 10px;
+}
+
+.l-sort-toolbar .sort-by {
+  cursor: pointer;
+  padding-top: 7px;
+  padding-left: 10px;
+}
+.l-sort-toolbar .sort-by:hover {
+  color: #4b4b4b;
+}
+.l-sort-toolbar .sort-by:hover b {
+  color: #4b4b4b;
+}
+.l-sort-toolbar .sort-by:active {
+  color: #3b9de8;
+}
+.l-sort-toolbar .sort-by:active b {
+  color: #3b9de8;
+}
+
+.l-sort-toolbar .sort-by b {
+  text-transform: uppercase;
+  padding-left: 3px;
+  font-size: 0.8rem;
+}
+
+.l-sort-toolbar .toggle-all:hover {
+  color: #4b4b4b;
+}
+.l-sort-toolbar .toggle-all:active {
+  color: #3b9de8;
+}
+
+.l-sort-toolbar .l-select {
+  float: left;
+}
+.l-sort-toolbar td {
+  vertical-align: middle;
+}
+
+.l-sort-toolbar.subtitle  {
+  padding-left: 96px;
+}
+
+.l-sort-toolbar td.step-right:first-of-type {
+  padding-right: 20px;
+}
+
+.l-sort-toolbar td:nth-of-type(2) {
+/* ///  padding-right: 60px;*/
+}
+.l-sort-toolbar td:last-of-type {
+/* ///  padding-left: 40px; */
+}
+
+.l-sort-toolbar__filter-apply {
+  float: left;
+  width: 32px;
+  height: 30px;
+  border: 1px solid #ddd;
+  background-color: rgba(255,255,255,0.90);
+  text-shadow: 0px 1px rgba(255,255,255,0.95);
+  border-radius: 4px;
+  border-bottom-left-radius: 0px;
+  border-top-left-radius: 0px;
+  border-left: 0px;
+  box-shadow: inset 0px 0px 1px rgba(41,90,152,0.1), inset 0 0px 2px rgba(255,255,255,1);
+  text-shadow: 1px 1px rgba(255,255,255,0.9);
+  color: #006699;
+  padding: 0;
+  font-size: 0.9em;
+}
+
+.l-sort-toolbar__filter-apply:hover {
+  color: #3399cc;
+  background-color: #fff;
+}
+
+.l-sort-toolbar__filter-apply:active {
+  color: #409fd5;
+  box-shadow: inset 1px 1px 0px rgba(0,0,0,0.1);
+}
+
+.l-sort-toolbar__search {
+  float: left;
+  width: 25px;
+  height: 25px;
+  background-position: -333px -37px;
+  border: none;
+}
+.l-sort-toolbar__search:hover {
+  background-position: -368px -37px;
+  border-color: #afafac;
+}
+.l-sort-toolbar__search:active {
+  background-position: -404px -37px;
+  border-color: #50bdb5;
+}
+.l-sort-toolbar__search--active {
+  background-position: -404px -37px;
+  border-color: #50bdb5;
+}
+.l-sort-toolbar .vst {
+  padding: 0 12px;
+  color: #777;
+  text-transform: uppercase;
+  font-size: 0.8rem;
+  font-weight: 600;
+  line-height: 30px;
+}
+.l-sort-toolbar .vst:hover {
+  color: #cc3366;
+}
+.l-sort-toolbar .vst:active {
+  color: #3b9de8;
+}
+.l-sort-toolbar .vst.selected {
+  color: #cc3366;
+  /*color: #92af0b;*/
+}
+
+.l-unit-toolbar__buttonstrip {
+  margin-top: 12px;
+  display: inline-block;
+  font-size: 0.9em;
+}
+
+.l-unit-toolbar__buttonstrip a {
+  padding-left: 10px !important;
+  padding-right: 10px !important;
+  margin-right: 5px;
+}
+
+.l-unit-toolbar__buttonstrip .fas {
+  padding-right: 4px;
+}
+
+
+.subtitle {
+  color: #cc3366;
+  font-size: 0.8rem;
+  font-weight: 600;
+  margin: 20px 0 18px 129px;
+  text-transform: uppercase;
+}
+
+.l-select {
+  width: 178px;
+  border: 1px solid #ddd;
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+  overflow-x: hidden;
+  position: relative;
+  display: inline-block;
+  border-style: solid none solid solid;
+  font-weight: 400;
+}
+
+.lang-ru .l-select {
+  width: 199px;
+}
+
+.l-select:after {
+  pointer-events: none;
+  width: 7px;
+  height: 4px;
+  margin-top: -2px;
+  content: '';
+  position: absolute;
+  right: 10px;
+  top: 50%;
+}
+
+.l-select select {
+  border: 0;
+  background-color: transparent;
+  height: 28px;
+  min-width: 175px;
+  padding-left: 10px;
+  background-image: url("/images/arrow.png");
+  background-position: 160px;
+  background-repeat: no-repeat;
+  appearance: none;
+  -moz-appearance: none;
+  -webkit-appearance: none;
+}
+
+.l-select select:focus {
+  border: 0;
+  outline: 0;
+}
+.lang-ru .l-select select {
+  min-width: 215px;
+}
+.l-select select option {
+  padding: 7px;
+}
+
+.l-sort-toolbar .l-select {
+  float: left;
+  border: 1px solid #ddd;
+  background-color: rgba(255,255,255,0.90);
+  text-shadow: 0px 1px rgba(255,255,255,0.95);
+  border-radius: 4px;
+  border-bottom-right-radius: 0px;
+  border-top-right-radius: 0px;
+  border-right: 0px;
+  text-shadow: 1px 1px rgba(255,255,255,0.9);
+}
+
+.l-unit {
+  color: #707070;
+  padding: 0 0 0 14px;
+  overflow: hidden;
+  font-size: 0.8rem;
+  border-radius: 0;
+  border-left: 1px solid transparent;
+  border-right: 1px solid transparent;
+}
+
+.table-header {
+  font-size: 0.95em !important;
+  background: linear-gradient(to bottom, rgba(247,247,247,1) 0%,rgba(255,255,255,1) 100%) !important;
+  border-left: 1px solid #d0d0d0 !important;
+  border-right: 1px solid #d0d0d0 !important;
+  border-bottom: 1px solid #d0d0d0 !important;
+  border-top: 1px solid #d0d0d0 !important;
+  text-shadow: 0px 1px rgba(255,255,255,1);
+  box-shadow: inset 0px 1px 1px rgba(255,255,255,1), inset 0px 0px 1px rgba(255,255,255,1), inset 0px 0px 4px rgba(255,255,255,0.8), 0px 2px 6px rgba(140,140,140,0.35) !important;
+  border-top-left-radius: 0px;
+  border-top-right-radius: 0px;
+  border-bottom-left-radius: 6px;
+  border-bottom-right-radius: 6px;
+  min-height: 28px;
+  color: #707070;
+  padding: 0 0 0 14px;
+  overflow: hidden;
+  line-height: 1rem;
+  margin-top: 1px;
+}
+
+.table-header:hover {
+  background-color: linear-gradient(to bottom, rgba(247,247,247,1) 0%,rgba(255,255,255,1) 100%) !important;
+  border-left: 1px solid #d0d0d0 !important;
+  border-right: 1px solid #d0d0d0 !important;
+}
+
+.table-header .fas {
+  font-size: 1rem;
+}
+
+.units .l-unit {
+  border-bottom: 1px solid #ddd;
+  border-left: 1px solid transparent;
+  border-right: 1px solid transparent;
+  background-color: rgba(255,255,255,0.6);
+}
+
+.l-unit:hover, .units .l-unit:hover {
+  box-shadow: 0px 2px 10px rgba(150,150,150,0.20);
+  background-color: #f8f8f8;
+  text-shadow: 0px 1px rgba(255,255,255,0.5);
+  border-left: 1px solid #ddd;
+  border-right: 1px solid #ddd;
+}
+
+.units .l-unit.l-unit--starred {
+  border-left: 2px solid #cc3366;
+}
+.units.active .l-unit.focus {
+  border-left: 2px solid #5edad0;
+  background-color: #eff5fc;
+}
+.units.active .l-unit.focus .l-unit__name {
+  color: #36b3a9;
+}
+.units.active .l-unit.focus .l-unit-toolbar__col--right {
+  display: block;
+}
+
+.units > div:last-child {
+  border-bottom: none;
+}
+
+.l-unit-ft {
+  color: #7c7c7c;
+  padding: 0 0 0 15px;
+}
+
+.l-unit:hover .l-unit-toolbar__col--right {
+  display: block;
+}
+.l-unit--blue {
+  border-left: 2px solid #3b9de8;
+}
+
+.l-unit--suspended {
+  background-color: #eaeaea !important;
+  color: #c0c0c0;
+}
+
+.l-unit--suspended a {
+  color: #c0c0c0 !important;
+}
+
+.units .l-unit.l-unit--outdated {
+  background-color: #ffcaca;
+  color: #4b4b4b;
+  border-left: 5px solid #ff6f6f;
+  border-bottom: 1px solid #fff;
+}
+
+.l-unit--suspended .l-unit__name,
+.l-unit--suspended b,
+.l-unit--outdated .l-unit__name,
+.l-unit--outdated b {
+  color: #c0c0c0;
+}
+
+.l-unit--outdated .l-unit__name {
+  color: #333;
+}
+.l-unit--outdated b {
+  color: #4b4b4b;
+}
+
+.l-unit--suspended .l-percent {
+  border-color: #fff;
+}
+.l-unit--suspended .l-percent__fill {
+  background-color: #fff;
+}
+.l-unit--suspended .l-unit__name,
+.l-unit--suspended .l-unit__name span {
+  color: #ADADAD;
+}
+
+.l-unit--suspended.selected .l-unit__name,
+.l-unit--suspended.selected .l-unit__name span {
+  color: #777;
+}
+
+.l-unit--suspended.selected {
+  background-color: #f2eab8 !important;
+  color: #b2ac87 !important;
+}
+
+.l-unit--outdated.selected {
+  background: #765D5D !important;
+  color: #333 !important;
+}
+
+
+
+.l-unit--suspended.selected .l-unit__name,
+.l-unit--suspended.selected b,
+.l-unit--outdated.selected .l-unit__name,
+.l-unit--outdated.selected b,
+.l-unit--suspended.selected .l-percent,
+.l-unit--suspended.selected .l-percent__fill,
+.l-unit--suspended.selected .l-unit__name,
+.l-unit--suspended.selected .l-unit__name span {
+  color: #333 !important;
+}
+
+.l-unit.selected .l-percent {
+  border-bottom: 1px dotted #777;
+}
+
+
+.l-unit--selected {
+  background-color: #d1eddc;
+}
+.l-unit-toolbar{
+  display: none;
+}
+
+.l-unit label {
+  margin-bottom: 20px;
+}
+.l-unit__columns {
+  display: table;
+  width: 100%;
+}
+.l-unit__col {
+  display: table-cell;
+  padding-top: 15px;
+  vertical-align: top;
+  padding-bottom: 15px;
+  cursor: default;
+}
+
+.l-unit__col--left {
+  width: 100px;
+  padding-right: 10px;
+}
+
+.units.compact .l-unit__col--left {
+  vertical-align: top;
+}
+
+.l-unit__col--left.step-left {
+  padding-left: 30px;
+}
+
+.l-unit__col--right.total {
+  padding-left: 16px;
+}
+
+.l-unit__col--right.back {
+  padding-left: 78px
+}
+
+.l-sort-toolbar .step-left {
+  padding-left: 40px;
+}
+.step-right {
+  padding-right: 40px;
+}
+
+.l-unit__date {
+  font-size: 11px;
+  margin-top: 10px;
+  padding-bottom: 30px;
+  text-transform: uppercase;
+}
+
+.l-unit__suspended {
+  display: none;
+  font-size: 0.8rem;
+  font-weight: 600;
+  margin-top: 36px;
+  text-transform: uppercase;
+  margin-bottom: 14px;
+}
+
+.units.compact .l-unit__suspended {
+  margin-top: 1px;
+}
+
+.l-unit--outdated .l-unit__suspended,
+.l-unit--suspended .l-unit__suspended {
+  display: block;
+}
+
+.l-unit-ft .subtitle,
+.l-unit .subtitle {
+  color: #cc3366;
+  font-size: 0.8rem;
+  font-weight: 600;
+  margin: 20px 0 18px 129px;
+  text-transform: uppercase;
+}
+
+.l-unit.l-unit--outdated .l-unit__date {
+  color: #d24c4c;
+  font-size: 10px;
+  text-transform: uppercase;
+  font-weight: 600;
+}
+
+.l-unit__name {
+  color: #414141;
+  font-size: 22px;
+  margin-top: 10px;
+  margin-bottom: 10px;
+  font-weight: 500;
+  letter-spacing: -0.02em;
+}
+
+.l-unit__servername {
+  color: #414141;
+  font-size: 28px;
+  margin-bottom: 10px;
+  font-weight: 300;
+  letter-spacing: -0.02em;
+}
+
+.l-unit__stats.separate,
+.l-unit__name.separate {
+  padding-bottom: 15px;
+}
+
+.l-unit__name.small {
+  font-size: 16px;
+}
+
+.l-unit__name.small-2 {
+  font-size: 20px;
+}
+
+.l-unit__name span {
+  color: #999;
+  margin-left: 30px;
+  font-size: 0.85rem;
+  font-style: italic;
+}
+.l-unit__name span:first-of-type {
+  margin-left: 39px;
+}
+.l-unit__name b {
+  font-weight: normal;
+  font-style: italic;
+}
+
+.l-unit__ip {
+  margin-bottom: 26px;
+  font-size: 0.8rem;
+  color: #383838;
+}
+.l-unit__ip span {
+  padding-left: 3px;
+  padding-right: 3px;
+}
+.display-ip {
+  font-size: 0.8rem;
+}
+.display-ip span {
+  padding-left: 3px;
+  padding-right: 3px;
+}
+
+.l-unit__stats {
+  margin-bottom: 10px;
+  margin-left: 12%;
+}
+
+.l-unit__stats:hover {
+  border-left: 1px solid transparent !important;
+  border-right: 1px solid transparent !important;
+  box-shadow: none !important;
+  background: none !important;
+}
+
+.l-unit__stats table {
+  width: 100%;
+  table-layout: fixed;
+}
+.l-unit__stats td {
+  height: 22px;
+  padding-bottom: 3px;
+  vertical-align: top;
+}
+.l-unit__stat-col--left a, .l-unit__stat-col--left a:visited {
+  color: #353535;
+}
+.l-unit__stat-col--left a:hover {
+  color: #4c8bbe;
+}
+
+.l-unit__stat-col--left {
+  float: left;
+  width: 110px;
+}
+
+.l-unit__stat-col--left.border {
+  border-left: 1px solid #ebebeb;
+}
+.l-unit__stat-col--left.border-clear {
+  border-left: 1px solid transparent;
+}
+.l-unit__stat-col--left.super-compact {
+  width: 50px;
+}
+.l-unit__stat-col--left.compact {
+  width: 60px;
+}
+.l-unit__stat-col--left.compact-1 {
+  width: 70px;
+}
+.l-unit__stat-col--left.compact-2 {
+  width: 80px;
+}
+.l-unit__stat-col--left.compact-3 {
+  width: 90px;
+}
+.l-unit__stat-col--left.compact-4 {
+  width: 130px;
+}
+.l-unit__stat-col--left.compact-5 {
+  width: 160px;
+}
+.l-unit__stat-col--left.wide {
+  width: 190px;
+}
+.l-unit__stat-col--left.wide-2 {
+  width: 230px;
+}
+.l-unit__stat-col--left.wide-3 {
+  width: 250px;
+}
+.l-unit__stat-col--left.wide-4 {
+  width: 320px;
+}
+.l-unit__stat-col--left.wide-5 {
+  width: 350px;
+}
+.l-unit__stat-col--left.wide-6 {
+  width: 440px;
+}
+.l-unit__stat-col--left.wide-7 {
+  width: 550px;
+}
+
+.l-unit__stat-col--left.small-2 {
+  line-height: 11px;
+}
+
+.l-unit__stat-col--left.tiny {
+  font-size: 0.8rem;
+}
+
+.l-unit__stat-col--left.tiny b {
+  font-size: 18px;
+}
+
+
+.l-unit__stat-col--right {
+  float: left;
+  max-width: 152px;
+}
+
+.l-unit-toolbar__col--left {
+  float: left;
+  margin-left: -15px;
+  margin-top: 0;
+  padding-bottom: 0px;/* 8px */
+  padding-left: 15px;
+  padding-top: 15px;
+  width: 30px;
+  cursor: pointer;
+  display: none;
+}
+
+.l-unit-toolbar__col--right {
+  float: right;
+}
+
+body.mobile .l-unit-toolbar__col--right {
+  display: block;
+}
+
+.l-unit-toolbar .shortcut {
+  display: none;
+}
+
+.units.active .l-unit.focus .l-unit-toolbar .shortcut {
+  display: block;
+  background-color: #69a298;
+  border-radius: 13px;
+  color: #fff;
+  cursor: pointer;
+  display: block;
+  font-size: 0.8rem;
+  font-weight: 600;
+  line-height: 25px;
+  padding-left: 7px;
+  padding-right: 9px;
+  position: absolute;
+  right: 3px;
+  top: 3px;
+}
+.units.active .l-unit.focus .l-unit-toolbar .shortcut.delete {
+  font-size: 10px;
+  padding-left: 2px;
+  padding-right: 5px;
+  text-transform: capitalize;
+}
+.units.active .l-unit.focus .l-unit-toolbar .shortcut.enter {
+  font-size: 17px;
+  padding-left: 1px;
+  padding-right: 7px;
+}
+.units.active .l-unit.focus .l-unit-toolbar i {
+  background: none;
+}
+
+.l-unit__stat-col.volume {
+  font-size: 0.8rem;
+  line-height: 17px;
+  float: right;
+}
+
+.actions-panel__col {
+  display: inline-block;
+  min-width: 18px;
+  text-transform: uppercase;
+}
+
+.actions-panel__col a {
+  color: #777;
+  font-weight: 600;
+  font-size: 0.9rem;
+  display: inline-block;
+  cursor: pointer;
+}
+
+.lang-ru .actions-panel__col a {
+  font-size: 0.9rem;
+  padding-top: 1px;
+}
+.lang-tw .actions-panel__col a {
+  font-size: 0.9rem;
+  font-weight: normal;
+  line-height: 29px;
+}
+.lang-ar .actions-panel__col a {
+  font-size: 0.9rem;
+  font-weight: normal;
+  line-height: 31px;
+}
+
+.icon-pad-right {
+  margin-right: 5px;
+}
+
+.l-icon-up-arrow, .l-icon-down-arrow, .l-icon-star, .l-icon-to-top, .l-icon-shortcuts, .l-icon-star-orange, .l-icon-star-blue {
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.l-icon-down-arrow {
+  width: 7px;
+  height: 15px;
+  background-position: -280px -128px;
+}
+
+.l-icon-up-arrow {
+  width: 7px;
+  height: 15px;
+  background-position: -299px -129px;
+}
+
+
+.l-icon-star {
+  width: 36px;
+  height: 36px;
+  background-position: -216px 560px;
+  cursor: pointer;
+  visibility: hidden;
+}
+.l-unit--starred .l-icon-star {
+  background-position: -174px 560px;
+  visibility: visible;
+}
+.selected .l-icon-star {
+  filter: contrast(70%);
+  -webkit-filter:  contrast(70%);
+}
+
+.units.compact .l-icon-star {
+  margin-top: -14px;
+}
+
+.l-icon-star:hover {
+  background-position: 0px 560px;
+}
+
+.l-icon-star:active {
+  -background-position: -174px 560px;
+  background-position: -80px 562px;
+}
+
+.l-unit:hover .l-icon-star {
+  visibility: visible;
+}
+
+
+.l-icon-to-top {
+  width: 35px;
+  height: 35px;
+  background-position: -330px -68px;
+}
+.l-icon-to-top:hover {
+  background-position: -366px -68px;
+}
+.l-icon-to-top:active {
+  background-position: -402px -68px;
+}
+
+.l-icon-shortcuts {
+  width: 35px;
+  height: 35px;
+  background-position: -240px -281px;
+  border-radius: 18px;
+}
+.l-icon-shortcuts:hover {
+  background-position: -160px -281px;
+}
+.l-icon-shortcuts:active {
+  background-position: -198px -281px;
+}
+
+body.mobile .l-icon-to-top,
+body.mobile .l-icon-shortcuts {
+  display: none;
+}
+
+
+.l-icon-star-orange {
+  width: 13px;
+  height: 13px;
+  background-position: -178px -97px;
+}
+
+.l-icon-star-blue {
+  width: 13px;
+  height: 13px;
+  background-position: -134px -97px;
+}
+
+.media-top {
+  vertical-align: top;
+}
+
+.l-unit__stat-cols {
+  padding-right: 10px;
+}
+.l-unit__stat-cols.last {
+  padding-right: 0;
+}
+.l-unit__stat-cols.graph {
+  width: 200px;
+}
+.l-unit__stat-cols.tiny {
+  font-size:11px;
+  line-height: 19px;
+}
+
+.l-percent {
+  border-bottom: 1px dotted #ccc;
+  margin-top: 1px;
+  width: 200px;
+}
+.l-percent__fill {
+  background-color: #aacc0d;
+  height: 3px;
+  position: relative;
+  bottom: -1px;
+}
+
+.to-top {
+  display: inline-block;
+  position: fixed;
+  top: 90%;
+  right: 4%;
+  border: 1px solid #ddd;
+  padding: 8px;
+  border-radius: 50%;
+  background-color: #eee;
+  text-shadow: 1px 1px #fff;
+  box-shadow: 0px 2px 4px rgba(120,120,120,0.25),
+              inset 0px 0px 1px rgba(255,255,255,0.9);
+  z-index: 200;
+  width: 16px;
+  height: 16px;
+  text-align: center;
+}
+
+.to-shortcuts {
+  display: inline-block;
+  position: fixed;
+  top: 90%;
+  right: 8%;
+  border: 1px solid #ddd;
+  padding: 8px;
+  border-radius: 50%;
+  background-color: #eee;
+  text-shadow: 1px 1px #fff;
+  box-shadow: 0px 2px 4px rgba(120,120,120,0.25),
+              inset 0px 0px 1px rgba(255,255,255,0.9);
+  z-index: 200;
+  height: 16px;
+  width: 16px;
+  text-align: center;
+}
+
+
+/*
+#vstobjects {
+  margin-top: -1px;
+}
+*/
+
+#vstobjects .l-center {
+  padding-top: 20px;
+  padding-bottom: 30px;
+  font-size: 0.8rem;
+}
+
+.timer-container {
+  margin-top: 4px;
+}
+
+.timer-container .refresh-timer {
+  border: 2px solid #9f9f9f;
+  border-radius: 14px;
+  height: 14px;
+  width: 14px;
+  float: left;
+  margin: 2px 10px 0 0;
+}
+.timer-container .refresh-timer.paused {
+  border: 2px solid #9f9f9f;
+}
+.timer-container .refresh-timer.paused .loader-half.right,
+.timer-container .refresh-timer.paused .loader-half.dark {
+  background-color: #9d9f9f;
+}
+.timer-container .loader-half {
+  border-radius: 0 14px 14px 0;
+  height: 14px;
+  width: 7px;
+  float: left;
+}
+.timer-container .loader-half.left {
+  border-radius: 14px 0 0 14px;
+  background-color: #fff;
+}
+.timer-container .loader-half.right {
+  margin-left: 7px;
+  background-color: #9f9f9f;
+}
+.timer-container .loader-half.dark {
+  background-color: #9f9f9f;
+}
+.timer-container .movement {
+  float: left;
+  width: 14px;
+  height: 14px;
+  position: absolute;
+}
+.timer-container .movement.left {
+  z-index: 10;
+}
+.timer-container .movement.right {
+  transform: rotate(180deg);
+  -webkit-transform: rotate(180deg);
+}
+.timer-container .timer-button {
+  cursor: pointer;
+  text-decoration: underline;
+  margin: 7px 0 0 38px;
+  width: 15px;
+  float: left;
+  height: 10px;
+}
+.timer-container .timer-button.pause {
+  background: url(/images/pause.png) no-repeat ;
+}
+.timer-container .timer-button.play {
+  background: url(/images/start.png) no-repeat;
+}
+
+.uppercase {
+  text-transform: uppercase;
+}
+
+.title b,
+.title {
+  color: #cc3366;
+  font-size: 0.8rem;
+  font-weight: 600;
+  padding: 0 30px 0px 73px;
+  line-height: 30px;
+  text-transform: uppercase;
+}
+
+.title {
+  display: inline-block;
+  float: left;
+}
+
+
+
+
+/* form styles */
+
+
+
+.vst-error {
+  color: #ff3333;
+  font-weight: 600;
+  overflow: hidden;
+  max-width: 500px;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.vst-ok {
+  color: #53ba55;
+  overflow: hidden;
+  max-width: 500px;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  font-size: 0.8rem;
+}
+
+.l-unit-toolbar__buttonstrip .vst-ok, .l-unit-toolbar__buttonstrip .vst-error {
+  margin-right: 20px;
+}
+
+.vst-ok a {
+  color: #326b9b;
+}
+.vst-ok a:hover {
+  color: #cc3366;
+}
+.vst-ok a:active {
+  color: #d53067;
+}
+
+
+
+
+.data {
+  margin: 0 0 90px 0;
+}
+.data-col1 {
+  width: 148px;
+}
+
+.data-col1 td {
+  padding: 10px 0 0 5px;
+}
+
+.data-col1 tr:first-child td {
+  padding: 59px 0 0 5px;
+}
+
+.login-box td,
+.data td {
+  color: #4b4b4b;
+  font-size: 0.85rem;
+  padding-bottom: 3px;
+  font-weight: 600;
+}
+.input-label {
+  padding-top: 20px;
+}
+.data input[type="checkbox"] {
+  display: inline;
+  cursor: pointer;
+}
+.step-top {
+  padding-top: 18px;
+}
+.step-top-small {
+  padding-top: 14px;
+}
+.jump-top {
+  margin-top: -60px;
+}
+.jump-small-top {
+  margin-top: -12px;
+}
+.float-right {
+    display: inline-block;
+    float: right;
+}
+
+.data a {
+  text-decoration: none;
+}
+label {
+  cursor: pointer;
+}
+
+label:hover {
+  color: #333;
+}
+
+.vst-input {
+  background-color: #fff;
+  border: 1px solid #cfcfcf;
+  border-radius: 4px;
+  color: #4e4e4e;
+  font-family: 'Exo', Arial, Arial, Helvetica, sans-serif;
+  font-size: 0.8rem;
+  height: 20px;
+  margin: 2px 6px 0 0;
+  padding: 8px 3px 8px 14px;
+  width: 360px;
+  font-weight: normal;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.15);
+}
+.vst-input:hover {
+  border: 1px solid #94c8f0;
+}
+.vst-input:focus {
+  border: 1px solid #008fee;
+  background-color: #D7F9FF;
+  color: #333;
+}
+
+.vst-input:disabled,
+.vst-list:disabled {
+  background-color: #e7e7e7;
+  text-shadow: 1px 1px rgba(255,255,255,1);
+  color: #686868;
+}
+.vst-input:focus:disabled {
+  border-color: #f1f1f1;
+  background-color: #f1f1f1;
+}
+
+.vst-input:disabled:hover,
+.vst-list:disabled:hover {
+  border-color: #cfcfcf;
+}
+
+.vst-input.long {
+  width: 832px;
+}
+.vst-input.short {
+  width: 200px;
+}
+.vst-input.vst-list-editor {
+  border: none;
+  box-shadow: none;
+  position: absolute;
+  margin-top:-34px;
+  margin-left: 1px;
+  display: block;
+  width: 340px;
+  height: 1rem;
+}
+.vst-input.vst-list-editor:focus {
+  background-color: white;
+}
+
+.vst-list {
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  color: #4e4e4e;
+  font-family: 'Exo', Arial, Helvetica,sans-serif;
+  font-size: 0.8rem;
+  font-weight: normal;
+  height: 36px;
+  cursor: pointer;
+  margin: 2px 6px 0 0;
+  min-width: 380px;
+  padding: 4px 1px 4px 10px;
+  background-image: url("/images/arrow.png");
+  background-position: 360px;
+  background-repeat: no-repeat;
+  width: 380px;
+  appearance:none;
+  -moz-appearance:none;
+  -webkit-appearance:none;
+  text-shadow: 0 0 0 #4b4b4b;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.15);
+}
+
+select.vst-list:-moz-focusring {
+  color:transparent;
+}
+
+.vst-list.long-2 {
+  width: 486px;
+  background-position: 465px;
+}
+.vst-list option {
+  padding: 6px 1px 6px 15px;
+}
+.vst-list:hover {
+  border: 1px solid #94c8f0;
+}
+.vst-list:focus {
+  border: 1px solid #008fee;
+  color: #333;
+}
+
+.vst-list.flat {
+  border: 1px solid #fff;
+  color: #326b9b;
+  text-transform: uppercase;
+  font-weight: 600;
+  font-size: 0.8rem;
+  margin-left: -10px;
+  text-shadow: none !important;
+  box-shadow: none !important;
+}
+.vst-list.flat:hover {
+  color: #cc3366;
+}
+.vst-list.flat option {
+  color: #4e4e4e;
+}
+
+.vst-text {
+  cursor: default;
+}
+
+a.vst-text,
+a.vst-text b{
+  color: #326b9b;
+}
+a.vst-text:hover,
+a.vst-text:hover b{
+  color: #cc3366;
+}
+a.vst-text:active,
+a.vst-text:active b{
+  color: #cc3366;
+}
+
+.advanced-options {
+  background: linear-gradient(to bottom, rgba(247,247,247,1) 0%,rgba(255,255,255,1) 100%) !important;
+  border: 1px solid #ddd !important;
+  text-shadow: 0px 1px rgba(255,255,255,0.95);
+  box-shadow: inset 0px 0px 1px rgba(255,255,255,1), inset 0px 0px 4px rgba(255,255,255,0.8), 0px 4px 6px rgba(190,190,190,0.4) !important;
+  color: #30659d !important;
+  padding: 4px 0px 0px 18px;
+  overflow: hidden;
+  height: 28px;
+}
+
+.advanced-options a {
+  color: #30659d !important;
+}
+
+.advanced-options .fas {
+  margin-right: 20px;
+  width: 14px;
+}
+
+.vst-textinput {
+  background-color: #fff;
+  border: 1px solid #cfcfcf;
+  border-radius: 4px;
+  color: #4e4e4e;
+  font-size: 0.8rem;
+  padding: 5px;
+  width: 560px;
+  height: 60px;
+  font-family: 'Exo', Arial, Helvetica, sans-serif;
+  padding: 7px 1px 3px 14px;
+  font-weight: normal;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.15);
+}
+.vst-textinput:hover {
+  border: 1px solid #94c8f0;
+}
+.vst-textinput:focus {
+  border: 1px solid #008fee;
+  background-color: #D7F9FF;
+  color: #333;
+}
+.vst-textinput:disabled {
+  background-color: #f1f1f1;
+}
+.vst-textinput.console{
+  font-size: 0.8rem;
+  width: 630px;
+  height: 300px;
+  font-family: "Inconsolata", "Lucida Console", Monaco, monospace;
+  white-space: pre;
+}
+.vst-textinput.short {
+  width: 360px;
+}
+#advanced-options .console{
+  width: 833px;
+  height: 600px;
+}
+
+.generate {
+  color: #326b9b;
+  text-decoration: underline;
+  cursor: pointer;
+  margin-left: -3px;
+  padding: 0 3px;
+}
+.generate:hover {
+  background-color: #cc3366;
+  border-color: #cc3366;
+  color: #fff;
+}
+.generate:active {
+  background-color: #F7D616;
+  border-color: #F7D616;
+}
+.vst-advanced {
+  border-bottom: 0px solid #326b9b;
+  color: #326b9b;
+  font-size: 0.8rem;
+  padding: 2px 2px 0;
+  text-decoration: none;
+  text-transform: none;
+}
+.login-box .vst-advanced:hover {
+  color: #cc3366;
+  background-color: transparent;
+  border-color: transparent;
+  font-size: 0.85em !important;
+  box-shadow: none !important;
+  background: none !important;
+  border: none !important
+}
+
+.vst-advanced:hover {
+  color: #fff;
+  background-color: #cc3366;
+  border-color: #cc3366;
+  text-decoration: none;
+}
+
+.login-box .vst-advanced:active {
+  color: #fff;
+  background-color: #F7D616;
+  border-color: #F7D616;
+  text-decoration: none;
+  font-size: 0.85em !important;
+  box-shadow: none !important;
+  background: none !important;
+  border: none !important
+}
+
+.vst-advanced:active {
+  font-size: unset;
+}
+
+.login-box .vst-advanced {
+  border-bottom: none;
+  color: #326b9b;
+  font-size: 10px;
+  padding: 2px 2px 0;
+  text-decoration: none;
+  text-transform: uppercase;
+  font-size: 0.85em !important;
+  box-shadow: none !important;
+  background: none !important;
+  border: none !important
+}
+.vst-checkbox {
+  font-size: 0.85rem;
+  margin: 2px 6px 0 3px;
+  padding: 5px;
+}
+.lets-encrypt-note {
+  color: #89a40a !important;
+  font-style: italic;
+  font-weight: normal !important;
+  height: 30px;
+  padding-top: 10px;
+  vertical-align: top;
+}
+
+.additional-control {
+  margin-left: 17px;
+  color: #326b9b;
+  border-bottom: 0px solid #326b9b;
+  font-size: 0.8rem;
+  cursor: pointer;
+  text-transform: uppercase;
+  font-weight: 600;
+  padding: 2px 2px 0;
+  text-decoration: none;
+}
+.additional-control:hover {
+  background-color: #cc3366;
+  border-color: #cc3366;
+  color: #fff;
+}
+.additional-control:active {
+  color: #fff;
+  background-color: #aaa;
+}
+
+.additional-control.ftp-remove-user {
+  padding: 2px 0 0 0;
+}
+
+.additional-control.delete:hover,
+.additional-control.ftp-remove-user:hover {
+  background-color: #FF3438;
+  border-color: #FF3438;
+}
+.additional-control.delete:active,
+.additional-control.ftp-remove-user:active {
+  background-color: #FF5F5F;
+  border-color: #FF5F5F;
+}
+.additional-control.add:hover {
+  background-color: #3b9de8;
+  border-color: #3b9de8;
+}
+.additional-control.add:active{
+  background-color: #54a6e5;
+  border-color: #54a6e5;
+}
+
+.additional-control.remove-ns {
+  display: none;
+}
+
+.data .step-left {
+  padding-left: 50px;
+}
+.hide-password {
+  color: #2361a1;
+  margin-left: -36px;
+  padding-left: 3px;
+  z-index: 1;
+}
+.toggle-psw-visibility-icon {
+  cursor: pointer;
+  opacity: 1;
+  margin: -2px;
+}
+.show-passwords-enabled-action {
+  opacity: 0.4;
+}
+.ftp-path-value,
+.hint,
+td.hint {
+  color: #777;
+  font-size: 0.85rem;
+  font-style: italic;
+  font-weight: normal;
+}
+.ftp-path-prefix { padding-top: 12px; font-size: 0.8rem; color: #555; }
+
+.ui-dialog .ui-dialog-buttonpane button {
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.2),
+  inset 0px 0px 1px #fff,
+  inset 0px 0px 3px rgba(255,255,255,0.5) !important;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+  margin-bottom: -6px !important;
+  padding: 0 !important;
+}
+
+.ui-button, .button, .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-text-only.submit, .vst-advanced {
+  filter:chroma(color=#000);
+  cursor: pointer;
+  border-radius: 3px 3px 3px 3px !important;
+  font-size: 1.05em !important;
+  font-weight: 500 !important;
+  padding: 2px 16px 3px 20px !important;
+  min-width: 100px !important;
+  height: 28px !important;
+  color: #30659d !important;
+  border: 1px solid #0083db !important;
+  background-color: #3b9de8 !important;
+  background: linear-gradient(to bottom, rgba(235,243,249,1) 0%,rgba(192,216,236,1) 51%,rgba(223,235,245,1) 100%) !important;
+  box-shadow: 0px 1px 3px rgba(0,0,0,0.25),
+              inset 0px 0px 1px #fff,
+              inset 0px 0px 3px rgba(255,255,255,0.5) !important;
+  text-shadow: 0px 1px 1px rgba(255,255,255,0.85) !important;
+}
+.ui-button:hover, .button:hover, .ui-button.cancel:hover, .button.cancel:hover,
+.ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-text-only.submit:hover,
+.vst-advanced:hover, .to-top:hover, .to-shortcuts:hover {
+  color: #0077c6 !important;
+  text-shadow: 1px 1px rgba(255,255,255,0.5) !important;
+  border: 1px solid #54a6e5 !important;
+  background: linear-gradient(to bottom, rgba(241,248,253,1) 0%,rgba(190,221,246,1) 51%,rgba(227,240,251,1) 100%) !important;
+  box-shadow: 0px 1px 3px rgba(0,0,0,0.25),
+              inset 0px 0px 1px #fff,
+              inset 0px 0px 6px rgba(255,255,255,0.6) !important;
+  transition: 0.2s;
+}
+.ui-button:focus,.ui-button:active,
+.button:active,.button:focus,.ui-button.cancel:focus,.ui-button.cancel:active,
+.button.cancel:active,.button.cancel:focus,
+.ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-text-only.submit:active,
+.vst-advanced:active,.to-top:focus, .to-shortcuts:focus {
+  border: 1px solid #0066b4 !important;
+  background: linear-gradient(to bottom, rgba(194,224,248,1) 0%, rgba(162,207,244,1) 51%, rgba(210,232,250,1) 100%) !important;
+  color: #517bab !important;
+  text-shadow: 0px -1px 2px rgba(255,255,255,0.85) !important;
+  box-shadow: 0px 1px 2px rgba(0,0,0,0.2),
+              inset 0px 0px 1px #fff,
+              inset -1px -1px 4px rgba(220,220,220,0.4) !important;
+}
+
+.ui-button-text-only {
+  border: 0px !important;
+  background: transparent !important;
+  box-shadow: none !important;
+  text-shadow: 0px 1px rgba(255,255,255,0.5);
+}
+
+.ui-dialog .ui-dialog-buttonpane button span.ui-button-text {
+  padding: 2px !important;
+  font-size: 0.85rem !important;
+}
+
+.ui-dialog .ui-button:hover span {
+  color: #046c98 !important;
+}
+
+.ui-button-text-only .selected {
+  font-weight: 600 !important;
+}
+
+.ui-button.cancel,
+.button.cancel,
+.to-top, .to-shortcuts {
+  color: #717171 !important;
+  border: 1px solid #aaaaaa !important;
+  background: linear-gradient(to bottom, rgba(250,250,250,1) 0%,rgba(230,230,230,1) 51%,rgba(242,242,242,1) 100%) !important;
+}
+
+.ui-button-text {
+  padding: 0px !important;
+  color: #30659d !important;
+}
+.ui-button.cancel:active,
+.button.cancel:active,
+.to-top:active, .to-shortcuts:active {
+  border: 1px solid #378ccd;
+  background-color: #378ccd;
+}
+a.button.cancel {
+  padding: 8px 38px;
+  text-transform: capitalize;
+}
+
+
+.ui-dialog button.cancel {
+  color: #000;
+  border: 1px solid #4b4b4b;
+  background-color: #4b4b4b;
+}
+
+.ui-button.danger:hover, .button.danger:hover {
+  background: linear-gradient(to bottom, #fbf2f1 0%,#f6b4ac 51%,#fde6e3 100%) !important;
+  color: #F4301A !important;
+  text-shadow: 0px 1px rgba(255,255,255,0.5) !important;
+  border: 1px solid #F27E71 !important;
+}
+
+.ui-button.danger:active, .button.danger:active, .ui-button.danger:focus, .button.danger:focus {
+  background: linear-gradient(to bottom, #fcd0ca 0%,#f5a69d 50%,#f9e3df 100%) !important;
+  color: #ce1500 !important;
+  text-shadow: 0px 1px 1px rgba(255,255,255,0.2),
+               0px -1px 1px rgba(255,255,255,0.6) !important;
+  border: 1px solid #F4301A !important;
+}
+
+.ui-button span {
+  color: #fff;
+}
+.ui-button:hover span {
+  color: #4b4b4b !important;
+}
+.ui-button:active span {
+  color: #4b4b4b;
+}
+
+.ui-button.cancel span {
+  color: #777;
+}
+.ui-button:hover span {
+  color: #fff;
+}
+.ui-button:active span {
+  color: #fff;
+}
+
+.ui-dialog button.cancel span {
+  color: #777 !important;
+}
+
+.unlim-trigger {
+  cursor: pointer;
+  position: absolute;
+  margin-left: -38px;
+  margin-top: 13px;
+  z-index: 1;
+}
+.optional {
+  font-size: 0.8rem;
+  padding: 0 0 0 6px;
+  font-weight: normal;
+}
+.data-active b {
+  color: #3b9de8;
+  font-size: 0.8rem;
+  text-transform: uppercase;
+}
+.data-suspended b {
+  color: #A3A3A3;
+  font-size: 0.8rem;
+  font-weight: 600;
+  text-transform: uppercase;
+}
+.data-date {
+  font-weight: normal;
+  color: #777;
+  font-size: 0.8rem;
+  line-height: 23px;
+}
+.data-dotted {
+  vertical-align: top;
+}
+.mail-infoblock-td {
+  vertical-align: top;
+}
+.mail-infoblock {
+  font-size: 0.85rem;
+  color: #777;
+  border: 1px solid #d9d9d9;
+  padding: 0px 5px 12px 20px;
+  margin-top: 83px;
+  min-width: 320px;
+  overflow: hidden;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.15);
+  border-radius: 5px;
+}
+.mail-infoblock:hover {
+  overflow: visible;
+}
+
+.mail-infoblock td {
+  color: #505050;
+  font-size: 0.75rem;
+  height: 20px;
+  font-weight: normal;
+}
+.mail-infoblock td:first-child{
+  padding-right: 14px;
+  font-weight: 600;
+}
+.mail-infoblock div {
+  white-space: nowrap;
+}
+.mail-infoblock a {
+  color: #326b9b;
+}
+.mail-infoblock a:hover {
+  color: #cc3366;
+}
+
+.additional-info {
+    margin-top: 30px;
+    width: 547px;
+}
+.additional-info td {
+    font-size: 0.8rem;
+    height: 22px;
+    font-weight: normal;
+}
+
+.additional-info td.details {
+    padding-left: 20px;
+}
+
+:focus {outline:none;}
+::-moz-focus-inner {border:0;}
+
+.login {
+  background-color: rgba(255,255,255,0.7);
+  box-shadow: 0px 8px 25px rgba(0,0,0, 0.3),
+              inset 0px 0px 2px rgba(255,255,255,1);
+  font-family: 'Exo', Tahoma, Arial, Helvetica, sans-serif;
+  margin: 0;
+  padding: 0;
+  text-align: left;
+  vertical-align: top;
+  width: 500px;
+  border-radius: 6px;
+  cursor: default;
+}
+
+.login .vst-input {
+  border-color: #5787c8;
+}
+
+.login .button {
+  font-size: 0.8rem !important;
+}
+
+.login-welcome {
+  font-size: 1.05rem !important;
+  font-weight: 500 !important;
+  padding-bottom: 30px !important;
+  font-weight: 600;
+}
+
+.page-title {
+  font-size: 1.3rem !important;
+  font-weight: 400 !important;
+  padding-bottom: 30px !important;
+  letter-spacing: -0.01em;
+  cursor: default;
+}
+
+.qr-code {
+  border: 1px solid #cfcfcf;
+  border-radius: 4px;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.15);
+}
+
+.password-option {
+  margin-top: 15px;
+}
+
+.login a.error {
+  color: #BE5ABF;
+  font-size: 0.8rem;
+}
+
+.hestiacp {
+  color: #505050;
+}
+.hestiacp:hover {
+  color: #326b9b;
+}
+.hestiacp:active {
+  color: #cc3366;
+}
+
+.login-bottom {
+  height: 60px;
+  text-align: right;
+  vertical-align: top;
+  font-size: 0.75rem !important;
+  margin-right: 65px;
+}
+
+.l-unit.selected {
+  background-color: #f8f8f8;
+  color: #4b4b4b;
+  box-shadow: 0px 2px 10px rgba(150,150,150,0.20);
+  text-shadow: 0px 1px rgba(255,255,255,0.5);
+  border-left: 1px solid #ddd;
+  border-right: 1px solid #ddd;
+}
+
+.l-unit.selected:hover {
+  background-color: #fff5ce;
+  color: #4b4b4b;
+  box-shadow: 0px 2px 14px rgba(150,150,150,0.25);
+  text-shadow: 0px 1px rgba(255,255,255,0.6);
+}
+
+.l-unit.selected b,
+.l-unit.selected strong {
+  color: #4b4b4b;
+}
+
+
+/* MAIN MENU COLLAPSED */
+.collapsed .l-stat {
+  padding-top: 20px;
+}
+
+.collapsed .l-stat__col a {
+  height: 0;
+  min-height: 0;
+  overflow: hidden;
+}
+
+.collapsed .l-stat__col-title {
+  padding-top: 2px;
+}
+
+div.l-content.collapsed > div.l-separator:nth-of-type(2) {
+  margin-top: 93px;
+  position: fixed;
+}
+
+div.l-content.collapsed > div.l-separator:nth-of-type(4) {
+  margin-top: 138px;
+  position: fixed;
+}
+
+div.l-content.collapsed .l-sort {
+  margin-top: 94px;
+}
+
+.l-content > .units.l-center::before {
+  content: '';
+  display: block;
+  height: 225px;
+}
+
+.console-output {
+  font-family: "Inconsolata", "Lucida Console", Monaco, monospace;
+  font-size: 0.92rem;
+  color: #202020;
+}
+
+form#vstobjects {
+  padding-top: 240px;
+}
+
+form#vstobjects.suspended {
+  background-color: #fff;
+  padding-bottom: 30px;
+}
+
+#add-icon {
+  width: 45px;
+  height: 45px;
+  display: inline-block;
+  z-index: 3;
+}
+.l-sort__create-btn.restore #add-icon {
+  background-position: -378px -250px;
+}
+.l-sort__create-btn.edit #add-icon {
+  background-position: -378px -154px;
+}
+#tooltip {
+  background-color: #3b9de8;
+  border-radius: 15px;
+  bottom: 6px;
+  color: #fff;
+  font-size: 0.8rem;
+  font-weight: 600;
+  height: 26px;
+  left: 12px;
+  letter-spacing: 0;
+  line-height: 25px;
+  margin-left: 12px;
+  margin-top: 7px;
+  padding: 3px 14px 3px 27px;
+  position: absolute;
+  text-transform: uppercase;
+  white-space: nowrap;
+  word-break: keep-all;
+  z-index: -1;
+}
+
+.l-sort__create-btn:active #add-icon {
+  background-position: -425px -107px;
+}
+.l-sort__create-btn.restore:active #add-icon {
+  background-position: -425px -250px !important;
+}
+
+.l-sort__create-btn.edit:active #add-icon {
+  background-position: -425px -154px !important;
+}
+
+.l-sort__create-btn.edit:hover #tooltip {
+  background-color: #3b9de8;
+}
+.l-sort__create-btn.edit:active #tooltip {
+  background-color: #3BF0E6 !important;
+}
+
+.l-sort__create-btn:active #tooltip {
+  background-color: #54a6e5;
+}
+
+.pill {
+  border-radius: 12px;
+  display: inline-block;
+  text-shadow: 0px 1px 2px rgba(0,0,0,0.4);
+}
+
+.pill.usage {
+  margin-top: 8px;
+  font-size: 0.75rem;
+  padding: 4px;
+  padding-left: 8px;
+  padding-right: 8px;
+  margin-right: 10px;
+  line-height: 0.75rem;
+  box-shadow: 0px 1px 1px rgba(0,0,0,0.2), inset 0px 1px 0px rgba(0,0,0,0.08); 
+  background-color: rgba(255,255,255,0.75);
+  font-weight: 500;
+  border: 1px solid rgba(255,255,255,0.75);
+  text-shadow: 0px 1px 1px rgba(255,255,255,0.6);
+  color: #30659d;
+}
+
+.pill.usage b { color: #30659d; }
+
+.badge {
+  display: inline-block;
+  min-width: 24px;
+  min-height: 24px;
+  line-height: 24px;
+  border-radius: 50%;
+  font-weight: 700;
+  font-size: 0.75rem;
+  box-shadow: 0px 1px 2px rgba(70,70,70,0.5), 
+              inset 0px 2px 2px #fff;
+  text-shadow: 0px 1px 2px rgba(0,0,0,0.5);
+  border: 1px solid #b8b8b8 !important;
+}
+
+.badge.large {
+  min-width: 48px;
+  min-height: 48px;
+  line-height: 48px;
+}
+
+.badge.raised {
+  background: radial-gradient(ellipse at center, rgba(255,255,255,0.2) 0%,rgba(255,255,255,0.05) 100%);
+}
+
+.l-unit--suspended .badge {
+  background: #eaeaea !important;
+  color: #c0c0c0 !important;
+  text-shadow: 0px -1px #fafafa !important;
+  box-shadow: 0px 1px 2px rgba(120,120,120,0.3) !important;
+}
+
+.pill.gray, .badge.gray {
+  border: 1px solid #fff;
+  background-color: #eaeaea;
+  color: #6c6c6c;
+  text-shadow: 0px 1px #fafafa !important;
+}
+
+.pill.blue, .badge.blue {
+  border: 1px solid #fff;
+  background-color: #316198;
+  color: #fff;
+}
+
+.pill.purple, .badge.purple {
+  border: 1px solid #fff;
+  background-color: #8e2fca;
+  color: #fff;
+}
+
+.pill.teal, .badge.teal {
+  border: 1px solid #fff;
+  background-color: #33cccc;
+  color: #fff;
+}
+
+.pill.maroon, .badge.maroon {
+  border: 1px solid #fff;
+  background-color: #cc3366;
+  color: #fff;
+}
+
+.pill.red, .badge.red {
+  border: 1px solid #fff;
+  background-color: #ff3333;
+  color: #fff;
+}
+
+.pill.orange, .badge.orange {
+  border: 1px solid #fff;
+  background-color: #f6a800;
+  color: #fff;
+}
+
+.pill.green, .badge.green {
+  border: 1px solid #fff;
+  background-color: #53ba55;
+  color: #fff;
+}
+
+.pill.lightblue, .badge.lightblue {
+  border: 1px solid #fff;
+  background-color: #6eb6f0;
+  color: #fff;
+}
+
+.status-icon.large {
+  font-size: 1rem;
+}
+
+.status-icon.yellow, .status-icon.yellow:hover {
+  color: #f3e72c;
+}
+.status-icon.teal, .status-icon.teal:hover {
+  color: #33cccc;
+}
+.status-icon.purple, .status-icon.purple:hover {
+  color: #8e2fca;
+}
+
+.status-icon.maroon, .status-icon.maroon:hover {
+  color: #cc3366;
+}
+
+.status-icon.red, .status-icon.red:hover {
+  color: #ff3333;
+}
+
+.status-icon.green, .status-icon.green:hover {
+  color: #53ba55;
+}
+
+.status-icon.orange, .status-icon.orange:hover {
+  color: #ffc043;
+}
+
+.status-icon.lightblue, .status-icon.lightblue:hover {
+  color: #6eb6f0;
+}
+
+.status-icon.highlight, .status-icon.highlight:hover {
+  color: #323232;
+}
+
+.status-icon.blue, .status-icon.blue:hover {
+  color: #326b9b;
+}
+
+.status-icon.dim {
+  color: #ddd;
+  text-shadow: 1px 1px rgba(255,255,255,0.3);
+}
+
+.status-icon.dim {
+  color: #ddd;
+  text-shadow: 1px 1px rgba(255,255,255,0.3);
+}
+
+.l-unit--suspended .status-icon.dim {
+  color: #c0c0c0 !important;
+  text-shadow: 0px !important;
+}
+
+.noselect {
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  -user-select: none;
+}
+
+.search-input {
+  background-color: #fff;
+  border: 1px solid #ddd;
+  height: 26px;
+  line-height: 28px;
+  padding-left: 7px;
+  float: left;
+  width: 120px;
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+  border-right: 0;
+
+/*  visibility: hidden;*/
+  -webkit-transition: width .2s ease-out;
+  -moz-transition: width .2s ease-out;
+  -o-transition: width .2s ease-out;
+  transition: width .2s ease-out;
+}
+.lang-ru .search-input{
+  width: 74px;
+}
+.lang-ru .search-input.activated{
+  width: 70px;
+}
+.search-input.activated{
+  width: 120px;
+  visibility: visible;
+}
+.search-input:focus {
+/*
+  background-color: #e8fcff;
+  border-color: #75c9c2;
+  color: #333;
+*/
+}
+
+.lang-fr .search-input, .lang-de .search-input, .lang-nl .search-input {
+  width: 100px;
+}
+
+.float-left {
+  float: left;
+}
+.float-right {
+  float: right;
+}
+.display-inline-block {
+  display: inline-block;
+}
+.width-100p {
+  width: 100%;
+}
+
+.l-sort-toolbar table td {
+  float: left;
+  margin-left: 10px;
+}
+.l-sort-toolbar__search-box {
+  float: right !important;
+  padding-right: 0 !important;
+}
+.ui-dialog .ui-dialog-buttonpane button:nth-of-type(2) {
+  -background-color: #dfdedd;
+}
+
+.shortcuts {
+  background: rgba(50,50,50,0.93);
+  display: inline-block;
+  position: fixed;
+  left: 50%;
+  bottom: 0;
+  color: #eee;
+  width: 800px;
+  border: 1px solid rgba(255,255,255,0.7);
+  border-bottom: 0px;
+  font-size: 0.8rem;
+  z-index: 120;
+  transform: translate(-50%, 0);
+  border-top-left-radius: 6px;
+  border-top-right-radius: 6px;
+  box-shadow: 0px 4px 30px rgba(0,0,0,0.5);
+  line-height: 0.9rem;
+  cursor: default;
+}
+
+.shortcuts .header {
+  border-bottom: 1px solid #606060;
+  height: 43px;
+}
+
+.shortcuts .title {
+  text-transform: uppercase;
+  color: #ff3478;
+  padding: 7px 0 7px 14px;
+  display: inline-block;
+  float: left;
+  font-size: 0.85rem;
+  letter-spacing: -0.01em;
+
+}
+.shortcuts .close {
+  cursor: pointer;
+  display: inline-block;
+  float: right;
+  height: 32px;
+  padding-top: 11px;
+  width: 46px;
+}
+.shortcuts .close:hover {
+  color: #db0000;
+}
+.shortcuts .close:active {
+  color: #a60000;
+}
+.shortcuts .close .fas {
+  font-size: 0.8rem;
+  line-height: 1.4rem;
+}
+.shortcuts ul {
+  list-style-type: none;
+  padding: 30px 20px;
+  display: inline-block;
+  float: left;
+  width: 360px;
+}
+.shortcuts ul li {
+  padding: 5px 20px;
+}
+.shortcuts ul li.step-top {
+  padding-top: 30px;
+}
+.shortcuts ul li span {
+  color: #ff3478;
+  display: inline-block;
+  font-weight: 600;
+  padding: 0 20px 0 0;
+  text-align: right;
+/*  width: 140px;*/
+}
+
+.shortcuts ul li span.bigger {
+  font-size: 18px;
+}
+
+.description {
+  font-weight: normal;
+  line-height: 25px;
+  padding-bottom: 45px;
+  margin-left: 50px;
+}
+.description ul{
+  margin-top: 15px;
+  list-style: none;
+  padding-left: 0;
+}
+
+.description li{
+  margin: 10px 0;
+}
+
+.description a {
+  line-height: 30px;
+  text-decoration: underline;
+  color: #326b9b;
+}
+.description a.purchase {
+  color: #FFF;
+  background-color: #3b9de8;
+  border: none;
+  border-radius: 3px;
+  font-size: 0.8rem;
+  font-weight: 600;
+  padding: 7px 15px;;
+  text-transform: capitalize;
+  text-decoration: none;
+}
+.description a.purchase:hover {
+  background-color: #54a6e5;
+  color: #4b4b4b;
+}
+.description a.purchase:active {
+  background-color: #54a6e5;
+  color: #4b4b4b;
+}
+
+.description a.cancel {
+  background-color: #999;
+  border: none;
+  border-radius: 3px;
+  color: #fff;
+  font-size: 0.8rem;
+  font-weight: 600;
+  padding: 7px 15px;
+  text-transform: capitalize;
+  text-decoration: none;
+}
+.description a.cancel:hover {
+  background-color: #326b9b;
+}
+.description a.cancel:active {
+  background-color: #5f9491;
+}
+
+.description.cancel-success {
+  color: #8fac0a;
+  font-weight: 600;
+}
+
+.description .licence {
+  padding: 20px 0;
+  color: #326b9b;
+}
+
+.description .licence input {
+  margin-left: 17px;
+  width: 137px;
+}
+
+.description span {
+  font-style: italic;
+  line-height: 45px;
+  padding-top: 20px;
+}
+
+.description .twoco {
+  font-style: italic;
+  line-height: 15px;
+  font-size: 0.8rem;
+}
+
+.ui-dialog {
+  font-family: 'Exo', Arial, Helvetica, sans-serif !important;
+  font-weight: 500 !important;
+  background-color: rgba(255,255,255,0.9) !important;
+  box-shadow: inset 0px 1px 3px rgba(0,0,0,0.25), 
+              0 8px 40px 0 rgba(0, 0, 0, 0.35) !important;
+  border-radius: 6px !important;
+  border: 1px solid rgba(255,255,255,0.98) !important;
+  text-align: center !important;
+}
+
+.ui-dialog .ui-dialog-content {
+  color: #535353 !important;
+  padding: 10px 26px 30px !important;
+}
+
+.ui-dialog .ui-dialog-title {
+  margin: 0px !important;
+  color: #305ba9 !important;
+  font-size: 1.2em !important;
+  text-transform: none !important;
+  letter-spacing: -0.01em !important;
+  text-align: center !important;
+  float: none !important;
+  font-weight: 500;
+}
+
+.ui-dialog-buttonpane {
+  border-color: #fff!important;
+  box-shadow: inset 0px 0px 2px rgba(0,0,0,0.25);
+  border-bottom: 1px solid #fff !important;
+  background: #e0e0e0;
+  margin-top: 0px !important;
+  padding-top: 0px !important;
+}
+
+.ui-widget {
+  font-size: 0.85rem !important;
+}
+
+.ui-widget-overlay {
+  opacity: 0.8 !important;
+  background: rgba(10,10,10,0.9) !important;
+}
+
+.helper-container {
+  float: right;
+  margin-bottom: -450px;
+  margin-top: 410px;
+  margin-right: 22px;
+  padding-top: 3px;
+  width: 563px;
+  box-shadow: 0px 1px 4px rgba(0,0,0,0.15);
+  border: 1px solid #cfcfcf;
+  border-radius: 4px;
+}
+
+.context-helper {
+  text-transform: uppercase;
+  /*text-decoration: underline;*/
+  color: #777;
+  font-size: 0.8rem;
+  cursor: pointer;
+  font-weight: 600;
+  float: right;
+}
+.context-helper:hover {
+  color: #3b9de8;
+}
+.context-helper:active {
+  color: #cc3366;
+}
+
+
+.cron-helper-tabs {
+/*  margin-top: 30px;*/
+  border: none !important;
+  font-family: 'Exo', Arial, Helvetica, sans-serif !important;
+}
+
+.cron-helper-tabs a {
+  color: #777;
+  font-size: 0.8rem;
+  font-weight: 600;
+  line-height: 30px;
+  padding: 0 12px;
+  text-transform: uppercase;
+}
+
+.cron-helper-tabs a:hover {
+  color: #cc3366;
+}
+.cron-helper-tabs a:active {
+  color: #3b9de8;
+}
+.cron-helper-tabs .ui-tabs-selected a {
+  color: #cc3366;
+}
+
+.cron-helper-tabs select.short {
+  background-position: -388px -604px;
+  min-width: 30px;
+  width: 70px;
+}
+
+.cron-helper-tabs p {
+  color: #777;
+  font-size: 0.8rem;
+}
+.cron-helper-tabs p span{
+  padding-right: 15px;
+  padding-left: 25px;
+}
+.cron-helper-tabs p span.first{
+  display: inline-block;
+  padding-right: 15px;
+  width: 100px;
+  padding-left: 0;
+}
+
+.cron-helper-tabs .button {
+  width: auto;
+  background-color: #3b9de8;
+  border: 1px solid #3b9de8;
+  text-transform: capitalize;
+}
+.cron-helper-tabs .button:hover {
+  background-color: #5BD8CF;
+  border: 1px solid #5BD8CF;
+}
+.cron-helper-tabs .button:active {
+  background-color: #4FBCB4;
+  border: 1px solid #4FBCB4;
+}
+
+.context-helper-close {
+  cursor: pointer;
+  display: inline-block;
+  float: right;
+  height: 32px;
+  padding-top: 11px;
+  width: 46px;
+  filter: contrast(50%);
+}
+.context-helper-close:hover {
+  background-color: #aaa;
+  filter: none;
+}
+.context-helper-close:active {
+  background-color: #999;
+  filter: none;
+}
+
+.server-info {
+
+}
+
+.server-info-output {
+  color: #cc3366; 
+  padding: 10px 0 20px 20px; 
+  background: #fff;
+}
+
+.server-info-data {
+  margin-left: 100px; 
+  margin-top: -20px;
+}
+
+.server-info-name {
+  margin-top: 5px;
+  margin-bottom: 30px;
+}
+
+.server-info-output {
+  color: #cc3366; 
+  padding: 10px 0 20px 20px; 
+  background: #fff;
+}
+
+.icon-server-info {
+  font-size: 5.2em;
+  float: left;
+  margin-right: 32px;
+  margin-left: 2px;
+}
+
+.userlist-email {
+  font-size: 0.75rem;
+}
+
+.userlist-username {
+  font-size: 1.05em;
+}
+
+@media screen and (max-width: 950px) {
+  .helper-container {
+    display: none;
+  }
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 3885
web/css/styles.min.css


+ 0 - 92
web/css/uploadify.css

@@ -1,92 +0,0 @@
-/*
-Uploadify
-Copyright (c) 2012 Reactive Apps, Ronnie Garcia
-Released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
-*/
-
-.uploadify {
-	position: relative;
-	margin-bottom: 1em;
-}
-.uploadify-button {
-	background-color: #505050;
-	background-image: linear-gradient(bottom, #505050 0%, #707070 100%);
-	background-image: -o-linear-gradient(bottom, #505050 0%, #707070 100%);
-	background-image: -moz-linear-gradient(bottom, #505050 0%, #707070 100%);
-	background-image: -webkit-linear-gradient(bottom, #505050 0%, #707070 100%);
-	background-image: -ms-linear-gradient(bottom, #505050 0%, #707070 100%);
-	background-image: -webkit-gradient(
-		linear,
-		left bottom,
-		left top,
-		color-stop(0, #505050),
-		color-stop(1, #707070)
-	);
-	background-position: center top;
-	background-repeat: no-repeat;
-	-webkit-border-radius: 30px;
-	-moz-border-radius: 30px;
-	border-radius: 30px;
-	border: 2px solid #808080;
-	color: #FFF;
-	font: bold 12px Arial, Helvetica, sans-serif;
-	text-align: center;
-	text-shadow: 0 -1px 0 rgba(0,0,0,0.25);
-	width: 100%;
-}
-.uploadify:hover .uploadify-button {
-	background-color: #606060;
-	background-image: linear-gradient(top, #606060 0%, #808080 100%);
-	background-image: -o-linear-gradient(top, #606060 0%, #808080 100%);
-	background-image: -moz-linear-gradient(top, #606060 0%, #808080 100%);
-	background-image: -webkit-linear-gradient(top, #606060 0%, #808080 100%);
-	background-image: -ms-linear-gradient(top, #606060 0%, #808080 100%);
-	background-image: -webkit-gradient(
-		linear,
-		left bottom,
-		left top,
-		color-stop(0, #606060),
-		color-stop(1, #808080)
-	);
-	background-position: center bottom;
-}
-.uploadify-button.disabled {
-	background-color: #D0D0D0;
-	color: #808080;
-}
-.uploadify-queue {
-	margin-bottom: 1em;
-}
-.uploadify-queue-item {
-	background-color: #F5F5F5;
-	-webkit-border-radius: 3px;
-	-moz-border-radius: 3px;
-	border-radius: 3px;
-	font: 11px Verdana, Geneva, sans-serif;
-	margin-top: 5px;
-	max-width: 350px;
-	padding: 10px;
-}
-.uploadify-error {
-	background-color: #FDE5DD !important;
-}
-.uploadify-queue-item .cancel a {
-	background: url('../img/uploadify-cancel.png') 0 0 no-repeat;
-	float: right;
-	height:	16px;
-	text-indent: -9999px;
-	width: 16px;
-}
-.uploadify-queue-item.completed {
-	background-color: #E5E5E5;
-}
-.uploadify-progress {
-	background-color: #E5E5E5;
-	margin-top: 10px;
-	width: 100%;
-}
-.uploadify-progress-bar {
-	background-color: #0099FF;
-	height: 3px;
-	width: 1px;
-}

BIN
web/images/background-dots.png


BIN
web/images/document.png


BIN
web/images/edit_bg.png


BIN
web/images/flat_icons.png


BIN
web/images/in_progress.gif


BIN
web/images/progress.gif


BIN
web/images/ui-bg_flat_0_aaaaaa_40x100.png


BIN
web/images/ui-bg_glass_55_fbf9ee_1x400.png


BIN
web/images/ui-bg_glass_95_fef1ec_1x400.png


BIN
web/images/ui-icons_2e83ff_256x240.png


BIN
web/images/ui-icons_454545_256x240.png


BIN
web/images/ui-icons_888888_256x240.png


BIN
web/images/ui-icons_cd0a0a_256x240.png


+ 11 - 0
web/inc/i18n/de.php

@@ -846,4 +846,15 @@ $LANG['de'] = array(
     
     //header
     'Hestia Control Panel' => 'Hestia Control Panel',
+
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Als Standardsprache für alle Benutzer festlegen',
+    
+        //2FA 
+    'Forgot token' => 'Token vergessen',
+    '2FA Token' => '2FA Token',
+    '2FA Reset successfully' => '2FA Token wurde mit Erfolg zurückgesetzt. Sie können sich jetzt erneut anmelden',
+    'Reset 2FA' => '2FA zurücksetzen',
+    '2FA Reset Code' => 'Kontowiederherstellungscode',
+    'Invalid or missing token' => 'Ungültiger oder fehlender Kontowiederherstellungscode',  
 );

+ 10 - 0
web/inc/i18n/en.php

@@ -849,4 +849,14 @@ $LANG['en'] = array(
     //header
     'Hestia Control Panel' => 'Hestia Control Panel',
 
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Set as default language for all users',
+    
+    //2FA 
+    'Forgot token' => 'Forgot token',
+    '2FA Token' => '2FA Token',
+    '2FA Reset successfully' => '2FA Token has been reset with success. You are now able to login again',
+    'Reset 2FA' => 'Reset 2FA',
+    '2FA Reset Code' => 'Account Recovery Code',
+    'Invalid or missing token' => 'Invalid or missing token',
 );

+ 11 - 1
web/inc/i18n/fr.php

@@ -851,5 +851,15 @@ $LANG['fr'] = array(
     
     //header
     'Hestia Control Panel' => 'Hestia Control Panel',
-
+    
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Définir comme langue par défaut pour tous les utilisateurs',
+    
+    //2FA 
+    'Forgot token' => 'Jeton oublié',
+    '2FA Token' => 'Jeton 2FA',
+    '2FA Reset successfully' => 'Le jeton 2FA a été réinitialisé avec succès. Vous pouvez maintenant vous reconnecter',
+    'Reset 2FA' => 'Réinitialiser le jeton 2FA',
+    '2FA Reset Code' => 'Code de récupération de compte',
+    'Invalid or missing token' => 'Jeton non valide ou manquant',
 );

+ 10 - 0
web/inc/i18n/it.php

@@ -848,4 +848,14 @@ $LANG['it'] = array(
     //header
     'Hestia Control Panel' => 'Hestia Control Panel',
 
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Imposta come lingua predefinita per tutti gli utenti',
+    
+        //2FA 
+    'Forgot token' => 'Codice dimenticato',
+    '2FA Token' => 'Codice 2fa',
+    '2FA Reset successfully' => 'Il codice 2FA è stato ripristinato correttamente. Ora puoi accedere di nuovo',
+    'Reset 2FA' => 'Reimposta il codice 2FA',
+    '2FA Reset Code' => 'Codice di recupero dell\'account',
+    'Invalid or missing token' => 'Codice non valido o mancante',
 );

+ 14 - 3
web/inc/i18n/nl.php

@@ -515,7 +515,7 @@ $LANG['nl'] = array(
     'USER_EXCLUSIONS' => 'Type mapnaam, één per mijn. Om alle mappen uit te sluiten gebruik *',
 
 
-    'Welcome to Hestia Control Panel'  => 'Welkom bij het Hestia Controlepaneel',
+    'Welcome to Hestia Control Panel'  => 'Welkom bij HestiaCP',
     'MAIL_FROM'  => 'Hestia Controlepaneel <noreply@%s>',
     'GREETINGS_GORDON_FREEMAN' => "Hallo %s %s,\n",
     'GREETINGS' => "Hallo,\n",
@@ -527,7 +527,7 @@ $LANG['nl'] = array(
     'Database Credentials'  => 'Database gegevens',
     'DATABASE_READY' => "De database is succesvol aangemaakt en klaar voor gebruik.\n\nDatabase: %s\nGebruiker: %s\nWachtwoord: %s\n%s\n\n--\nHestia Controlepaneel\n",
 
-    'forgot password'  => 'Wachtwoord vergeten',
+    'forgot password'  => 'Vergeten',
     'Confirm'  => 'Bevestig',
     'New Password'  => 'Nieuw wachtwoord',
     'Confirm Password'  => 'Bevestig wachtwoord',
@@ -834,7 +834,7 @@ $LANG['nl'] = array(
     'Bandwidth Usage' => 'Dataverkeer verbuik',
     
     //reset
-    'Forgot Password' => 'Wachtwoord vergeten',
+    'Forgot Password' => 'Wachtwoord Vergeten',
     //web
     'Quick Install App' => 'Quick Install App',
     //webapp 
@@ -849,4 +849,15 @@ $LANG['nl'] = array(
     
     //header
     'Hestia Control Panel' => 'Hestia Control Panel',
+    
+    // Set default language
+    'SYSTEM_SET_DEFAULT_LANGUAGE' => 'Stel standaard taal in voor alle gebruikers',
+    
+        //2FA 
+    'Forgot token' => 'Token vergeten',
+    '2FA Token' => '2FA Token',
+    '2FA Reset successfully' => '2FA is met success gereset. Je kunt nu normaal inloggen.',
+    'Reset 2FA' => 'Herstel 2FA Code',
+    '2FA Reset Code' => 'Account Herstel Code',
+    'Invalid or missing token' => 'Ongeldige of geen token',
 );

+ 0 - 1
web/js/cheef-editor/.gitignore

@@ -1 +0,0 @@
-.idea

+ 0 - 22
web/js/cheef-editor/README.md

@@ -1,22 +0,0 @@
-jQuery-ace
-==========
-
-Original repo: https://github.com/cheef/jquery-ace
-
-jQuery plugin for ACE Code Editor, http://ace.ajax.org. It embeds ACE Code Editor to any choosen ``div`` or ``textarea``.
-
-## How to install
-
-See all documentation and examples here http://cheef.github.com/jquery-ace
-
-## How to contribute
-
-1. Fork it
-2. Create your feature branch (`git checkout -b my-new-feature`)
-3. Commit your changes (`git commit -am 'Add some feature'`)
-4. Push to the branch (`git push origin my-new-feature`)
-5. Create new Pull Request
-
-## Author
-
-Ivan Garmatenko **cheef.che at gmail.com**

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/ace.js


+ 0 - 1
web/js/cheef-editor/ace/ext-static_highlight.js

@@ -1 +0,0 @@
-ace.define("ace/ext/static_highlight",["require","exports","module","ace/edit_session","ace/layer/text"],function(e,t,n){var r=e("../edit_session").EditSession,i=e("../layer/text").Text,s=".ace_editor {font-family: 'Monaco', 'Menlo', 'Droid Sans Mono', 'Courier New', monospace;font-size: 12px;}.ace_editor .ace_gutter { width: 25px !important;display: block;float: left;text-align: right; padding: 0 3px 0 0; margin-right: 3px;}.ace_line { clear: both; }*.ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;}";t.render=function(e,t,n,o,u){o=parseInt(o||1,10);var a=new r("");a.setMode(t),a.setUseWorker(!1);var f=new i(document.createElement("div"));f.setSession(a),f.config={characterWidth:10,lineHeight:20},a.setValue(e);var l=[],c=a.getLength();for(var h=0;h<c;h++)l.push("<div class='ace_line'>"),u||l.push("<span class='ace_gutter ace_gutter-cell' unselectable='on'>"+(h+o)+"</span>"),f.$renderLine(l,h,!0,!1),l.push("</div>");var p="<div class=':cssClass'>        <div class='ace_editor ace_scroller ace_text-layer'>            :code        </div>    </div>".replace(/:cssClass/,n.cssClass).replace(/:code/,l.join(""));return f.destroy(),{css:s+n.cssText,html:p}}})

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/ext-textarea.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/keybinding-emacs.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/keybinding-vim.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-abap.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-asciidoc.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-c9search.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-c_cpp.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-clojure.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-coffee.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-coldfusion.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-csharp.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-css.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-dart.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-diff.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-dot.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-glsl.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-golang.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-groovy.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-haml.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-haxe.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-html.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-jade.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-java.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-javascript.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-json.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-jsp.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-jsx.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-latex.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-less.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-liquid.js


+ 0 - 1
web/js/cheef-editor/ace/mode-lisp.js

@@ -1 +0,0 @@
-ace.define("ace/mode/lisp",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lisp_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./lisp_highlight_rules").LispHighlightRules,u=function(){var e=new o;this.$tokenizer=new s(e.getRules())};r.inherits(u,i),function(){}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/lisp_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){var e="case|do|let|loop|if|else|when",t="eq|neq|and|or",n="null|nil",r="cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn",i=this.createKeywordMapper({"keyword.control":e,"keyword.operator":t,"constant.language":n,"support.function":r},"identifier",!0);this.$rules={start:[{token:"comment",regex:";.*$"},{token:["storage.type.function-type.lisp","text","entity.name.function.lisp"],regex:"(?:\\b(?:(defun|defmethod|defmacro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"},{token:["punctuation.definition.constant.character.lisp","constant.character.lisp"],regex:"(#)((?:\\w|[\\\\+-=<>'\"&#])+)"},{token:["punctuation.definition.variable.lisp","variable.other.global.lisp","punctuation.definition.variable.lisp"],regex:"(\\*)(\\S*)(\\*)"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b"},{token:i,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:'"(?=.)',next:"qqstring"}],qqstring:[{token:"constant.character.escape.lisp",regex:"\\\\."},{token:"string",regex:'[^"\\\\]+',merge:!0},{token:"string",regex:"\\\\$",next:"qqstring",merge:!0},{token:"string",regex:'"|$',next:"start",merge:!0}]}};r.inherits(s,i),t.LispHighlightRules=s})

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-lua.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-luapage.js


+ 0 - 1
web/js/cheef-editor/ace/mode-lucene.js

@@ -1 +0,0 @@
-ace.define("ace/mode/lucene",["require","exports","module","ace/lib/oop","ace/mode/text","ace/tokenizer","ace/mode/lucene_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("./text").Mode,s=e("../tokenizer").Tokenizer,o=e("./lucene_highlight_rules").LuceneHighlightRules,u=function(){this.$tokenizer=new s((new o).getRules())};r.inherits(u,i),t.Mode=u}),ace.define("ace/mode/lucene_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/lang"),s=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"constant.character.negation",regex:"[\\-]"},{token:"constant.character.interro",regex:"[\\?]"},{token:"constant.character.asterisk",regex:"[\\*]"},{token:"constant.character.proximity",regex:"~[0-9]+\\b"},{token:"keyword.operator",regex:"(?:AND|OR|NOT)\\b"},{token:"paren.lparen",regex:"[\\(]"},{token:"paren.rparen",regex:"[\\)]"},{token:"keyword",regex:"[\\S]+:"},{token:"string",regex:'".*?"'},{token:"text",regex:"\\s+"}]}};r.inherits(o,s),t.LuceneHighlightRules=o})

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-makefile.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-markdown.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-objectivec.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-ocaml.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-perl.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-pgsql.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-php.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-powershell.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-python.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-r.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-rdoc.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-rhtml.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-ruby.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-scad.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-scala.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-scss.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
web/js/cheef-editor/ace/mode-sh.js


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels