From 937100e9bb2a2f5ab035e283e01e6d96e569ee51 Mon Sep 17 00:00:00 2001 From: marvin-borner@live.com Date: Sat, 14 Apr 2018 21:01:44 +0200 Subject: Added login things --- .../assets/font-starcraft/css/font-starcraft.css | 61 + .../assets/font-starcraft/fonts/font-starcraft.eot | Bin 0 -> 48420 bytes .../assets/font-starcraft/fonts/font-starcraft.svg | 22 + .../assets/font-starcraft/fonts/font-starcraft.ttf | Bin 0 -> 48248 bytes .../font-starcraft/fonts/font-starcraft.woff | Bin 0 -> 39164 bytes .../assets/userfrosting/css/AdminLTE-skins-all.css | 1770 +++++++ .../core/assets/userfrosting/css/AdminLTE.css | 4932 ++++++++++++++++++++ .../assets/userfrosting/css/tablesorter-reflow.css | 61 + .../core/assets/userfrosting/css/uf-alerts.css | 23 + .../core/assets/userfrosting/css/uf-collection.css | 15 + .../userfrosting/css/uf-jqueryvalidation.css | 10 + .../core/assets/userfrosting/css/userfrosting.css | 204 + .../core/assets/userfrosting/favicons/README.md | 7 + .../favicons/android-chrome-144x144.png | Bin 0 -> 20991 bytes .../favicons/android-chrome-192x192.png | Bin 0 -> 29935 bytes .../favicons/android-chrome-256x256.png | Bin 0 -> 42828 bytes .../userfrosting/favicons/android-chrome-36x36.png | Bin 0 -> 3150 bytes .../favicons/android-chrome-384x384.png | Bin 0 -> 69092 bytes .../userfrosting/favicons/android-chrome-48x48.png | Bin 0 -> 4736 bytes .../favicons/android-chrome-512x512.png | Bin 0 -> 96438 bytes .../userfrosting/favicons/android-chrome-72x72.png | Bin 0 -> 8367 bytes .../userfrosting/favicons/android-chrome-96x96.png | Bin 0 -> 12470 bytes .../apple-touch-icon-114x114-precomposed.png | Bin 0 -> 14098 bytes .../favicons/apple-touch-icon-114x114.png | Bin 0 -> 12666 bytes .../apple-touch-icon-120x120-precomposed.png | Bin 0 -> 15188 bytes .../favicons/apple-touch-icon-120x120.png | Bin 0 -> 13650 bytes .../apple-touch-icon-144x144-precomposed.png | Bin 0 -> 19338 bytes .../favicons/apple-touch-icon-144x144.png | Bin 0 -> 17393 bytes .../apple-touch-icon-152x152-precomposed.png | Bin 0 -> 20475 bytes .../favicons/apple-touch-icon-152x152.png | Bin 0 -> 18420 bytes .../apple-touch-icon-180x180-precomposed.png | Bin 0 -> 25283 bytes .../favicons/apple-touch-icon-180x180.png | Bin 0 -> 22957 bytes .../apple-touch-icon-57x57-precomposed.png | Bin 0 -> 5279 bytes .../favicons/apple-touch-icon-57x57.png | Bin 0 -> 4660 bytes .../apple-touch-icon-60x60-precomposed.png | Bin 0 -> 5706 bytes .../favicons/apple-touch-icon-60x60.png | Bin 0 -> 5017 bytes .../apple-touch-icon-72x72-precomposed.png | Bin 0 -> 7498 bytes .../favicons/apple-touch-icon-72x72.png | Bin 0 -> 6615 bytes .../apple-touch-icon-76x76-precomposed.png | Bin 0 -> 8080 bytes .../favicons/apple-touch-icon-76x76.png | Bin 0 -> 7180 bytes .../favicons/apple-touch-icon-precomposed.png | Bin 0 -> 25283 bytes .../userfrosting/favicons/apple-touch-icon.png | Bin 0 -> 22957 bytes .../assets/userfrosting/favicons/favicon-16x16.png | Bin 0 -> 1374 bytes .../assets/userfrosting/favicons/favicon-32x32.png | Bin 0 -> 2678 bytes .../core/assets/userfrosting/favicons/favicon.ico | Bin 0 -> 15086 bytes .../core/assets/userfrosting/favicons/ieconfig.xml | 12 + .../assets/userfrosting/favicons/manifest.json | 51 + .../userfrosting/favicons/mstile-144x144.png | Bin 0 -> 20296 bytes .../userfrosting/favicons/mstile-150x150.png | Bin 0 -> 18368 bytes .../userfrosting/favicons/mstile-310x150.png | Bin 0 -> 19511 bytes .../userfrosting/favicons/mstile-310x310.png | Bin 0 -> 46338 bytes .../assets/userfrosting/favicons/mstile-70x70.png | Bin 0 -> 12070 bytes .../userfrosting/favicons/safari-pinned-tab.svg | 246 + .../core/assets/userfrosting/images/cupcake.png | Bin 0 -> 19738 bytes .../core/assets/userfrosting/images/logo.svg | 514 ++ .../core/assets/userfrosting/js/AdminLTE-custom.js | 117 + .../core/assets/userfrosting/js/AdminLTE.js | 763 +++ .../core/assets/userfrosting/js/attrchange.js | 124 + .../js/fortress-jqueryvalidation-methods.js | 57 + .../assets/userfrosting/js/handlebars-helpers.js | 119 + .../core/assets/userfrosting/js/query-string.js | 65 + .../js/tablesorter/widget-sort2Hash.js | 271 ++ .../core/assets/userfrosting/js/uf-alerts.js | 285 ++ .../core/assets/userfrosting/js/uf-captcha.js | 13 + .../core/assets/userfrosting/js/uf-collection.js | 345 ++ .../core/assets/userfrosting/js/uf-copy.js | 50 + .../core/assets/userfrosting/js/uf-form.js | 297 ++ .../core/assets/userfrosting/js/uf-init.js | 26 + .../userfrosting/js/uf-jqueryvalidation-config.js | 49 + .../core/assets/userfrosting/js/uf-modal.js | 192 + .../core/assets/userfrosting/js/uf-table.js | 704 +++ .../userfrosting/js/uf-tablesorter-parsers.js | 53 + 72 files changed, 11458 insertions(+) create mode 100755 login/app/sprinkles/core/assets/font-starcraft/css/font-starcraft.css create mode 100755 login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.eot create mode 100755 login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.svg create mode 100755 login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.ttf create mode 100755 login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.woff create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/AdminLTE-skins-all.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/tablesorter-reflow.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/uf-alerts.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/uf-collection.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/uf-jqueryvalidation.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/css/userfrosting.css create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/README.md create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/manifest.json create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg create mode 100755 login/app/sprinkles/core/assets/userfrosting/images/cupcake.png create mode 100755 login/app/sprinkles/core/assets/userfrosting/images/logo.svg create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/AdminLTE-custom.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/AdminLTE.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/attrchange.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/fortress-jqueryvalidation-methods.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/handlebars-helpers.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/query-string.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/tablesorter/widget-sort2Hash.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-captcha.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-collection.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-copy.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-form.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-init.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-jqueryvalidation-config.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-modal.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-table.js create mode 100755 login/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js (limited to 'login/app/sprinkles/core/assets') diff --git a/login/app/sprinkles/core/assets/font-starcraft/css/font-starcraft.css b/login/app/sprinkles/core/assets/font-starcraft/css/font-starcraft.css new file mode 100755 index 0000000..d5d38ef --- /dev/null +++ b/login/app/sprinkles/core/assets/font-starcraft/css/font-starcraft.css @@ -0,0 +1,61 @@ +@font-face { + font-family: 'starcraft'; + src:url('../fonts/font-starcraft.eot?h9vi58'); + src:url('../fonts/font-starcraft.eot?#iefixh9vi58') format('embedded-opentype'), + url('../fonts/font-starcraft.woff?h9vi58') format('woff'), + url('../fonts/font-starcraft.ttf?h9vi58') format('truetype'), + url('../fonts/font-starcraft.svg?h9vi58#starcraft') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="sc-"], [class*=" sc-"] { + font-family: 'starcraft'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.sc-terran:before { + content: "\e609"; +} +.sc-marine:before { + content: "\e600"; +} +.sc-goliath:before { + content: "\e605"; +} +.sc-siege-tank:before { + content: "\e604"; +} +.sc-zerg:before { + content: "\e60a"; +} +.sc-zergling:before { + content: "\e602"; +} +.sc-hydralisk:before { + content: "\e603"; +} +.sc-ultralisk:before { + content: "\e601"; +} +.sc-protoss:before { + content: "\e60b"; +} +.sc-zealot:before { + content: "\e606"; +} +.sc-dragoon:before { + content: "\e607"; +} +.sc-reaver:before { + content: "\e608"; +} diff --git a/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.eot b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.eot new file mode 100755 index 0000000..0a2208d Binary files /dev/null and b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.eot differ diff --git a/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.svg b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.svg new file mode 100755 index 0000000..c4e289d --- /dev/null +++ b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.svg @@ -0,0 +1,22 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.ttf b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.ttf new file mode 100755 index 0000000..559deba Binary files /dev/null and b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.ttf differ diff --git a/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.woff b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.woff new file mode 100755 index 0000000..a6b329f Binary files /dev/null and b/login/app/sprinkles/core/assets/font-starcraft/fonts/font-starcraft.woff differ diff --git a/login/app/sprinkles/core/assets/userfrosting/css/AdminLTE-skins-all.css b/login/app/sprinkles/core/assets/userfrosting/css/AdminLTE-skins-all.css new file mode 100755 index 0000000..53577c4 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/AdminLTE-skins-all.css @@ -0,0 +1,1770 @@ +/* + * Skin: Blue + * ---------- + */ +.skin-blue .main-header .navbar { + background-color: #3c8dbc; +} +.skin-blue .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-blue .main-header .navbar .nav > li > a:hover, +.skin-blue .main-header .navbar .nav > li > a:active, +.skin-blue .main-header .navbar .nav > li > a:focus, +.skin-blue .main-header .navbar .nav .open > a, +.skin-blue .main-header .navbar .nav .open > a:hover, +.skin-blue .main-header .navbar .nav .open > a:focus, +.skin-blue .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-blue .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-blue .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-blue .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-blue .main-header .navbar .sidebar-toggle:hover { + background-color: #367fa9; +} +@media (max-width: 767px) { + .skin-blue .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-blue .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-blue .main-header .navbar .dropdown-menu li a:hover { + background: #367fa9; + } +} +.skin-blue .main-header .logo { + background-color: #367fa9; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue .main-header .logo:hover { + background-color: #357ca5; +} +.skin-blue .main-header li.user-header { + background-color: #3c8dbc; +} +.skin-blue .content-header { + background: transparent; +} +.skin-blue .wrapper, +.skin-blue .main-sidebar, +.skin-blue .left-side { + background-color: #222d32; +} +.skin-blue .user-panel > .info, +.skin-blue .user-panel > .info > a { + color: #fff; +} +.skin-blue .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-blue .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-blue .sidebar-menu > li:hover > a, +.skin-blue .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #3c8dbc; +} +.skin-blue .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-blue .sidebar a { + color: #b8c7ce; +} +.skin-blue .sidebar a:hover { + text-decoration: none; +} +.skin-blue .treeview-menu > li > a { + color: #8aa4af; +} +.skin-blue .treeview-menu > li.active > a, +.skin-blue .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-blue .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-blue .sidebar-form input[type="text"], +.skin-blue .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; +} +.skin-blue .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-blue .sidebar-form input[type="text"]:focus, +.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-blue .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +.skin-blue.layout-top-nav .main-header > .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue.layout-top-nav .main-header > .logo:hover { + background-color: #3b8ab8; +} +/* + * Skin: Blue + * ---------- + */ +.skin-blue-light .main-header .navbar { + background-color: #3c8dbc; +} +.skin-blue-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-blue-light .main-header .navbar .nav > li > a:hover, +.skin-blue-light .main-header .navbar .nav > li > a:active, +.skin-blue-light .main-header .navbar .nav > li > a:focus, +.skin-blue-light .main-header .navbar .nav .open > a, +.skin-blue-light .main-header .navbar .nav .open > a:hover, +.skin-blue-light .main-header .navbar .nav .open > a:focus, +.skin-blue-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-blue-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-blue-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-blue-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-blue-light .main-header .navbar .sidebar-toggle:hover { + background-color: #367fa9; +} +@media (max-width: 767px) { + .skin-blue-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-blue-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-blue-light .main-header .navbar .dropdown-menu li a:hover { + background: #367fa9; + } +} +.skin-blue-light .main-header .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue-light .main-header .logo:hover { + background-color: #3b8ab8; +} +.skin-blue-light .main-header li.user-header { + background-color: #3c8dbc; +} +.skin-blue-light .content-header { + background: transparent; +} +.skin-blue-light .wrapper, +.skin-blue-light .main-sidebar, +.skin-blue-light .left-side { + background-color: #f9fafc; +} +.skin-blue-light .content-wrapper, +.skin-blue-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-blue-light .user-panel > .info, +.skin-blue-light .user-panel > .info > a { + color: #444444; +} +.skin-blue-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-blue-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-blue-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-blue-light .sidebar-menu > li:hover > a, +.skin-blue-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-blue-light .sidebar-menu > li.active { + border-left-color: #3c8dbc; +} +.skin-blue-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-blue-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-blue-light .sidebar a { + color: #444444; +} +.skin-blue-light .sidebar a:hover { + text-decoration: none; +} +.skin-blue-light .treeview-menu > li > a { + color: #777777; +} +.skin-blue-light .treeview-menu > li.active > a, +.skin-blue-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-blue-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-blue-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-blue-light .sidebar-form input[type="text"], +.skin-blue-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-blue-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-blue-light .sidebar-form input[type="text"]:focus, +.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-blue-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-blue-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +.skin-blue-light .main-footer { + border-top-color: #d2d6de; +} +.skin-blue.layout-top-nav .main-header > .logo { + background-color: #3c8dbc; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-blue.layout-top-nav .main-header > .logo:hover { + background-color: #3b8ab8; +} +/* + * Skin: Black + * ----------- + */ +/* skin-black navbar */ +.skin-black .main-header { + -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); +} +.skin-black .main-header .navbar-toggle { + color: #333; +} +.skin-black .main-header .navbar-brand { + color: #333; + border-right: 1px solid #eee; +} +.skin-black .main-header .navbar { + background-color: #ffffff; +} +.skin-black .main-header .navbar .nav > li > a { + color: #333333; +} +.skin-black .main-header .navbar .nav > li > a:hover, +.skin-black .main-header .navbar .nav > li > a:active, +.skin-black .main-header .navbar .nav > li > a:focus, +.skin-black .main-header .navbar .nav .open > a, +.skin-black .main-header .navbar .nav .open > a:hover, +.skin-black .main-header .navbar .nav .open > a:focus, +.skin-black .main-header .navbar .nav > .active > a { + background: #ffffff; + color: #999999; +} +.skin-black .main-header .navbar .sidebar-toggle { + color: #333333; +} +.skin-black .main-header .navbar .sidebar-toggle:hover { + color: #999999; + background: #ffffff; +} +.skin-black .main-header .navbar > .sidebar-toggle { + color: #333; + border-right: 1px solid #eee; +} +.skin-black .main-header .navbar .navbar-nav > li > a { + border-right: 1px solid #eee; +} +.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav > li > a, +.skin-black .main-header .navbar .navbar-right > li > a { + border-left: 1px solid #eee; + border-right-width: 0; +} +.skin-black .main-header > .logo { + background-color: #ffffff; + color: #333333; + border-bottom: 0 solid transparent; + border-right: 1px solid #eee; +} +.skin-black .main-header > .logo:hover { + background-color: #fcfcfc; +} +@media (max-width: 767px) { + .skin-black .main-header > .logo { + background-color: #222222; + color: #ffffff; + border-bottom: 0 solid transparent; + border-right: none; + } + .skin-black .main-header > .logo:hover { + background-color: #1f1f1f; + } +} +.skin-black .main-header li.user-header { + background-color: #222; +} +.skin-black .content-header { + background: transparent; + box-shadow: none; +} +.skin-black .wrapper, +.skin-black .main-sidebar, +.skin-black .left-side { + background-color: #222d32; +} +.skin-black .user-panel > .info, +.skin-black .user-panel > .info > a { + color: #fff; +} +.skin-black .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-black .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-black .sidebar-menu > li:hover > a, +.skin-black .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #ffffff; +} +.skin-black .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-black .sidebar a { + color: #b8c7ce; +} +.skin-black .sidebar a:hover { + text-decoration: none; +} +.skin-black .treeview-menu > li > a { + color: #8aa4af; +} +.skin-black .treeview-menu > li.active > a, +.skin-black .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-black .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-black .sidebar-form input[type="text"], +.skin-black .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; +} +.skin-black .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-black .sidebar-form input[type="text"]:focus, +.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-black .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +.skin-black .pace .pace-progress { + background: #222; +} +.skin-black .pace .pace-activity { + border-top-color: #222; + border-left-color: #222; +} +/* + * Skin: Black + * ----------- + */ +/* skin-black navbar */ +.skin-black-light .main-header { + -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05); +} +.skin-black-light .main-header .navbar-toggle { + color: #333; +} +.skin-black-light .main-header .navbar-brand { + color: #333; + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar { + background-color: #ffffff; +} +.skin-black-light .main-header .navbar .nav > li > a { + color: #333333; +} +.skin-black-light .main-header .navbar .nav > li > a:hover, +.skin-black-light .main-header .navbar .nav > li > a:active, +.skin-black-light .main-header .navbar .nav > li > a:focus, +.skin-black-light .main-header .navbar .nav .open > a, +.skin-black-light .main-header .navbar .nav .open > a:hover, +.skin-black-light .main-header .navbar .nav .open > a:focus, +.skin-black-light .main-header .navbar .nav > .active > a { + background: #ffffff; + color: #999999; +} +.skin-black-light .main-header .navbar .sidebar-toggle { + color: #333333; +} +.skin-black-light .main-header .navbar .sidebar-toggle:hover { + color: #999999; + background: #ffffff; +} +.skin-black-light .main-header .navbar > .sidebar-toggle { + color: #333; + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar .navbar-nav > li > a { + border-right: 1px solid #eee; +} +.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav > li > a, +.skin-black-light .main-header .navbar .navbar-right > li > a { + border-left: 1px solid #eee; + border-right-width: 0; +} +.skin-black-light .main-header > .logo { + background-color: #ffffff; + color: #333333; + border-bottom: 0 solid transparent; + border-right: 1px solid #eee; +} +.skin-black-light .main-header > .logo:hover { + background-color: #fcfcfc; +} +@media (max-width: 767px) { + .skin-black-light .main-header > .logo { + background-color: #222222; + color: #ffffff; + border-bottom: 0 solid transparent; + border-right: none; + } + .skin-black-light .main-header > .logo:hover { + background-color: #1f1f1f; + } +} +.skin-black-light .main-header li.user-header { + background-color: #222; +} +.skin-black-light .content-header { + background: transparent; + box-shadow: none; +} +.skin-black-light .wrapper, +.skin-black-light .main-sidebar, +.skin-black-light .left-side { + background-color: #f9fafc; +} +.skin-black-light .content-wrapper, +.skin-black-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-black-light .user-panel > .info, +.skin-black-light .user-panel > .info > a { + color: #444444; +} +.skin-black-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-black-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-black-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-black-light .sidebar-menu > li:hover > a, +.skin-black-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-black-light .sidebar-menu > li.active { + border-left-color: #ffffff; +} +.skin-black-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-black-light .sidebar a { + color: #444444; +} +.skin-black-light .sidebar a:hover { + text-decoration: none; +} +.skin-black-light .treeview-menu > li > a { + color: #777777; +} +.skin-black-light .treeview-menu > li.active > a, +.skin-black-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-black-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-black-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-black-light .sidebar-form input[type="text"], +.skin-black-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-black-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-black-light .sidebar-form input[type="text"]:focus, +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-black-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-black-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Green + * ----------- + */ +.skin-green .main-header .navbar { + background-color: #00a65a; +} +.skin-green .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-green .main-header .navbar .nav > li > a:hover, +.skin-green .main-header .navbar .nav > li > a:active, +.skin-green .main-header .navbar .nav > li > a:focus, +.skin-green .main-header .navbar .nav .open > a, +.skin-green .main-header .navbar .nav .open > a:hover, +.skin-green .main-header .navbar .nav .open > a:focus, +.skin-green .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-green .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-green .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-green .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-green .main-header .navbar .sidebar-toggle:hover { + background-color: #008d4c; +} +@media (max-width: 767px) { + .skin-green .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-green .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-green .main-header .navbar .dropdown-menu li a:hover { + background: #008d4c; + } +} +.skin-green .main-header .logo { + background-color: #008d4c; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-green .main-header .logo:hover { + background-color: #008749; +} +.skin-green .main-header li.user-header { + background-color: #00a65a; +} +.skin-green .content-header { + background: transparent; +} +.skin-green .wrapper, +.skin-green .main-sidebar, +.skin-green .left-side { + background-color: #222d32; +} +.skin-green .user-panel > .info, +.skin-green .user-panel > .info > a { + color: #fff; +} +.skin-green .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-green .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-green .sidebar-menu > li:hover > a, +.skin-green .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #00a65a; +} +.skin-green .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-green .sidebar a { + color: #b8c7ce; +} +.skin-green .sidebar a:hover { + text-decoration: none; +} +.skin-green .treeview-menu > li > a { + color: #8aa4af; +} +.skin-green .treeview-menu > li.active > a, +.skin-green .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-green .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-green .sidebar-form input[type="text"], +.skin-green .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; +} +.skin-green .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-green .sidebar-form input[type="text"]:focus, +.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-green .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Green + * ----------- + */ +.skin-green-light .main-header .navbar { + background-color: #00a65a; +} +.skin-green-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-green-light .main-header .navbar .nav > li > a:hover, +.skin-green-light .main-header .navbar .nav > li > a:active, +.skin-green-light .main-header .navbar .nav > li > a:focus, +.skin-green-light .main-header .navbar .nav .open > a, +.skin-green-light .main-header .navbar .nav .open > a:hover, +.skin-green-light .main-header .navbar .nav .open > a:focus, +.skin-green-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-green-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-green-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-green-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-green-light .main-header .navbar .sidebar-toggle:hover { + background-color: #008d4c; +} +@media (max-width: 767px) { + .skin-green-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-green-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-green-light .main-header .navbar .dropdown-menu li a:hover { + background: #008d4c; + } +} +.skin-green-light .main-header .logo { + background-color: #00a65a; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-green-light .main-header .logo:hover { + background-color: #00a157; +} +.skin-green-light .main-header li.user-header { + background-color: #00a65a; +} +.skin-green-light .content-header { + background: transparent; +} +.skin-green-light .wrapper, +.skin-green-light .main-sidebar, +.skin-green-light .left-side { + background-color: #f9fafc; +} +.skin-green-light .content-wrapper, +.skin-green-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-green-light .user-panel > .info, +.skin-green-light .user-panel > .info > a { + color: #444444; +} +.skin-green-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-green-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-green-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-green-light .sidebar-menu > li:hover > a, +.skin-green-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-green-light .sidebar-menu > li.active { + border-left-color: #00a65a; +} +.skin-green-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-green-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-green-light .sidebar a { + color: #444444; +} +.skin-green-light .sidebar a:hover { + text-decoration: none; +} +.skin-green-light .treeview-menu > li > a { + color: #777777; +} +.skin-green-light .treeview-menu > li.active > a, +.skin-green-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-green-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-green-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-green-light .sidebar-form input[type="text"], +.skin-green-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-green-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-green-light .sidebar-form input[type="text"]:focus, +.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-green-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-green-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Red + * --------- + */ +.skin-red .main-header .navbar { + background-color: #dd4b39; +} +.skin-red .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-red .main-header .navbar .nav > li > a:hover, +.skin-red .main-header .navbar .nav > li > a:active, +.skin-red .main-header .navbar .nav > li > a:focus, +.skin-red .main-header .navbar .nav .open > a, +.skin-red .main-header .navbar .nav .open > a:hover, +.skin-red .main-header .navbar .nav .open > a:focus, +.skin-red .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-red .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-red .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-red .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-red .main-header .navbar .sidebar-toggle:hover { + background-color: #d73925; +} +@media (max-width: 767px) { + .skin-red .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-red .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-red .main-header .navbar .dropdown-menu li a:hover { + background: #d73925; + } +} +.skin-red .main-header .logo { + background-color: #d73925; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-red .main-header .logo:hover { + background-color: #d33724; +} +.skin-red .main-header li.user-header { + background-color: #dd4b39; +} +.skin-red .content-header { + background: transparent; +} +.skin-red .wrapper, +.skin-red .main-sidebar, +.skin-red .left-side { + background-color: #222d32; +} +.skin-red .user-panel > .info, +.skin-red .user-panel > .info > a { + color: #fff; +} +.skin-red .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-red .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-red .sidebar-menu > li:hover > a, +.skin-red .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #dd4b39; +} +.skin-red .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-red .sidebar a { + color: #b8c7ce; +} +.skin-red .sidebar a:hover { + text-decoration: none; +} +.skin-red .treeview-menu > li > a { + color: #8aa4af; +} +.skin-red .treeview-menu > li.active > a, +.skin-red .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-red .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-red .sidebar-form input[type="text"], +.skin-red .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; +} +.skin-red .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-red .sidebar-form input[type="text"]:focus, +.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-red .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Red + * --------- + */ +.skin-red-light .main-header .navbar { + background-color: #dd4b39; +} +.skin-red-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-red-light .main-header .navbar .nav > li > a:hover, +.skin-red-light .main-header .navbar .nav > li > a:active, +.skin-red-light .main-header .navbar .nav > li > a:focus, +.skin-red-light .main-header .navbar .nav .open > a, +.skin-red-light .main-header .navbar .nav .open > a:hover, +.skin-red-light .main-header .navbar .nav .open > a:focus, +.skin-red-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-red-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-red-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-red-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-red-light .main-header .navbar .sidebar-toggle:hover { + background-color: #d73925; +} +@media (max-width: 767px) { + .skin-red-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-red-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-red-light .main-header .navbar .dropdown-menu li a:hover { + background: #d73925; + } +} +.skin-red-light .main-header .logo { + background-color: #dd4b39; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-red-light .main-header .logo:hover { + background-color: #dc4735; +} +.skin-red-light .main-header li.user-header { + background-color: #dd4b39; +} +.skin-red-light .content-header { + background: transparent; +} +.skin-red-light .wrapper, +.skin-red-light .main-sidebar, +.skin-red-light .left-side { + background-color: #f9fafc; +} +.skin-red-light .content-wrapper, +.skin-red-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-red-light .user-panel > .info, +.skin-red-light .user-panel > .info > a { + color: #444444; +} +.skin-red-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-red-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-red-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-red-light .sidebar-menu > li:hover > a, +.skin-red-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-red-light .sidebar-menu > li.active { + border-left-color: #dd4b39; +} +.skin-red-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-red-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-red-light .sidebar a { + color: #444444; +} +.skin-red-light .sidebar a:hover { + text-decoration: none; +} +.skin-red-light .treeview-menu > li > a { + color: #777777; +} +.skin-red-light .treeview-menu > li.active > a, +.skin-red-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-red-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-red-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-red-light .sidebar-form input[type="text"], +.skin-red-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-red-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-red-light .sidebar-form input[type="text"]:focus, +.skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-red-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-red-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Yellow + * ------------ + */ +.skin-yellow .main-header .navbar { + background-color: #f39c12; +} +.skin-yellow .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-yellow .main-header .navbar .nav > li > a:hover, +.skin-yellow .main-header .navbar .nav > li > a:active, +.skin-yellow .main-header .navbar .nav > li > a:focus, +.skin-yellow .main-header .navbar .nav .open > a, +.skin-yellow .main-header .navbar .nav .open > a:hover, +.skin-yellow .main-header .navbar .nav .open > a:focus, +.skin-yellow .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-yellow .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-yellow .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-yellow .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-yellow .main-header .navbar .sidebar-toggle:hover { + background-color: #e08e0b; +} +@media (max-width: 767px) { + .skin-yellow .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-yellow .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-yellow .main-header .navbar .dropdown-menu li a:hover { + background: #e08e0b; + } +} +.skin-yellow .main-header .logo { + background-color: #e08e0b; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-yellow .main-header .logo:hover { + background-color: #db8b0b; +} +.skin-yellow .main-header li.user-header { + background-color: #f39c12; +} +.skin-yellow .content-header { + background: transparent; +} +.skin-yellow .wrapper, +.skin-yellow .main-sidebar, +.skin-yellow .left-side { + background-color: #222d32; +} +.skin-yellow .user-panel > .info, +.skin-yellow .user-panel > .info > a { + color: #fff; +} +.skin-yellow .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-yellow .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-yellow .sidebar-menu > li:hover > a, +.skin-yellow .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #f39c12; +} +.skin-yellow .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-yellow .sidebar a { + color: #b8c7ce; +} +.skin-yellow .sidebar a:hover { + text-decoration: none; +} +.skin-yellow .treeview-menu > li > a { + color: #8aa4af; +} +.skin-yellow .treeview-menu > li.active > a, +.skin-yellow .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-yellow .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-yellow .sidebar-form input[type="text"], +.skin-yellow .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; +} +.skin-yellow .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-yellow .sidebar-form input[type="text"]:focus, +.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-yellow .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Yellow + * ------------ + */ +.skin-yellow-light .main-header .navbar { + background-color: #f39c12; +} +.skin-yellow-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-yellow-light .main-header .navbar .nav > li > a:hover, +.skin-yellow-light .main-header .navbar .nav > li > a:active, +.skin-yellow-light .main-header .navbar .nav > li > a:focus, +.skin-yellow-light .main-header .navbar .nav .open > a, +.skin-yellow-light .main-header .navbar .nav .open > a:hover, +.skin-yellow-light .main-header .navbar .nav .open > a:focus, +.skin-yellow-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-yellow-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-yellow-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-yellow-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-yellow-light .main-header .navbar .sidebar-toggle:hover { + background-color: #e08e0b; +} +@media (max-width: 767px) { + .skin-yellow-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-yellow-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover { + background: #e08e0b; + } +} +.skin-yellow-light .main-header .logo { + background-color: #f39c12; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-yellow-light .main-header .logo:hover { + background-color: #f39a0d; +} +.skin-yellow-light .main-header li.user-header { + background-color: #f39c12; +} +.skin-yellow-light .content-header { + background: transparent; +} +.skin-yellow-light .wrapper, +.skin-yellow-light .main-sidebar, +.skin-yellow-light .left-side { + background-color: #f9fafc; +} +.skin-yellow-light .content-wrapper, +.skin-yellow-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-yellow-light .user-panel > .info, +.skin-yellow-light .user-panel > .info > a { + color: #444444; +} +.skin-yellow-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-yellow-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-yellow-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-yellow-light .sidebar-menu > li:hover > a, +.skin-yellow-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-yellow-light .sidebar-menu > li.active { + border-left-color: #f39c12; +} +.skin-yellow-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-yellow-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-yellow-light .sidebar a { + color: #444444; +} +.skin-yellow-light .sidebar a:hover { + text-decoration: none; +} +.skin-yellow-light .treeview-menu > li > a { + color: #777777; +} +.skin-yellow-light .treeview-menu > li.active > a, +.skin-yellow-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-yellow-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-yellow-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-yellow-light .sidebar-form input[type="text"], +.skin-yellow-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-yellow-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-yellow-light .sidebar-form input[type="text"]:focus, +.skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-yellow-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-yellow-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} +/* + * Skin: Purple + * ------------ + */ +.skin-purple .main-header .navbar { + background-color: #605ca8; +} +.skin-purple .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-purple .main-header .navbar .nav > li > a:hover, +.skin-purple .main-header .navbar .nav > li > a:active, +.skin-purple .main-header .navbar .nav > li > a:focus, +.skin-purple .main-header .navbar .nav .open > a, +.skin-purple .main-header .navbar .nav .open > a:hover, +.skin-purple .main-header .navbar .nav .open > a:focus, +.skin-purple .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-purple .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-purple .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-purple .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-purple .main-header .navbar .sidebar-toggle:hover { + background-color: #555299; +} +@media (max-width: 767px) { + .skin-purple .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-purple .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-purple .main-header .navbar .dropdown-menu li a:hover { + background: #555299; + } +} +.skin-purple .main-header .logo { + background-color: #555299; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-purple .main-header .logo:hover { + background-color: #545096; +} +.skin-purple .main-header li.user-header { + background-color: #605ca8; +} +.skin-purple .content-header { + background: transparent; +} +.skin-purple .wrapper, +.skin-purple .main-sidebar, +.skin-purple .left-side { + background-color: #222d32; +} +.skin-purple .user-panel > .info, +.skin-purple .user-panel > .info > a { + color: #fff; +} +.skin-purple .sidebar-menu > li.header { + color: #4b646f; + background: #1a2226; +} +.skin-purple .sidebar-menu > li > a { + border-left: 3px solid transparent; +} +.skin-purple .sidebar-menu > li:hover > a, +.skin-purple .sidebar-menu > li.active > a { + color: #ffffff; + background: #1e282c; + border-left-color: #605ca8; +} +.skin-purple .sidebar-menu > li > .treeview-menu { + margin: 0 1px; + background: #2c3b41; +} +.skin-purple .sidebar a { + color: #b8c7ce; +} +.skin-purple .sidebar a:hover { + text-decoration: none; +} +.skin-purple .treeview-menu > li > a { + color: #8aa4af; +} +.skin-purple .treeview-menu > li.active > a, +.skin-purple .treeview-menu > li > a:hover { + color: #ffffff; +} +.skin-purple .sidebar-form { + border-radius: 3px; + border: 1px solid #374850; + margin: 10px 10px; +} +.skin-purple .sidebar-form input[type="text"], +.skin-purple .sidebar-form .btn { + box-shadow: none; + background-color: #374850; + border: 1px solid transparent; + height: 35px; +} +.skin-purple .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-purple .sidebar-form input[type="text"]:focus, +.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-purple .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +/* + * Skin: Purple + * ------------ + */ +.skin-purple-light .main-header .navbar { + background-color: #605ca8; +} +.skin-purple-light .main-header .navbar .nav > li > a { + color: #ffffff; +} +.skin-purple-light .main-header .navbar .nav > li > a:hover, +.skin-purple-light .main-header .navbar .nav > li > a:active, +.skin-purple-light .main-header .navbar .nav > li > a:focus, +.skin-purple-light .main-header .navbar .nav .open > a, +.skin-purple-light .main-header .navbar .nav .open > a:hover, +.skin-purple-light .main-header .navbar .nav .open > a:focus, +.skin-purple-light .main-header .navbar .nav > .active > a { + background: rgba(0, 0, 0, 0.1); + color: #f6f6f6; +} +.skin-purple-light .main-header .navbar .sidebar-toggle { + color: #ffffff; +} +.skin-purple-light .main-header .navbar .sidebar-toggle:hover { + color: #f6f6f6; + background: rgba(0, 0, 0, 0.1); +} +.skin-purple-light .main-header .navbar .sidebar-toggle { + color: #fff; +} +.skin-purple-light .main-header .navbar .sidebar-toggle:hover { + background-color: #555299; +} +@media (max-width: 767px) { + .skin-purple-light .main-header .navbar .dropdown-menu li.divider { + background-color: rgba(255, 255, 255, 0.1); + } + .skin-purple-light .main-header .navbar .dropdown-menu li a { + color: #fff; + } + .skin-purple-light .main-header .navbar .dropdown-menu li a:hover { + background: #555299; + } +} +.skin-purple-light .main-header .logo { + background-color: #605ca8; + color: #ffffff; + border-bottom: 0 solid transparent; +} +.skin-purple-light .main-header .logo:hover { + background-color: #5d59a6; +} +.skin-purple-light .main-header li.user-header { + background-color: #605ca8; +} +.skin-purple-light .content-header { + background: transparent; +} +.skin-purple-light .wrapper, +.skin-purple-light .main-sidebar, +.skin-purple-light .left-side { + background-color: #f9fafc; +} +.skin-purple-light .content-wrapper, +.skin-purple-light .main-footer { + border-left: 1px solid #d2d6de; +} +.skin-purple-light .user-panel > .info, +.skin-purple-light .user-panel > .info > a { + color: #444444; +} +.skin-purple-light .sidebar-menu > li { + -webkit-transition: border-left-color 0.3s ease; + -o-transition: border-left-color 0.3s ease; + transition: border-left-color 0.3s ease; +} +.skin-purple-light .sidebar-menu > li.header { + color: #848484; + background: #f9fafc; +} +.skin-purple-light .sidebar-menu > li > a { + border-left: 3px solid transparent; + font-weight: 600; +} +.skin-purple-light .sidebar-menu > li:hover > a, +.skin-purple-light .sidebar-menu > li.active > a { + color: #000000; + background: #f4f4f5; +} +.skin-purple-light .sidebar-menu > li.active { + border-left-color: #605ca8; +} +.skin-purple-light .sidebar-menu > li.active > a { + font-weight: 600; +} +.skin-purple-light .sidebar-menu > li > .treeview-menu { + background: #f4f4f5; +} +.skin-purple-light .sidebar a { + color: #444444; +} +.skin-purple-light .sidebar a:hover { + text-decoration: none; +} +.skin-purple-light .treeview-menu > li > a { + color: #777777; +} +.skin-purple-light .treeview-menu > li.active > a, +.skin-purple-light .treeview-menu > li > a:hover { + color: #000000; +} +.skin-purple-light .treeview-menu > li.active > a { + font-weight: 600; +} +.skin-purple-light .sidebar-form { + border-radius: 3px; + border: 1px solid #d2d6de; + margin: 10px 10px; +} +.skin-purple-light .sidebar-form input[type="text"], +.skin-purple-light .sidebar-form .btn { + box-shadow: none; + background-color: #fff; + border: 1px solid transparent; + height: 35px; +} +.skin-purple-light .sidebar-form input[type="text"] { + color: #666; + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; +} +.skin-purple-light .sidebar-form input[type="text"]:focus, +.skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + background-color: #fff; + color: #666; +} +.skin-purple-light .sidebar-form input[type="text"]:focus + .input-group-btn .btn { + border-left-color: #fff; +} +.skin-purple-light .sidebar-form .btn { + color: #999; + border-top-left-radius: 0; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom-left-radius: 0; +} +@media (min-width: 768px) { + .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + border-left: 1px solid #d2d6de; + } +} diff --git a/login/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css b/login/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css new file mode 100755 index 0000000..103689d --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css @@ -0,0 +1,4932 @@ +@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic); +/*! + * AdminLTE v2.3.6 + * Author: Almsaeed Studio + * Website: Almsaeed Studio + * License: Open source - MIT + * Please visit http://opensource.org/licenses/MIT for more information +!*/ +/* + * Core: General Layout Style + * ------------------------- + */ +html, +body { + min-height: 100%; +} +.layout-boxed html, +.layout-boxed body { + height: 100%; +} +body { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 400; + overflow-x: hidden; + overflow-y: auto; +} +/* Layout */ +.wrapper { + min-height: 100%; + position: relative; + overflow: hidden; +} +.wrapper:before, +.wrapper:after { + content: " "; + display: table; +} +.wrapper:after { + clear: both; +} +.layout-boxed .wrapper { + max-width: 1250px; + margin: 0 auto; + min-height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + position: relative; +} +.layout-boxed { + background: url('../img/boxed-bg.jpg') repeat fixed; +} +/* + * Content Wrapper - contains the main content + * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper ``` + */ +.content-wrapper, +.right-side, +.main-footer { + -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out; + margin-left: 230px; + z-index: 820; +} +.layout-top-nav .content-wrapper, +.layout-top-nav .right-side, +.layout-top-nav .main-footer { + margin-left: 0; +} +@media (max-width: 767px) { + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0; + } +} +@media (min-width: 768px) { + .sidebar-collapse .content-wrapper, + .sidebar-collapse .right-side, + .sidebar-collapse .main-footer { + margin-left: 0; + } +} +@media (max-width: 767px) { + .sidebar-open .content-wrapper, + .sidebar-open .right-side, + .sidebar-open .main-footer { + -webkit-transform: translate(230px, 0); + -ms-transform: translate(230px, 0); + -o-transform: translate(230px, 0); + transform: translate(230px, 0); + } +} +.content-wrapper, +.right-side { + min-height: 100%; + background-color: #ecf0f5; + z-index: 800; +} +.main-footer { + background: #fff; + padding: 15px; + color: #444; + border-top: 1px solid #d2d6de; +} +/* Fixed layout */ +.fixed .main-header, +.fixed .main-sidebar, +.fixed .left-side { + position: fixed; +} +.fixed .main-header { + top: 0; + right: 0; + left: 0; +} +.fixed .content-wrapper, +.fixed .right-side { + padding-top: 50px; +} +@media (max-width: 767px) { + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 100px; + } +} +.fixed.layout-boxed .wrapper { + max-width: 100%; +} +body.hold-transition .content-wrapper, +body.hold-transition .right-side, +body.hold-transition .main-footer, +body.hold-transition .main-sidebar, +body.hold-transition .left-side, +body.hold-transition .main-header .navbar, +body.hold-transition .main-header .logo { + /* Fix for IE */ + -webkit-transition: none; + -o-transition: none; + transition: none; +} +/* Content */ +.content { + min-height: 250px; + padding: 15px; + margin-right: auto; + margin-left: auto; + padding-left: 15px; + padding-right: 15px; +} +/* H1 - H6 font */ +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: 'Source Sans Pro', sans-serif; +} +/* General Links */ +a { + color: #3c8dbc; +} +a:hover, +a:active, +a:focus { + outline: none; + text-decoration: none; + color: #72afd2; +} +/* Page Header */ +.page-header { + margin: 10px 0 20px 0; + font-size: 22px; +} +.page-header > small { + color: #666; + display: block; + margin-top: 5px; +} +/* + * Component: Main Header + * ---------------------- + */ +.main-header { + position: relative; + max-height: 100px; + z-index: 1030; +} +.main-header .navbar { + -webkit-transition: margin-left 0.3s ease-in-out; + -o-transition: margin-left 0.3s ease-in-out; + transition: margin-left 0.3s ease-in-out; + margin-bottom: 0; + margin-left: 230px; + border: none; + min-height: 50px; + border-radius: 0; +} +.layout-top-nav .main-header .navbar { + margin-left: 0; +} +.main-header #navbar-search-input.form-control { + background: rgba(255, 255, 255, 0.2); + border-color: transparent; +} +.main-header #navbar-search-input.form-control:focus, +.main-header #navbar-search-input.form-control:active { + border-color: rgba(0, 0, 0, 0.1); + background: rgba(255, 255, 255, 0.9); +} +.main-header #navbar-search-input.form-control::-moz-placeholder { + color: #ccc; + opacity: 1; +} +.main-header #navbar-search-input.form-control:-ms-input-placeholder { + color: #ccc; +} +.main-header #navbar-search-input.form-control::-webkit-input-placeholder { + color: #ccc; +} +.main-header .navbar-custom-menu, +.main-header .navbar-right { + float: right; +} +@media (max-width: 991px) { + .main-header .navbar-custom-menu a, + .main-header .navbar-right a { + color: inherit; + background: transparent; + } +} +@media (max-width: 767px) { + .main-header .navbar-right { + float: none; + } + .navbar-collapse .main-header .navbar-right { + margin: 7.5px -15px; + } + .main-header .navbar-right > li { + color: inherit; + border: 0; + } +} +.main-header .sidebar-toggle { + float: left; + background-color: transparent; + background-image: none; + padding: 15px 15px; + font-family: fontAwesome; +} +.main-header .sidebar-toggle:before { + content: "\f0c9"; +} +.main-header .sidebar-toggle:hover { + color: #fff; +} +.main-header .sidebar-toggle:focus, +.main-header .sidebar-toggle:active { + background: transparent; +} +.main-header .sidebar-toggle .icon-bar { + display: none; +} +.main-header .navbar .nav > li.user > a > .fa, +.main-header .navbar .nav > li.user > a > .glyphicon, +.main-header .navbar .nav > li.user > a > .ion { + margin-right: 5px; +} +.main-header .navbar .nav > li > a > .label { + position: absolute; + top: 9px; + right: 7px; + text-align: center; + font-size: 9px; + padding: 2px 3px; + line-height: .9; +} +.main-header .logo { + -webkit-transition: width 0.3s ease-in-out; + -o-transition: width 0.3s ease-in-out; + transition: width 0.3s ease-in-out; + display: block; + float: left; + height: 50px; + font-size: 20px; + line-height: 50px; + text-align: center; + width: 230px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 15px; + font-weight: 300; + overflow: hidden; +} +.main-header .logo .logo-lg { + display: block; +} +.main-header .logo .logo-mini { + display: none; +} +.main-header .navbar-brand { + color: #fff; +} +.content-header { + position: relative; + padding: 15px 15px 0 15px; +} +.content-header > h1 { + margin: 0; + font-size: 24px; +} +.content-header > h1 > small { + font-size: 15px; + display: inline-block; + padding-left: 4px; + font-weight: 300; +} +.content-header > .breadcrumb { + float: right; + background: transparent; + margin-top: 0; + margin-bottom: 0; + font-size: 12px; + padding: 7px 5px; + position: absolute; + top: 15px; + right: 10px; + border-radius: 2px; +} +.content-header > .breadcrumb > li > a { + color: #444; + text-decoration: none; + display: inline-block; +} +.content-header > .breadcrumb > li > a > .fa, +.content-header > .breadcrumb > li > a > .glyphicon, +.content-header > .breadcrumb > li > a > .ion { + margin-right: 5px; +} +.content-header > .breadcrumb > li + li:before { + content: '>\00a0'; +} +@media (max-width: 991px) { + .content-header > .breadcrumb { + position: relative; + margin-top: 5px; + top: 0; + right: 0; + float: none; + background: #d2d6de; + padding-left: 10px; + } + .content-header > .breadcrumb li:before { + color: #97a0b3; + } +} +.navbar-toggle { + color: #fff; + border: 0; + margin: 0; + padding: 15px 15px; +} +@media (max-width: 991px) { + .navbar-custom-menu .navbar-nav > li { + float: left; + } + .navbar-custom-menu .navbar-nav { + margin: 0; + float: left; + } + .navbar-custom-menu .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + } +} +@media (max-width: 767px) { + .main-header { + position: relative; + } + .main-header .logo, + .main-header .navbar { + width: 100%; + float: none; + } + .main-header .navbar { + margin: 0; + } + .main-header .navbar-custom-menu { + float: right; + } +} +@media (max-width: 991px) { + .navbar-collapse.pull-left { + float: none !important; + } + .navbar-collapse.pull-left + .navbar-custom-menu { + display: block; + position: absolute; + top: 0; + right: 40px; + } +} +/* + * Component: Sidebar + * ------------------ + */ +.main-sidebar, +.left-side { + position: absolute; + top: 0; + left: 0; + padding-top: 50px; + min-height: 100%; + width: 230px; + z-index: 810; + -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out; + -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out; + -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, width 0.3s ease-in-out; +} +@media (max-width: 767px) { + .main-sidebar, + .left-side { + padding-top: 100px; + } +} +@media (max-width: 767px) { + .main-sidebar, + .left-side { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0); + } +} +@media (min-width: 768px) { + .sidebar-collapse .main-sidebar, + .sidebar-collapse .left-side { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0); + } +} +@media (max-width: 767px) { + .sidebar-open .main-sidebar, + .sidebar-open .left-side { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + } +} +.sidebar { + padding-bottom: 10px; +} +.sidebar-form input:focus { + border-color: transparent; +} +.user-panel { + position: relative; + width: 100%; + padding: 10px; + overflow: hidden; +} +.user-panel:before, +.user-panel:after { + content: " "; + display: table; +} +.user-panel:after { + clear: both; +} +.user-panel > .image > img { + width: 100%; + max-width: 45px; + height: auto; +} +.user-panel > .info { + padding: 5px 5px 5px 15px; + line-height: 1; + position: absolute; + left: 55px; +} +.user-panel > .info > p { + font-weight: 600; + margin-bottom: 9px; +} +.user-panel > .info > a { + text-decoration: none; + padding-right: 5px; + margin-top: 3px; + font-size: 11px; +} +.user-panel > .info > a > .fa, +.user-panel > .info > a > .ion, +.user-panel > .info > a > .glyphicon { + margin-right: 3px; +} +.sidebar-menu { + list-style: none; + margin: 0; + padding: 0; +} +.sidebar-menu > li { + position: relative; + margin: 0; + padding: 0; +} +.sidebar-menu > li > a { + padding: 12px 5px 12px 15px; + display: block; +} +.sidebar-menu > li > a > .fa, +.sidebar-menu > li > a > .glyphicon, +.sidebar-menu > li > a > .ion { + width: 20px; +} +.sidebar-menu > li .label, +.sidebar-menu > li .badge { + margin-right: 5px; +} +.sidebar-menu > li .badge { + margin-top: 3px; +} +.sidebar-menu li.header { + padding: 10px 25px 10px 15px; + font-size: 12px; +} +.sidebar-menu li > a > .fa-angle-left, +.sidebar-menu li > a > .pull-right-container > .fa-angle-left { + width: auto; + height: auto; + padding: 0; + margin-right: 10px; +} +.sidebar-menu li.active > a > .fa-angle-left, +.sidebar-menu li.active > a > .pull-right-container > .fa-angle-left { + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg); +} +.sidebar-menu li.active > .treeview-menu { + display: block; +} +.sidebar-menu .treeview-menu { + display: none; + list-style: none; + padding: 0; + margin: 0; + padding-left: 5px; +} +.sidebar-menu .treeview-menu .treeview-menu { + padding-left: 20px; +} +.sidebar-menu .treeview-menu > li { + margin: 0; +} +.sidebar-menu .treeview-menu > li > a { + padding: 5px 5px 5px 15px; + display: block; + font-size: 14px; +} +.sidebar-menu .treeview-menu > li > a > .fa, +.sidebar-menu .treeview-menu > li > a > .glyphicon, +.sidebar-menu .treeview-menu > li > a > .ion { + width: 20px; +} +.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-left, +.sidebar-menu .treeview-menu > li > a > .pull-right-container > .fa-angle-down, +.sidebar-menu .treeview-menu > li > a > .fa-angle-left, +.sidebar-menu .treeview-menu > li > a > .fa-angle-down { + width: auto; +} +/* + * Component: Sidebar Mini + */ +@media (min-width: 768px) { + .sidebar-mini.sidebar-collapse .content-wrapper, + .sidebar-mini.sidebar-collapse .right-side, + .sidebar-mini.sidebar-collapse .main-footer { + margin-left: 50px !important; + z-index: 840; + } + .sidebar-mini.sidebar-collapse .main-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + width: 50px !important; + z-index: 850; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li { + position: relative; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a { + margin-right: 0; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span { + border-top-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span { + border-bottom-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu { + padding-top: 5px; + padding-bottom: 5px; + border-bottom-right-radius: 4px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right), + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + display: block !important; + position: absolute; + width: 180px; + left: 50px; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span { + top: 0; + margin-left: -3px; + padding: 12px 5px 12px 20px; + background-color: inherit; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container { + float: right; + width: auto!important; + left: 200px!important; + top: 10px!important; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > .pull-right-container > .label:not(:first-of-type) { + display: none; + } + .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu { + top: 44px; + margin-left: 0; + } + .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info, + .sidebar-mini.sidebar-collapse .sidebar-form, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu, + .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right, + .sidebar-mini.sidebar-collapse .sidebar-menu li.header { + display: none !important; + -webkit-transform: translateZ(0); + } + .sidebar-mini.sidebar-collapse .main-header .logo { + width: 50px; + } + .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini { + display: block; + margin-left: -15px; + margin-right: -15px; + font-size: 18px; + } + .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg { + display: none; + } + .sidebar-mini.sidebar-collapse .main-header .navbar { + margin-left: 50px; + } +} +.sidebar-menu, +.main-sidebar .user-panel, +.sidebar-menu > li.header { + white-space: nowrap; + overflow: hidden; +} +.sidebar-menu:hover { + overflow: visible; +} +.sidebar-form, +.sidebar-menu > li.header { + overflow: hidden; + text-overflow: clip; +} +.sidebar-menu li > a { + position: relative; +} +.sidebar-menu li > a > .pull-right-container { + position: absolute; + right: 10px; + top: 50%; + margin-top: -7px; +} +/* + * Component: Control sidebar. By default, this is the right sidebar. + */ +.control-sidebar-bg { + position: fixed; + z-index: 1000; + bottom: 0; +} +.control-sidebar-bg, +.control-sidebar { + top: 0; + right: -230px; + width: 230px; + -webkit-transition: right 0.3s ease-in-out; + -o-transition: right 0.3s ease-in-out; + transition: right 0.3s ease-in-out; +} +.control-sidebar { + position: absolute; + padding-top: 50px; + z-index: 1010; +} +@media (max-width: 768px) { + .control-sidebar { + padding-top: 100px; + } +} +.control-sidebar > .tab-content { + padding: 10px 15px; +} +.control-sidebar.control-sidebar-open, +.control-sidebar.control-sidebar-open + .control-sidebar-bg { + right: 0; +} +.control-sidebar-open .control-sidebar-bg, +.control-sidebar-open .control-sidebar { + right: 0; +} +@media (min-width: 768px) { + .control-sidebar-open .content-wrapper, + .control-sidebar-open .right-side, + .control-sidebar-open .main-footer { + margin-right: 230px; + } +} +.nav-tabs.control-sidebar-tabs > li:first-of-type > a, +.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover, +.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus { + border-left-width: 0; +} +.nav-tabs.control-sidebar-tabs > li > a { + border-radius: 0; +} +.nav-tabs.control-sidebar-tabs > li > a, +.nav-tabs.control-sidebar-tabs > li > a:hover { + border-top: none; + border-right: none; + border-left: 1px solid transparent; + border-bottom: 1px solid transparent; +} +.nav-tabs.control-sidebar-tabs > li > a .icon { + font-size: 16px; +} +.nav-tabs.control-sidebar-tabs > li.active > a, +.nav-tabs.control-sidebar-tabs > li.active > a:hover, +.nav-tabs.control-sidebar-tabs > li.active > a:focus, +.nav-tabs.control-sidebar-tabs > li.active > a:active { + border-top: none; + border-right: none; + border-bottom: none; +} +@media (max-width: 768px) { + .nav-tabs.control-sidebar-tabs { + display: table; + } + .nav-tabs.control-sidebar-tabs > li { + display: table-cell; + } +} +.control-sidebar-heading { + font-weight: 400; + font-size: 16px; + padding: 10px 0; + margin-bottom: 10px; +} +.control-sidebar-subheading { + display: block; + font-weight: 400; + font-size: 14px; +} +.control-sidebar-menu { + list-style: none; + padding: 0; + margin: 0 -15px; +} +.control-sidebar-menu > li > a { + display: block; + padding: 10px 15px; +} +.control-sidebar-menu > li > a:before, +.control-sidebar-menu > li > a:after { + content: " "; + display: table; +} +.control-sidebar-menu > li > a:after { + clear: both; +} +.control-sidebar-menu > li > a > .control-sidebar-subheading { + margin-top: 0; +} +.control-sidebar-menu .menu-icon { + float: left; + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px; +} +.control-sidebar-menu .menu-info { + margin-left: 45px; + margin-top: 3px; +} +.control-sidebar-menu .menu-info > .control-sidebar-subheading { + margin: 0; +} +.control-sidebar-menu .menu-info > p { + margin: 0; + font-size: 11px; +} +.control-sidebar-menu .progress { + margin: 0; +} +.control-sidebar-dark { + color: #b8c7ce; +} +.control-sidebar-dark, +.control-sidebar-dark + .control-sidebar-bg { + background: #222d32; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs { + border-bottom: #1c2529; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a { + background: #181f23; + color: #b8c7ce; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus { + border-left-color: #141a1d; + border-bottom-color: #141a1d; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active { + background: #1c2529; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover { + color: #fff; +} +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active { + background: #222d32; + color: #fff; +} +.control-sidebar-dark .control-sidebar-heading, +.control-sidebar-dark .control-sidebar-subheading { + color: #fff; +} +.control-sidebar-dark .control-sidebar-menu > li > a:hover { + background: #1e282c; +} +.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p { + color: #b8c7ce; +} +.control-sidebar-light { + color: #5e5e5e; +} +.control-sidebar-light, +.control-sidebar-light + .control-sidebar-bg { + background: #f9fafc; + border-left: 1px solid #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs { + border-bottom: #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a { + background: #e8ecf4; + color: #444444; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus { + border-left-color: #d2d6de; + border-bottom-color: #d2d6de; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active { + background: #eff1f7; +} +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active { + background: #f9fafc; + color: #111; +} +.control-sidebar-light .control-sidebar-heading, +.control-sidebar-light .control-sidebar-subheading { + color: #111; +} +.control-sidebar-light .control-sidebar-menu { + margin-left: -14px; +} +.control-sidebar-light .control-sidebar-menu > li > a:hover { + background: #f4f4f5; +} +.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p { + color: #5e5e5e; +} +/* + * Component: Dropdown menus + * ------------------------- + */ +/*Dropdowns in general*/ +.dropdown-menu { + box-shadow: none; + border-color: #eee; +} +.dropdown-menu > li > a { + color: #777; +} +.dropdown-menu > li > a > .glyphicon, +.dropdown-menu > li > a > .fa, +.dropdown-menu > li > a > .ion { + margin-right: 10px; +} +.dropdown-menu > li > a:hover { + background-color: #e1e3e9; + color: #333; +} +.dropdown-menu > .divider { + background-color: #eee; +} +.navbar-nav > .notifications-menu > .dropdown-menu, +.navbar-nav > .messages-menu > .dropdown-menu, +.navbar-nav > .tasks-menu > .dropdown-menu { + width: 280px; + padding: 0 0 0 0; + margin: 0; + top: 100%; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li, +.navbar-nav > .messages-menu > .dropdown-menu > li, +.navbar-nav > .tasks-menu > .dropdown-menu > li { + position: relative; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.header, +.navbar-nav > .messages-menu > .dropdown-menu > li.header, +.navbar-nav > .tasks-menu > .dropdown-menu > li.header { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + background-color: #ffffff; + padding: 7px 10px; + border-bottom: 1px solid #f4f4f4; + color: #444444; + font-size: 14px; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, +.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, +.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + font-size: 12px; + background-color: #fff; + padding: 7px 10px; + border-bottom: 1px solid #eeeeee; + color: #444 !important; + text-align: center; +} +@media (max-width: 991px) { + .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a, + .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a, + .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a { + background: #fff !important; + color: #444 !important; + } +} +.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover, +.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover, +.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover { + text-decoration: none; + font-weight: normal; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu { + max-height: 200px; + margin: 0; + padding: 0; + list-style: none; + overflow-x: hidden; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { + display: block; + white-space: nowrap; + /* Prevent text from breaking */ + border-bottom: 1px solid #f4f4f4; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover, +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover { + background: #f4f4f4; + text-decoration: none; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a { + color: #444444; + overflow: hidden; + text-overflow: ellipsis; + padding: 10px; +} +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon, +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa, +.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion { + width: 20px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a { + margin: 0; + padding: 10px 10px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img { + margin: auto 10px auto auto; + width: 40px; + height: 40px; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 { + padding: 0; + margin: 0 0 0 45px; + color: #444444; + font-size: 15px; + position: relative; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small { + color: #999999; + font-size: 10px; + position: absolute; + top: 0; + right: 0; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p { + margin: 0 0 0 45px; + font-size: 12px; + color: #888888; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before, +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + content: " "; + display: table; +} +.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after { + clear: both; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a { + padding: 10px; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 { + font-size: 14px; + padding: 0; + margin: 0 0 10px 0; + color: #666666; +} +.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress { + padding: 0; + margin: 0; +} +.navbar-nav > .user-menu > .dropdown-menu { + border-top-right-radius: 0; + border-top-left-radius: 0; + padding: 1px 0 0 0; + border-top-width: 0; + width: 280px; +} +.navbar-nav > .user-menu > .dropdown-menu, +.navbar-nav > .user-menu > .dropdown-menu > .user-body { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header { + height: 175px; + padding: 10px; + text-align: center; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img { + z-index: 5; + height: 90px; + width: 90px; + border: 3px solid; + border-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p { + z-index: 5; + color: #fff; + color: rgba(255, 255, 255, 0.8); + font-size: 17px; + margin-top: 10px; +} +.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small { + display: block; + font-size: 12px; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body { + padding: 15px; + border-bottom: 1px solid #f4f4f4; + border-top: 1px solid #dddddd; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-body a { + color: #444 !important; +} +@media (max-width: 991px) { + .navbar-nav > .user-menu > .dropdown-menu > .user-body a { + background: #fff !important; + color: #444 !important; + } +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer { + background-color: #f9f9f9; + padding: 10px; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before, +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + content: " "; + display: table; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after { + clear: both; +} +.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default { + color: #666666; +} +@media (max-width: 991px) { + .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover { + background-color: #f9f9f9; + } +} +.navbar-nav > .user-menu .user-image { + float: left; + width: 25px; + height: 25px; + border-radius: 50%; + margin-right: 10px; + margin-top: -2px; +} +@media (max-width: 767px) { + .navbar-nav > .user-menu .user-image { + float: none; + margin-right: 0; + margin-top: -8px; + line-height: 10px; + } +} +/* Add fade animation to dropdown menus by appending + the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/ +.open:not(.dropup) > .animated-dropdown-menu { + backface-visibility: visible !important; + -webkit-animation: flipInX 0.7s both; + -o-animation: flipInX 0.7s both; + animation: flipInX 0.7s both; +} +@keyframes flipInX { + 0% { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transition-timing-function: ease-in; + opacity: 0; + } + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transition-timing-function: ease-in; + } + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + transform: perspective(400px); + } +} +@-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + opacity: 0; + } + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + } + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + 100% { + -webkit-transform: perspective(400px); + } +} +/* Fix dropdown menu in navbars */ +.navbar-custom-menu > .navbar-nav > li { + position: relative; +} +.navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + position: absolute; + right: 0; + left: auto; +} +@media (max-width: 991px) { + .navbar-custom-menu > .navbar-nav { + float: right; + } + .navbar-custom-menu > .navbar-nav > li { + position: static; + } + .navbar-custom-menu > .navbar-nav > li > .dropdown-menu { + position: absolute; + right: 5%; + left: auto; + border: 1px solid #ddd; + background: #fff; + } +} +/* + * Component: Form + * --------------- + */ +.form-control { + border-radius: 0; + box-shadow: none; + border-color: #d2d6de; +} +.form-control:focus { + border-color: #3c8dbc; + box-shadow: none; +} +.form-control::-moz-placeholder, +.form-control:-ms-input-placeholder, +.form-control::-webkit-input-placeholder { + color: #bbb; + opacity: 1; +} +.form-control:not(select) { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-group.has-success label { + color: #00a65a; +} +.form-group.has-success .form-control, +.form-group.has-success .input-group-addon { + border-color: #00a65a; + box-shadow: none; +} +.form-group.has-success .help-block { + color: #00a65a; +} +.form-group.has-warning label { + color: #f39c12; +} +.form-group.has-warning .form-control, +.form-group.has-warning .input-group-addon { + border-color: #f39c12; + box-shadow: none; +} +.form-group.has-warning .help-block { + color: #f39c12; +} +.form-group.has-error label { + color: #dd4b39; +} +.form-group.has-error .form-control, +.form-group.has-error .input-group-addon { + border-color: #dd4b39; + box-shadow: none; +} +.form-group.has-error .help-block { + color: #dd4b39; +} +/* Input group */ +.input-group .input-group-addon { + border-radius: 0; + border-color: #d2d6de; + background-color: #fff; +} +/* button groups */ +.btn-group-vertical .btn.btn-flat:first-of-type, +.btn-group-vertical .btn.btn-flat:last-of-type { + border-radius: 0; +} +.icheck > label { + padding-left: 0; +} +/* support Font Awesome icons in form-control */ +.form-control-feedback.fa { + line-height: 34px; +} +.input-lg + .form-control-feedback.fa, +.input-group-lg + .form-control-feedback.fa, +.form-group-lg .form-control + .form-control-feedback.fa { + line-height: 46px; +} +.input-sm + .form-control-feedback.fa, +.input-group-sm + .form-control-feedback.fa, +.form-group-sm .form-control + .form-control-feedback.fa { + line-height: 30px; +} +/* + * Component: Progress Bar + * ----------------------- + */ +.progress, +.progress > .progress-bar { + -webkit-box-shadow: none; + box-shadow: none; +} +.progress, +.progress > .progress-bar, +.progress .progress-bar, +.progress > .progress-bar .progress-bar { + border-radius: 1px; +} +/* size variation */ +.progress.sm, +.progress-sm { + height: 10px; +} +.progress.sm, +.progress-sm, +.progress.sm .progress-bar, +.progress-sm .progress-bar { + border-radius: 1px; +} +.progress.xs, +.progress-xs { + height: 7px; +} +.progress.xs, +.progress-xs, +.progress.xs .progress-bar, +.progress-xs .progress-bar { + border-radius: 1px; +} +.progress.xxs, +.progress-xxs { + height: 3px; +} +.progress.xxs, +.progress-xxs, +.progress.xxs .progress-bar, +.progress-xxs .progress-bar { + border-radius: 1px; +} +/* Vertical bars */ +.progress.vertical { + position: relative; + width: 30px; + height: 200px; + display: inline-block; + margin-right: 10px; +} +.progress.vertical > .progress-bar { + width: 100%; + position: absolute; + bottom: 0; +} +.progress.vertical.sm, +.progress.vertical.progress-sm { + width: 20px; +} +.progress.vertical.xs, +.progress.vertical.progress-xs { + width: 10px; +} +.progress.vertical.xxs, +.progress.vertical.progress-xxs { + width: 3px; +} +.progress-group .progress-text { + font-weight: 600; +} +.progress-group .progress-number { + float: right; +} +/* Remove margins from progress bars when put in a table */ +.table tr > td .progress { + margin: 0; +} +.progress-bar-light-blue, +.progress-bar-primary { + background-color: #3c8dbc; +} +.progress-striped .progress-bar-light-blue, +.progress-striped .progress-bar-primary { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-green, +.progress-bar-success { + background-color: #00a65a; +} +.progress-striped .progress-bar-green, +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-aqua, +.progress-bar-info { + background-color: #00c0ef; +} +.progress-striped .progress-bar-aqua, +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-yellow, +.progress-bar-warning { + background-color: #f39c12; +} +.progress-striped .progress-bar-yellow, +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +.progress-bar-red, +.progress-bar-danger { + background-color: #dd4b39; +} +.progress-striped .progress-bar-red, +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +/* + * Component: Small Box + * -------------------- + */ +.small-box { + border-radius: 2px; + position: relative; + display: block; + margin-bottom: 20px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.small-box > .inner { + padding: 10px; +} +.small-box > .small-box-footer { + position: relative; + text-align: center; + padding: 3px 0; + color: #fff; + color: rgba(255, 255, 255, 0.8); + display: block; + z-index: 10; + background: rgba(0, 0, 0, 0.1); + text-decoration: none; +} +.small-box > .small-box-footer:hover { + color: #fff; + background: rgba(0, 0, 0, 0.15); +} +.small-box h3 { + font-size: 38px; + font-weight: bold; + margin: 0 0 10px 0; + white-space: nowrap; + padding: 0; +} +.small-box p { + font-size: 15px; +} +.small-box p > small { + display: block; + color: #f9f9f9; + font-size: 13px; + margin-top: 5px; +} +.small-box h3, +.small-box p { + z-index: 5; +} +.small-box .icon { + -webkit-transition: all 0.3s linear; + -o-transition: all 0.3s linear; + transition: all 0.3s linear; + position: absolute; + top: -10px; + right: 10px; + z-index: 0; + font-size: 90px; + color: rgba(0, 0, 0, 0.15); +} +.small-box:hover { + text-decoration: none; + color: #f9f9f9; +} +.small-box:hover .icon { + font-size: 95px; +} +@media (max-width: 767px) { + .small-box { + text-align: center; + } + .small-box .icon { + display: none; + } + .small-box p { + font-size: 12px; + } +} +/* + * Component: Box + * -------------- + */ +.box { + position: relative; + border-radius: 3px; + background: #ffffff; + border-top: 3px solid #d2d6de; + margin-bottom: 20px; + width: 100%; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} +.box.box-primary { + border-top-color: #3c8dbc; +} +.box.box-info { + border-top-color: #00c0ef; +} +.box.box-danger { + border-top-color: #dd4b39; +} +.box.box-warning { + border-top-color: #f39c12; +} +.box.box-success { + border-top-color: #00a65a; +} +.box.box-default { + border-top-color: #d2d6de; +} +.box.collapsed-box .box-body, +.box.collapsed-box .box-footer { + display: none; +} +.box .nav-stacked > li { + border-bottom: 1px solid #f4f4f4; + margin: 0; +} +.box .nav-stacked > li:last-of-type { + border-bottom: none; +} +.box.height-control .box-body { + max-height: 300px; + overflow: auto; +} +.box .border-right { + border-right: 1px solid #f4f4f4; +} +.box .border-left { + border-left: 1px solid #f4f4f4; +} +.box.box-solid { + border-top: 0; +} +.box.box-solid > .box-header .btn.btn-default { + background: transparent; +} +.box.box-solid > .box-header .btn:hover, +.box.box-solid > .box-header a:hover { + background: rgba(0, 0, 0, 0.1); +} +.box.box-solid.box-default { + border: 1px solid #d2d6de; +} +.box.box-solid.box-default > .box-header { + color: #444444; + background: #d2d6de; + background-color: #d2d6de; +} +.box.box-solid.box-default > .box-header a, +.box.box-solid.box-default > .box-header .btn { + color: #444444; +} +.box.box-solid.box-primary { + border: 1px solid #3c8dbc; +} +.box.box-solid.box-primary > .box-header { + color: #ffffff; + background: #3c8dbc; + background-color: #3c8dbc; +} +.box.box-solid.box-primary > .box-header a, +.box.box-solid.box-primary > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-info { + border: 1px solid #00c0ef; +} +.box.box-solid.box-info > .box-header { + color: #ffffff; + background: #00c0ef; + background-color: #00c0ef; +} +.box.box-solid.box-info > .box-header a, +.box.box-solid.box-info > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-danger { + border: 1px solid #dd4b39; +} +.box.box-solid.box-danger > .box-header { + color: #ffffff; + background: #dd4b39; + background-color: #dd4b39; +} +.box.box-solid.box-danger > .box-header a, +.box.box-solid.box-danger > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-warning { + border: 1px solid #f39c12; +} +.box.box-solid.box-warning > .box-header { + color: #ffffff; + background: #f39c12; + background-color: #f39c12; +} +.box.box-solid.box-warning > .box-header a, +.box.box-solid.box-warning > .box-header .btn { + color: #ffffff; +} +.box.box-solid.box-success { + border: 1px solid #00a65a; +} +.box.box-solid.box-success > .box-header { + color: #ffffff; + background: #00a65a; + background-color: #00a65a; +} +.box.box-solid.box-success > .box-header a, +.box.box-solid.box-success > .box-header .btn { + color: #ffffff; +} +.box.box-solid > .box-header > .box-tools .btn { + border: 0; + box-shadow: none; +} +.box.box-solid[class*='bg'] > .box-header { + color: #fff; +} +.box .box-group > .box { + margin-bottom: 5px; +} +.box .knob-label { + text-align: center; + color: #333; + font-weight: 100; + font-size: 12px; + margin-bottom: 0.3em; +} +.box > .overlay, +.overlay-wrapper > .overlay, +.box > .loading-img, +.overlay-wrapper > .loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.box .overlay, +.overlay-wrapper .overlay { + z-index: 50; + background: rgba(255, 255, 255, 0.7); + border-radius: 3px; +} +.box .overlay > .fa, +.overlay-wrapper .overlay > .fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px; +} +.box .overlay.dark, +.overlay-wrapper .overlay.dark { + background: rgba(0, 0, 0, 0.5); +} +.box-header:before, +.box-body:before, +.box-footer:before, +.box-header:after, +.box-body:after, +.box-footer:after { + content: " "; + display: table; +} +.box-header:after, +.box-body:after, +.box-footer:after { + clear: both; +} +.box-header { + color: #444; + display: block; + padding: 10px; + position: relative; +} +.box-header.with-border { + border-bottom: 1px solid #f4f4f4; +} +.collapsed-box .box-header.with-border { + border-bottom: none; +} +.box-header > .fa, +.box-header > .glyphicon, +.box-header > .ion, +.box-header .box-title { + display: inline-block; + font-size: 18px; + margin: 0; + line-height: 1; +} +.box-header > .fa, +.box-header > .glyphicon, +.box-header > .ion { + margin-right: 5px; +} +.box-header > .box-tools { + position: absolute; + right: 10px; + top: 5px; +} +.box-header > .box-tools [data-toggle="tooltip"] { + position: relative; +} +.box-header > .box-tools.pull-right .dropdown-menu { + right: 0; + left: auto; +} +.btn-box-tool { + padding: 5px; + font-size: 12px; + background: transparent; + color: #97a0b3; +} +.open .btn-box-tool, +.btn-box-tool:hover { + color: #606c84; +} +.btn-box-tool.btn:active { + box-shadow: none; +} +.box-body { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + padding: 10px; +} +.no-header .box-body { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.box-body > .table { + margin-bottom: 0; +} +.box-body .fc { + margin-top: 5px; +} +.box-body .full-width-chart { + margin: -19px; +} +.box-body.no-padding .full-width-chart { + margin: -9px; +} +.box-body .box-pane { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 3px; +} +.box-body .box-pane-right { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 0; +} +.box-footer { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; + border-top: 1px solid #f4f4f4; + padding: 10px; + background-color: #ffffff; +} +.chart-legend { + margin: 10px 0; +} +@media (max-width: 991px) { + .chart-legend > li { + float: left; + margin-right: 10px; + } +} +.box-comments { + background: #f7f7f7; +} +.box-comments .box-comment { + padding: 8px 0; + border-bottom: 1px solid #eee; +} +.box-comments .box-comment:before, +.box-comments .box-comment:after { + content: " "; + display: table; +} +.box-comments .box-comment:after { + clear: both; +} +.box-comments .box-comment:last-of-type { + border-bottom: 0; +} +.box-comments .box-comment:first-of-type { + padding-top: 0; +} +.box-comments .box-comment img { + float: left; +} +.box-comments .comment-text { + margin-left: 40px; + color: #555; +} +.box-comments .username { + color: #444; + display: block; + font-weight: 600; +} +.box-comments .text-muted { + font-weight: 400; + font-size: 12px; +} +/* Widget: TODO LIST */ +.todo-list { + margin: 0; + padding: 0; + list-style: none; + overflow: auto; +} +.todo-list > li { + border-radius: 2px; + padding: 10px; + background: #f4f4f4; + margin-bottom: 2px; + border-left: 2px solid #e6e7e8; + color: #444; +} +.todo-list > li:last-of-type { + margin-bottom: 0; +} +.todo-list > li > input[type='checkbox'] { + margin: 0 10px 0 5px; +} +.todo-list > li .text { + display: inline-block; + margin-left: 5px; + font-weight: 600; +} +.todo-list > li .label { + margin-left: 10px; + font-size: 9px; +} +.todo-list > li .tools { + display: none; + float: right; + color: #dd4b39; +} +.todo-list > li .tools > .fa, +.todo-list > li .tools > .glyphicon, +.todo-list > li .tools > .ion { + margin-right: 5px; + cursor: pointer; +} +.todo-list > li:hover .tools { + display: inline-block; +} +.todo-list > li.done { + color: #999; +} +.todo-list > li.done .text { + text-decoration: line-through; + font-weight: 500; +} +.todo-list > li.done .label { + background: #d2d6de !important; +} +.todo-list .danger { + border-left-color: #dd4b39; +} +.todo-list .warning { + border-left-color: #f39c12; +} +.todo-list .info { + border-left-color: #00c0ef; +} +.todo-list .success { + border-left-color: #00a65a; +} +.todo-list .primary { + border-left-color: #3c8dbc; +} +.todo-list .handle { + display: inline-block; + cursor: move; + margin: 0 5px; +} +/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/ +.chat { + padding: 5px 20px 5px 10px; +} +.chat .item { + margin-bottom: 10px; +} +.chat .item:before, +.chat .item:after { + content: " "; + display: table; +} +.chat .item:after { + clear: both; +} +.chat .item > img { + width: 40px; + height: 40px; + border: 2px solid transparent; + border-radius: 50%; +} +.chat .item > .online { + border: 2px solid #00a65a; +} +.chat .item > .offline { + border: 2px solid #dd4b39; +} +.chat .item > .message { + margin-left: 55px; + margin-top: -40px; +} +.chat .item > .message > .name { + display: block; + font-weight: 600; +} +.chat .item > .attachment { + border-radius: 3px; + background: #f4f4f4; + margin-left: 65px; + margin-right: 15px; + padding: 10px; +} +.chat .item > .attachment > h4 { + margin: 0 0 5px 0; + font-weight: 600; + font-size: 14px; +} +.chat .item > .attachment > p, +.chat .item > .attachment > .filename { + font-weight: 600; + font-size: 13px; + font-style: italic; + margin: 0; +} +.chat .item > .attachment:before, +.chat .item > .attachment:after { + content: " "; + display: table; +} +.chat .item > .attachment:after { + clear: both; +} +.box-input { + max-width: 200px; +} +.modal .panel-body { + color: #444; +} +/* + * Component: Info Box + * ------------------- + */ +.info-box { + display: block; + min-height: 90px; + background: #fff; + width: 100%; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 2px; + margin-bottom: 15px; +} +.info-box small { + font-size: 14px; +} +.info-box .progress { + background: rgba(0, 0, 0, 0.2); + margin: 5px -10px 5px -10px; + height: 2px; +} +.info-box .progress, +.info-box .progress .progress-bar { + border-radius: 0; +} +.info-box .progress .progress-bar { + background: #fff; +} +.info-box-icon { + border-top-left-radius: 2px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 2px; + display: block; + float: left; + height: 90px; + width: 90px; + text-align: center; + font-size: 45px; + line-height: 90px; + background: rgba(0, 0, 0, 0.2); +} +.info-box-icon > img { + max-width: 100%; +} +.info-box-content { + padding: 5px 10px; + margin-left: 90px; +} +.info-box-number { + display: block; + font-weight: bold; + font-size: 18px; +} +.progress-description, +.info-box-text { + display: block; + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.info-box-text { + text-transform: uppercase; +} +.info-box-more { + display: block; +} +.progress-description { + margin: 0; +} +/* + * Component: Timeline + * ------------------- + */ +.timeline { + position: relative; + margin: 0 0 30px 0; + padding: 0; + list-style: none; +} +.timeline:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + width: 4px; + background: #ddd; + left: 31px; + margin: 0; + border-radius: 2px; +} +.timeline > li { + position: relative; + margin-right: 10px; + margin-bottom: 15px; +} +.timeline > li:before, +.timeline > li:after { + content: " "; + display: table; +} +.timeline > li:after { + clear: both; +} +.timeline > li > .timeline-item { + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; + margin-top: 0; + background: #fff; + color: #444; + margin-left: 60px; + margin-right: 15px; + padding: 0; + position: relative; +} +.timeline > li > .timeline-item > .time { + color: #999; + float: right; + padding: 10px; + font-size: 12px; +} +.timeline > li > .timeline-item > .timeline-header { + margin: 0; + color: #555; + border-bottom: 1px solid #f4f4f4; + padding: 10px; + font-size: 16px; + line-height: 1.1; +} +.timeline > li > .timeline-item > .timeline-header > a { + font-weight: 600; +} +.timeline > li > .timeline-item > .timeline-body, +.timeline > li > .timeline-item > .timeline-footer { + padding: 10px; +} +.timeline > li > .fa, +.timeline > li > .glyphicon, +.timeline > li > .ion { + width: 30px; + height: 30px; + font-size: 15px; + line-height: 30px; + position: absolute; + color: #666; + background: #d2d6de; + border-radius: 50%; + text-align: center; + left: 18px; + top: 0; +} +.timeline > .time-label > span { + font-weight: 600; + padding: 5px; + display: inline-block; + background-color: #fff; + border-radius: 4px; +} +.timeline-inverse > li > .timeline-item { + background: #f0f0f0; + border: 1px solid #ddd; + -webkit-box-shadow: none; + box-shadow: none; +} +.timeline-inverse > li > .timeline-item > .timeline-header { + border-bottom-color: #ddd; +} +/* + * Component: Button + * ----------------- + */ +.btn { + border-radius: 3px; + -webkit-box-shadow: none; + box-shadow: none; + border: 1px solid transparent; +} +.btn.uppercase { + text-transform: uppercase; +} +.btn.btn-flat { + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + border-width: 1px; +} +.btn:active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn:focus { + outline: none; +} +.btn.btn-file { + position: relative; + overflow: hidden; +} +.btn.btn-file > input[type='file'] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + font-size: 100px; + text-align: right; + opacity: 0; + filter: alpha(opacity=0); + outline: none; + background: white; + cursor: inherit; + display: block; +} +.btn-default { + background-color: #f4f4f4; + color: #444; + border-color: #ddd; +} +.btn-default:hover, +.btn-default:active, +.btn-default.hover { + background-color: #e7e7e7; +} +.btn-primary { + background-color: #3c8dbc; + border-color: #367fa9; +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.hover { + background-color: #367fa9; +} +.btn-success { + background-color: #00a65a; + border-color: #008d4c; +} +.btn-success:hover, +.btn-success:active, +.btn-success.hover { + background-color: #008d4c; +} +.btn-info { + background-color: #00c0ef; + border-color: #00acd6; +} +.btn-info:hover, +.btn-info:active, +.btn-info.hover { + background-color: #00acd6; +} +.btn-danger { + background-color: #dd4b39; + border-color: #d73925; +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.hover { + background-color: #d73925; +} +.btn-warning { + background-color: #f39c12; + border-color: #e08e0b; +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.hover { + background-color: #e08e0b; +} +.btn-outline { + border: 1px solid #fff; + background: transparent; + color: #fff; +} +.btn-outline:hover, +.btn-outline:focus, +.btn-outline:active { + color: rgba(255, 255, 255, 0.7); + border-color: rgba(255, 255, 255, 0.7); +} +.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn[class*='bg-']:hover { + -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2); +} +.btn-app { + border-radius: 3px; + position: relative; + padding: 15px 5px; + margin: 0 0 10px 10px; + min-width: 80px; + height: 60px; + text-align: center; + color: #666; + border: 1px solid #ddd; + background-color: #f4f4f4; + font-size: 12px; +} +.btn-app > .fa, +.btn-app > .glyphicon, +.btn-app > .ion { + font-size: 20px; + display: block; +} +.btn-app:hover { + background: #f4f4f4; + color: #444; + border-color: #aaa; +} +.btn-app:active, +.btn-app:focus { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-app > .badge { + position: absolute; + top: -3px; + right: -10px; + font-size: 10px; + font-weight: 400; +} +/* + * Component: Callout + * ------------------ + */ +.callout { + border-radius: 3px; + margin: 0 0 20px 0; + padding: 15px 30px 15px 15px; + border-left: 5px solid #eee; +} +.callout a { + color: #fff; + text-decoration: underline; +} +.callout a:hover { + color: #eee; +} +.callout h4 { + margin-top: 0; + font-weight: 600; +} +.callout p:last-child { + margin-bottom: 0; +} +.callout code, +.callout .highlight { + background-color: #fff; +} +.callout.callout-danger { + border-color: #c23321; +} +.callout.callout-warning { + border-color: #c87f0a; +} +.callout.callout-info { + border-color: #0097bc; +} +.callout.callout-success { + border-color: #00733e; +} +/* + * Component: alert + * ---------------- + */ +.alert { + border-radius: 3px; +} +.alert h4 { + font-weight: 600; +} +.alert .icon { + margin-right: 10px; +} +.alert .close { + color: #000; + opacity: 0.2; + filter: alpha(opacity=20); +} +.alert .close:hover { + opacity: 0.5; + filter: alpha(opacity=50); +} +.alert a { + color: #fff; + text-decoration: underline; +} +.alert-success { + border-color: #008d4c; +} +.alert-danger, +.alert-error { + border-color: #d73925; +} +.alert-warning { + border-color: #e08e0b; +} +.alert-info { + border-color: #00acd6; +} +/* + * Component: Nav + * -------------- + */ +.nav > li > a:hover, +.nav > li > a:active, +.nav > li > a:focus { + color: #444; + background: #f7f7f7; +} +/* NAV PILLS */ +.nav-pills > li > a { + border-radius: 0; + border-top: 3px solid transparent; + color: #444; +} +.nav-pills > li > a > .fa, +.nav-pills > li > a > .glyphicon, +.nav-pills > li > a > .ion { + margin-right: 5px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + border-top-color: #3c8dbc; +} +.nav-pills > li.active > a { + font-weight: 600; +} +/* NAV STACKED */ +.nav-stacked > li > a { + border-radius: 0; + border-top: 0; + border-left: 3px solid transparent; + color: #444; +} +.nav-stacked > li.active > a, +.nav-stacked > li.active > a:hover { + background: transparent; + color: #444; + border-top: 0; + border-left-color: #3c8dbc; +} +.nav-stacked > li.header { + border-bottom: 1px solid #ddd; + color: #777; + margin-bottom: 10px; + padding: 5px 10px; + text-transform: uppercase; +} +/* NAV TABS */ +.nav-tabs-custom { + margin-bottom: 20px; + background: #fff; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; +} +.nav-tabs-custom > .nav-tabs { + margin: 0; + border-bottom-color: #f4f4f4; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.nav-tabs-custom > .nav-tabs > li { + border-top: 3px solid transparent; + margin-bottom: -2px; + margin-right: 5px; +} +.nav-tabs-custom > .nav-tabs > li > a { + color: #444; + border-radius: 0; +} +.nav-tabs-custom > .nav-tabs > li > a.text-muted { + color: #999; +} +.nav-tabs-custom > .nav-tabs > li > a, +.nav-tabs-custom > .nav-tabs > li > a:hover { + background: transparent; + margin: 0; +} +.nav-tabs-custom > .nav-tabs > li > a:hover { + color: #999; +} +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover, +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus, +.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active { + border-color: transparent; +} +.nav-tabs-custom > .nav-tabs > li.active { + border-top-color: #3c8dbc; +} +.nav-tabs-custom > .nav-tabs > li.active > a, +.nav-tabs-custom > .nav-tabs > li.active:hover > a { + background-color: #fff; + color: #444; +} +.nav-tabs-custom > .nav-tabs > li.active > a { + border-top-color: transparent; + border-left-color: #f4f4f4; + border-right-color: #f4f4f4; +} +.nav-tabs-custom > .nav-tabs > li:first-of-type { + margin-left: 0; +} +.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a { + border-left-color: transparent; +} +.nav-tabs-custom > .nav-tabs.pull-right { + float: none !important; +} +.nav-tabs-custom > .nav-tabs.pull-right > li { + float: right; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type { + margin-right: 0; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a { + border-left-width: 1px; +} +.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a { + border-left-color: #f4f4f4; + border-right-color: transparent; +} +.nav-tabs-custom > .nav-tabs > li.header { + line-height: 35px; + padding: 0 10px; + font-size: 20px; + color: #444; +} +.nav-tabs-custom > .nav-tabs > li.header > .fa, +.nav-tabs-custom > .nav-tabs > li.header > .glyphicon, +.nav-tabs-custom > .nav-tabs > li.header > .ion { + margin-right: 5px; +} +.nav-tabs-custom > .tab-content { + background: #fff; + padding: 10px; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.nav-tabs-custom .dropdown.open > a:active, +.nav-tabs-custom .dropdown.open > a:focus { + background: transparent; + color: #999; +} +.nav-tabs-custom.tab-primary > .nav-tabs > li.active { + border-top-color: #3c8dbc; +} +.nav-tabs-custom.tab-info > .nav-tabs > li.active { + border-top-color: #00c0ef; +} +.nav-tabs-custom.tab-danger > .nav-tabs > li.active { + border-top-color: #dd4b39; +} +.nav-tabs-custom.tab-warning > .nav-tabs > li.active { + border-top-color: #f39c12; +} +.nav-tabs-custom.tab-success > .nav-tabs > li.active { + border-top-color: #00a65a; +} +.nav-tabs-custom.tab-default > .nav-tabs > li.active { + border-top-color: #d2d6de; +} +/* PAGINATION */ +.pagination > li > a { + background: #fafafa; + color: #666; +} +.pagination.pagination-flat > li > a { + border-radius: 0 !important; +} +/* + * Component: Products List + * ------------------------ + */ +.products-list { + list-style: none; + margin: 0; + padding: 0; +} +.products-list > .item { + border-radius: 3px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + padding: 10px 0; + background: #fff; +} +.products-list > .item:before, +.products-list > .item:after { + content: " "; + display: table; +} +.products-list > .item:after { + clear: both; +} +.products-list .product-img { + float: left; +} +.products-list .product-img img { + width: 50px; + height: 50px; +} +.products-list .product-info { + margin-left: 60px; +} +.products-list .product-title { + font-weight: 600; +} +.products-list .product-description { + display: block; + color: #999; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.product-list-in-box > .item { + -webkit-box-shadow: none; + box-shadow: none; + border-radius: 0; + border-bottom: 1px solid #f4f4f4; +} +.product-list-in-box > .item:last-of-type { + border-bottom-width: 0; +} +/* + * Component: Table + * ---------------- + */ +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + border-top: 1px solid #f4f4f4; +} +.table > thead > tr > th { + border-bottom: 2px solid #f4f4f4; +} +.table tr td .progress { + margin-top: 5px; +} +.table-bordered { + border: 1px solid #f4f4f4; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #f4f4f4; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table.no-border, +.table.no-border td, +.table.no-border th { + border: 0; +} +/* .text-center in tables */ +table.text-center, +table.text-center td, +table.text-center th { + text-align: center; +} +.table.align th { + text-align: left; +} +.table.align td { + text-align: right; +} +/* + * Component: Label + * ---------------- + */ +.label-default { + background-color: #d2d6de; + color: #444; +} +/* + * Component: Direct Chat + * ---------------------- + */ +.direct-chat .box-body { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + position: relative; + overflow-x: hidden; + padding: 0; +} +.direct-chat.chat-pane-open .direct-chat-contacts { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.direct-chat-messages { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + padding: 10px; + height: 250px; + overflow: auto; +} +.direct-chat-msg, +.direct-chat-text { + display: block; +} +.direct-chat-msg { + margin-bottom: 10px; +} +.direct-chat-msg:before, +.direct-chat-msg:after { + content: " "; + display: table; +} +.direct-chat-msg:after { + clear: both; +} +.direct-chat-messages, +.direct-chat-contacts { + -webkit-transition: -webkit-transform 0.5s ease-in-out; + -moz-transition: -moz-transform 0.5s ease-in-out; + -o-transition: -o-transform 0.5s ease-in-out; + transition: transform 0.5s ease-in-out; +} +.direct-chat-text { + border-radius: 5px; + position: relative; + padding: 5px 10px; + background: #d2d6de; + border: 1px solid #d2d6de; + margin: 5px 0 0 50px; + color: #444444; +} +.direct-chat-text:after, +.direct-chat-text:before { + position: absolute; + right: 100%; + top: 15px; + border: solid transparent; + border-right-color: #d2d6de; + content: ' '; + height: 0; + width: 0; + pointer-events: none; +} +.direct-chat-text:after { + border-width: 5px; + margin-top: -5px; +} +.direct-chat-text:before { + border-width: 6px; + margin-top: -6px; +} +.right .direct-chat-text { + margin-right: 50px; + margin-left: 0; +} +.right .direct-chat-text:after, +.right .direct-chat-text:before { + right: auto; + left: 100%; + border-right-color: transparent; + border-left-color: #d2d6de; +} +.direct-chat-img { + border-radius: 50%; + float: left; + width: 40px; + height: 40px; +} +.right .direct-chat-img { + float: right; +} +.direct-chat-info { + display: block; + margin-bottom: 2px; + font-size: 12px; +} +.direct-chat-name { + font-weight: 600; +} +.direct-chat-timestamp { + color: #999; +} +.direct-chat-contacts-open .direct-chat-contacts { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.direct-chat-contacts { + -webkit-transform: translate(101%, 0); + -ms-transform: translate(101%, 0); + -o-transform: translate(101%, 0); + transform: translate(101%, 0); + position: absolute; + top: 0; + bottom: 0; + height: 250px; + width: 100%; + background: #222d32; + color: #fff; + overflow: auto; +} +.contacts-list > li { + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + padding: 10px; + margin: 0; +} +.contacts-list > li:before, +.contacts-list > li:after { + content: " "; + display: table; +} +.contacts-list > li:after { + clear: both; +} +.contacts-list > li:last-of-type { + border-bottom: none; +} +.contacts-list-img { + border-radius: 50%; + width: 40px; + float: left; +} +.contacts-list-info { + margin-left: 45px; + color: #fff; +} +.contacts-list-name, +.contacts-list-status { + display: block; +} +.contacts-list-name { + font-weight: 600; +} +.contacts-list-status { + font-size: 12px; +} +.contacts-list-date { + color: #aaa; + font-weight: normal; +} +.contacts-list-msg { + color: #999; +} +.direct-chat-danger .right > .direct-chat-text { + background: #dd4b39; + border-color: #dd4b39; + color: #ffffff; +} +.direct-chat-danger .right > .direct-chat-text:after, +.direct-chat-danger .right > .direct-chat-text:before { + border-left-color: #dd4b39; +} +.direct-chat-primary .right > .direct-chat-text { + background: #3c8dbc; + border-color: #3c8dbc; + color: #ffffff; +} +.direct-chat-primary .right > .direct-chat-text:after, +.direct-chat-primary .right > .direct-chat-text:before { + border-left-color: #3c8dbc; +} +.direct-chat-warning .right > .direct-chat-text { + background: #f39c12; + border-color: #f39c12; + color: #ffffff; +} +.direct-chat-warning .right > .direct-chat-text:after, +.direct-chat-warning .right > .direct-chat-text:before { + border-left-color: #f39c12; +} +.direct-chat-info .right > .direct-chat-text { + background: #00c0ef; + border-color: #00c0ef; + color: #ffffff; +} +.direct-chat-info .right > .direct-chat-text:after, +.direct-chat-info .right > .direct-chat-text:before { + border-left-color: #00c0ef; +} +.direct-chat-success .right > .direct-chat-text { + background: #00a65a; + border-color: #00a65a; + color: #ffffff; +} +.direct-chat-success .right > .direct-chat-text:after, +.direct-chat-success .right > .direct-chat-text:before { + border-left-color: #00a65a; +} +/* + * Component: Users List + * --------------------- + */ +.users-list > li { + width: 25%; + float: left; + padding: 10px; + text-align: center; +} +.users-list > li img { + border-radius: 50%; + max-width: 100%; + height: auto; +} +.users-list > li > a:hover, +.users-list > li > a:hover .users-list-name { + color: #999; +} +.users-list-name, +.users-list-date { + display: block; +} +.users-list-name { + font-weight: 600; + color: #444; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.users-list-date { + color: #999; + font-size: 12px; +} +/* + * Component: Carousel + * ------------------- + */ +.carousel-control.left, +.carousel-control.right { + background-image: none; +} +.carousel-control > .fa { + font-size: 40px; + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -20px; +} +/* + * Component: modal + * ---------------- + */ +.modal { + background: rgba(0, 0, 0, 0.3); +} +.modal-content { + border-radius: 0; + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + border: 0; +} +@media (min-width: 768px) { + .modal-content { + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125); + } +} +.modal-header { + border-bottom-color: #f4f4f4; +} +.modal-footer { + border-top-color: #f4f4f4; +} +.modal-primary .modal-header, +.modal-primary .modal-footer { + border-color: #307095; +} +.modal-warning .modal-header, +.modal-warning .modal-footer { + border-color: #c87f0a; +} +.modal-info .modal-header, +.modal-info .modal-footer { + border-color: #0097bc; +} +.modal-success .modal-header, +.modal-success .modal-footer { + border-color: #00733e; +} +.modal-danger .modal-header, +.modal-danger .modal-footer { + border-color: #c23321; +} +/* + * Component: Social Widgets + * ------------------------- + */ +.box-widget { + border: none; + position: relative; +} +.widget-user .widget-user-header { + padding: 20px; + height: 120px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.widget-user .widget-user-username { + margin-top: 0; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); +} +.widget-user .widget-user-desc { + margin-top: 0; +} +.widget-user .widget-user-image { + position: absolute; + top: 65px; + left: 50%; + margin-left: -45px; +} +.widget-user .widget-user-image > img { + width: 90px; + height: auto; + border: 3px solid #fff; +} +.widget-user .box-footer { + padding-top: 30px; +} +.widget-user-2 .widget-user-header { + padding: 20px; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} +.widget-user-2 .widget-user-username { + margin-top: 5px; + margin-bottom: 5px; + font-size: 25px; + font-weight: 300; +} +.widget-user-2 .widget-user-desc { + margin-top: 0; +} +.widget-user-2 .widget-user-username, +.widget-user-2 .widget-user-desc { + margin-left: 75px; +} +.widget-user-2 .widget-user-image > img { + width: 65px; + height: auto; + float: left; +} +/* + * Page: Mailbox + * ------------- + */ +.mailbox-messages > .table { + margin: 0; +} +.mailbox-controls { + padding: 5px; +} +.mailbox-controls.with-border { + border-bottom: 1px solid #f4f4f4; +} +.mailbox-read-info { + border-bottom: 1px solid #f4f4f4; + padding: 10px; +} +.mailbox-read-info h3 { + font-size: 20px; + margin: 0; +} +.mailbox-read-info h5 { + margin: 0; + padding: 5px 0 0 0; +} +.mailbox-read-time { + color: #999; + font-size: 13px; +} +.mailbox-read-message { + padding: 10px; +} +.mailbox-attachments li { + float: left; + width: 200px; + border: 1px solid #eee; + margin-bottom: 10px; + margin-right: 10px; +} +.mailbox-attachment-name { + font-weight: bold; + color: #666; +} +.mailbox-attachment-icon, +.mailbox-attachment-info, +.mailbox-attachment-size { + display: block; +} +.mailbox-attachment-info { + padding: 10px; + background: #f4f4f4; +} +.mailbox-attachment-size { + color: #999; + font-size: 12px; +} +.mailbox-attachment-icon { + text-align: center; + font-size: 65px; + color: #666; + padding: 20px 10px; +} +.mailbox-attachment-icon.has-img { + padding: 0; +} +.mailbox-attachment-icon.has-img > img { + max-width: 100%; + height: auto; +} +/* + * Page: Lock Screen + * ----------------- + */ +/* ADD THIS CLASS TO THE TAG */ +.lockscreen { + background: #d2d6de; +} +.lockscreen-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; +} +.lockscreen-logo a { + color: #444; +} +.lockscreen-wrapper { + max-width: 400px; + margin: 0 auto; + margin-top: 10%; +} +/* User name [optional] */ +.lockscreen .lockscreen-name { + text-align: center; + font-weight: 600; +} +/* Will contain the image and the sign in form */ +.lockscreen-item { + border-radius: 4px; + padding: 0; + background: #fff; + position: relative; + margin: 10px auto 30px auto; + width: 290px; +} +/* User image */ +.lockscreen-image { + border-radius: 50%; + position: absolute; + left: -10px; + top: -25px; + background: #fff; + padding: 5px; + z-index: 10; +} +.lockscreen-image > img { + border-radius: 50%; + width: 70px; + height: 70px; +} +/* Contains the password input and the login button */ +.lockscreen-credentials { + margin-left: 70px; +} +.lockscreen-credentials .form-control { + border: 0; +} +.lockscreen-credentials .btn { + background-color: #fff; + border: 0; + padding: 0 10px; +} +.lockscreen-footer { + margin-top: 10px; +} +/* + * Page: Login & Register + * ---------------------- + */ +.login-logo, +.register-logo { + font-size: 35px; + text-align: center; + margin-bottom: 25px; + font-weight: 300; +} +.login-logo a, +.register-logo a { + color: #444; +} +.login-page, +.register-page { + background: #d2d6de; +} +.login-box, +.register-box { + width: 360px; + margin: 7% auto; +} +@media (max-width: 768px) { + .login-box, + .register-box { + width: 90%; + margin-top: 20px; + } +} +.login-box-body, +.register-box-body { + background: #fff; + padding: 20px; + border-top: 0; + color: #666; +} +.login-box-body .form-control-feedback, +.register-box-body .form-control-feedback { + color: #777; +} +.login-box-msg, +.register-box-msg { + margin: 0; + text-align: center; + padding: 0 20px 20px 20px; +} +.social-auth-links { + margin: 10px 0; +} +/* + * Page: 400 and 500 error pages + * ------------------------------ + */ +.error-page { + width: 600px; + margin: 20px auto 0 auto; +} +@media (max-width: 991px) { + .error-page { + width: 100%; + } +} +.error-page > .headline { + float: left; + font-size: 100px; + font-weight: 300; +} +@media (max-width: 991px) { + .error-page > .headline { + float: none; + text-align: center; + } +} +.error-page > .error-content { + margin-left: 190px; + display: block; +} +@media (max-width: 991px) { + .error-page > .error-content { + margin-left: 0; + } +} +.error-page > .error-content > h3 { + font-weight: 300; + font-size: 25px; +} +@media (max-width: 991px) { + .error-page > .error-content > h3 { + text-align: center; + } +} +/* + * Page: Invoice + * ------------- + */ +.invoice { + position: relative; + background: #fff; + border: 1px solid #f4f4f4; + padding: 20px; + margin: 10px 25px; +} +.invoice-title { + margin-top: 0; +} +/* + * Page: Profile + * ------------- + */ +.profile-user-img { + margin: 0 auto; + width: 100px; + padding: 3px; + border: 3px solid #d2d6de; +} +.profile-username { + font-size: 21px; + margin-top: 5px; +} +.post { + border-bottom: 1px solid #d2d6de; + margin-bottom: 15px; + padding-bottom: 15px; + color: #666; +} +.post:last-of-type { + border-bottom: 0; + margin-bottom: 0; + padding-bottom: 0; +} +.post .user-block { + margin-bottom: 15px; +} +/* + * Social Buttons for Bootstrap + * + * Copyright 2013-2015 Panayiotis Lipiridis + * Licensed under the MIT License + * + * https://github.com/lipis/bootstrap-social + */ +.btn-social { + position: relative; + padding-left: 44px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.btn-social > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 32px; + line-height: 34px; + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.btn-social.btn-lg { + padding-left: 61px; +} +.btn-social.btn-lg > :first-child { + line-height: 45px; + width: 45px; + font-size: 1.8em; +} +.btn-social.btn-sm { + padding-left: 38px; +} +.btn-social.btn-sm > :first-child { + line-height: 28px; + width: 28px; + font-size: 1.4em; +} +.btn-social.btn-xs { + padding-left: 30px; +} +.btn-social.btn-xs > :first-child { + line-height: 20px; + width: 20px; + font-size: 1.2em; +} +.btn-social-icon { + position: relative; + padding-left: 44px; + text-align: left; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + height: 34px; + width: 34px; + padding: 0; +} +.btn-social-icon > :first-child { + position: absolute; + left: 0; + top: 0; + bottom: 0; + width: 32px; + line-height: 34px; + font-size: 1.6em; + text-align: center; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} +.btn-social-icon.btn-lg { + padding-left: 61px; +} +.btn-social-icon.btn-lg > :first-child { + line-height: 45px; + width: 45px; + font-size: 1.8em; +} +.btn-social-icon.btn-sm { + padding-left: 38px; +} +.btn-social-icon.btn-sm > :first-child { + line-height: 28px; + width: 28px; + font-size: 1.4em; +} +.btn-social-icon.btn-xs { + padding-left: 30px; +} +.btn-social-icon.btn-xs > :first-child { + line-height: 20px; + width: 20px; + font-size: 1.2em; +} +.btn-social-icon > :first-child { + border: none; + text-align: center; + width: 100%; +} +.btn-social-icon.btn-lg { + height: 45px; + width: 45px; + padding-left: 0; + padding-right: 0; +} +.btn-social-icon.btn-sm { + height: 30px; + width: 30px; + padding-left: 0; + padding-right: 0; +} +.btn-social-icon.btn-xs { + height: 22px; + width: 22px; + padding-left: 0; + padding-right: 0; +} +.btn-adn { + color: #ffffff; + background-color: #d87a68; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:focus, +.btn-adn.focus { + color: #ffffff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:hover { + color: #ffffff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active, +.btn-adn.active, +.open > .dropdown-toggle.btn-adn { + color: #ffffff; + background-color: #ce563f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-adn:active, +.btn-adn.active, +.open > .dropdown-toggle.btn-adn { + background-image: none; +} +.btn-adn .badge { + color: #d87a68; + background-color: #ffffff; +} +.btn-bitbucket { + color: #ffffff; + background-color: #205081; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:focus, +.btn-bitbucket.focus { + color: #ffffff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:hover { + color: #ffffff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active, +.btn-bitbucket.active, +.open > .dropdown-toggle.btn-bitbucket { + color: #ffffff; + background-color: #163758; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-bitbucket:active, +.btn-bitbucket.active, +.open > .dropdown-toggle.btn-bitbucket { + background-image: none; +} +.btn-bitbucket .badge { + color: #205081; + background-color: #ffffff; +} +.btn-dropbox { + color: #ffffff; + background-color: #1087dd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:focus, +.btn-dropbox.focus { + color: #ffffff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:hover { + color: #ffffff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active, +.btn-dropbox.active, +.open > .dropdown-toggle.btn-dropbox { + color: #ffffff; + background-color: #0d6aad; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-dropbox:active, +.btn-dropbox.active, +.open > .dropdown-toggle.btn-dropbox { + background-image: none; +} +.btn-dropbox .badge { + color: #1087dd; + background-color: #ffffff; +} +.btn-facebook { + color: #ffffff; + background-color: #3b5998; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:focus, +.btn-facebook.focus { + color: #ffffff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:hover { + color: #ffffff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active, +.btn-facebook.active, +.open > .dropdown-toggle.btn-facebook { + color: #ffffff; + background-color: #2d4373; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-facebook:active, +.btn-facebook.active, +.open > .dropdown-toggle.btn-facebook { + background-image: none; +} +.btn-facebook .badge { + color: #3b5998; + background-color: #ffffff; +} +.btn-flickr { + color: #ffffff; + background-color: #ff0084; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:focus, +.btn-flickr.focus { + color: #ffffff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:hover { + color: #ffffff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active, +.btn-flickr.active, +.open > .dropdown-toggle.btn-flickr { + color: #ffffff; + background-color: #cc006a; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-flickr:active, +.btn-flickr.active, +.open > .dropdown-toggle.btn-flickr { + background-image: none; +} +.btn-flickr .badge { + color: #ff0084; + background-color: #ffffff; +} +.btn-foursquare { + color: #ffffff; + background-color: #f94877; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:focus, +.btn-foursquare.focus { + color: #ffffff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:hover { + color: #ffffff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active, +.btn-foursquare.active, +.open > .dropdown-toggle.btn-foursquare { + color: #ffffff; + background-color: #f71752; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-foursquare:active, +.btn-foursquare.active, +.open > .dropdown-toggle.btn-foursquare { + background-image: none; +} +.btn-foursquare .badge { + color: #f94877; + background-color: #ffffff; +} +.btn-github { + color: #ffffff; + background-color: #444444; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:focus, +.btn-github.focus { + color: #ffffff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:hover { + color: #ffffff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active, +.btn-github.active, +.open > .dropdown-toggle.btn-github { + color: #ffffff; + background-color: #2b2b2b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-github:active, +.btn-github.active, +.open > .dropdown-toggle.btn-github { + background-image: none; +} +.btn-github .badge { + color: #444444; + background-color: #ffffff; +} +.btn-google { + color: #ffffff; + background-color: #dd4b39; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:focus, +.btn-google.focus { + color: #ffffff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:hover { + color: #ffffff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active, +.btn-google.active, +.open > .dropdown-toggle.btn-google { + color: #ffffff; + background-color: #c23321; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-google:active, +.btn-google.active, +.open > .dropdown-toggle.btn-google { + background-image: none; +} +.btn-google .badge { + color: #dd4b39; + background-color: #ffffff; +} +.btn-instagram { + color: #ffffff; + background-color: #3f729b; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:focus, +.btn-instagram.focus { + color: #ffffff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:hover { + color: #ffffff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active, +.btn-instagram.active, +.open > .dropdown-toggle.btn-instagram { + color: #ffffff; + background-color: #305777; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-instagram:active, +.btn-instagram.active, +.open > .dropdown-toggle.btn-instagram { + background-image: none; +} +.btn-instagram .badge { + color: #3f729b; + background-color: #ffffff; +} +.btn-linkedin { + color: #ffffff; + background-color: #007bb6; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:focus, +.btn-linkedin.focus { + color: #ffffff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:hover { + color: #ffffff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active, +.btn-linkedin.active, +.open > .dropdown-toggle.btn-linkedin { + color: #ffffff; + background-color: #005983; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-linkedin:active, +.btn-linkedin.active, +.open > .dropdown-toggle.btn-linkedin { + background-image: none; +} +.btn-linkedin .badge { + color: #007bb6; + background-color: #ffffff; +} +.btn-microsoft { + color: #ffffff; + background-color: #2672ec; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:focus, +.btn-microsoft.focus { + color: #ffffff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:hover { + color: #ffffff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active, +.btn-microsoft.active, +.open > .dropdown-toggle.btn-microsoft { + color: #ffffff; + background-color: #125acd; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-microsoft:active, +.btn-microsoft.active, +.open > .dropdown-toggle.btn-microsoft { + background-image: none; +} +.btn-microsoft .badge { + color: #2672ec; + background-color: #ffffff; +} +.btn-openid { + color: #ffffff; + background-color: #f7931e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:focus, +.btn-openid.focus { + color: #ffffff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:hover { + color: #ffffff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active, +.btn-openid.active, +.open > .dropdown-toggle.btn-openid { + color: #ffffff; + background-color: #da7908; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-openid:active, +.btn-openid.active, +.open > .dropdown-toggle.btn-openid { + background-image: none; +} +.btn-openid .badge { + color: #f7931e; + background-color: #ffffff; +} +.btn-pinterest { + color: #ffffff; + background-color: #cb2027; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:focus, +.btn-pinterest.focus { + color: #ffffff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:hover { + color: #ffffff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active, +.btn-pinterest.active, +.open > .dropdown-toggle.btn-pinterest { + color: #ffffff; + background-color: #9f191f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-pinterest:active, +.btn-pinterest.active, +.open > .dropdown-toggle.btn-pinterest { + background-image: none; +} +.btn-pinterest .badge { + color: #cb2027; + background-color: #ffffff; +} +.btn-reddit { + color: #000000; + background-color: #eff7ff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:focus, +.btn-reddit.focus { + color: #000000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:hover { + color: #000000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active, +.btn-reddit.active, +.open > .dropdown-toggle.btn-reddit { + color: #000000; + background-color: #bcddff; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-reddit:active, +.btn-reddit.active, +.open > .dropdown-toggle.btn-reddit { + background-image: none; +} +.btn-reddit .badge { + color: #eff7ff; + background-color: #000000; +} +.btn-soundcloud { + color: #ffffff; + background-color: #ff5500; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:focus, +.btn-soundcloud.focus { + color: #ffffff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:hover { + color: #ffffff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active, +.btn-soundcloud.active, +.open > .dropdown-toggle.btn-soundcloud { + color: #ffffff; + background-color: #cc4400; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-soundcloud:active, +.btn-soundcloud.active, +.open > .dropdown-toggle.btn-soundcloud { + background-image: none; +} +.btn-soundcloud .badge { + color: #ff5500; + background-color: #ffffff; +} +.btn-tumblr { + color: #ffffff; + background-color: #2c4762; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:focus, +.btn-tumblr.focus { + color: #ffffff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:hover { + color: #ffffff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active, +.btn-tumblr.active, +.open > .dropdown-toggle.btn-tumblr { + color: #ffffff; + background-color: #1c2d3f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-tumblr:active, +.btn-tumblr.active, +.open > .dropdown-toggle.btn-tumblr { + background-image: none; +} +.btn-tumblr .badge { + color: #2c4762; + background-color: #ffffff; +} +.btn-twitter { + color: #ffffff; + background-color: #55acee; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:focus, +.btn-twitter.focus { + color: #ffffff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:hover { + color: #ffffff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active, +.btn-twitter.active, +.open > .dropdown-toggle.btn-twitter { + color: #ffffff; + background-color: #2795e9; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-twitter:active, +.btn-twitter.active, +.open > .dropdown-toggle.btn-twitter { + background-image: none; +} +.btn-twitter .badge { + color: #55acee; + background-color: #ffffff; +} +.btn-vimeo { + color: #ffffff; + background-color: #1ab7ea; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:focus, +.btn-vimeo.focus { + color: #ffffff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:hover { + color: #ffffff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active, +.btn-vimeo.active, +.open > .dropdown-toggle.btn-vimeo { + color: #ffffff; + background-color: #1295bf; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vimeo:active, +.btn-vimeo.active, +.open > .dropdown-toggle.btn-vimeo { + background-image: none; +} +.btn-vimeo .badge { + color: #1ab7ea; + background-color: #ffffff; +} +.btn-vk { + color: #ffffff; + background-color: #587ea3; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:focus, +.btn-vk.focus { + color: #ffffff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:hover { + color: #ffffff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active, +.btn-vk.active, +.open > .dropdown-toggle.btn-vk { + color: #ffffff; + background-color: #466482; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-vk:active, +.btn-vk.active, +.open > .dropdown-toggle.btn-vk { + background-image: none; +} +.btn-vk .badge { + color: #587ea3; + background-color: #ffffff; +} +.btn-yahoo { + color: #ffffff; + background-color: #720e9e; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:focus, +.btn-yahoo.focus { + color: #ffffff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:hover { + color: #ffffff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active, +.btn-yahoo.active, +.open > .dropdown-toggle.btn-yahoo { + color: #ffffff; + background-color: #500a6f; + border-color: rgba(0, 0, 0, 0.2); +} +.btn-yahoo:active, +.btn-yahoo.active, +.open > .dropdown-toggle.btn-yahoo { + background-image: none; +} +.btn-yahoo .badge { + color: #720e9e; + background-color: #ffffff; +} +/* + * Plugin: Full Calendar + * --------------------- + */ +.fc-button { + background: #f4f4f4; + background-image: none; + color: #444; + border-color: #ddd; + border-bottom-color: #ddd; +} +.fc-button:hover, +.fc-button:active, +.fc-button.hover { + background-color: #e9e9e9; +} +.fc-header-title h2 { + font-size: 15px; + line-height: 1.6em; + color: #666; + margin-left: 10px; +} +.fc-header-right { + padding-right: 10px; +} +.fc-header-left { + padding-left: 10px; +} +.fc-widget-header { + background: #fafafa; +} +.fc-grid { + width: 100%; + border: 0; +} +.fc-widget-header:first-of-type, +.fc-widget-content:first-of-type { + border-left: 0; + border-right: 0; +} +.fc-widget-header:last-of-type, +.fc-widget-content:last-of-type { + border-right: 0; +} +.fc-toolbar { + padding: 10px; + margin: 0; +} +.fc-day-number { + font-size: 20px; + font-weight: 300; + padding-right: 10px; +} +.fc-color-picker { + list-style: none; + margin: 0; + padding: 0; +} +.fc-color-picker > li { + float: left; + font-size: 30px; + margin-right: 5px; + line-height: 30px; +} +.fc-color-picker > li .fa { + -webkit-transition: -webkit-transform linear 0.3s; + -moz-transition: -moz-transform linear 0.3s; + -o-transition: -o-transform linear 0.3s; + transition: transform linear 0.3s; +} +.fc-color-picker > li .fa:hover { + -webkit-transform: rotate(30deg); + -ms-transform: rotate(30deg); + -o-transform: rotate(30deg); + transform: rotate(30deg); +} +#add-new-event { + -webkit-transition: all linear 0.3s; + -o-transition: all linear 0.3s; + transition: all linear 0.3s; +} +.external-event { + padding: 5px 10px; + font-weight: bold; + margin-bottom: 4px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 3px; + cursor: move; +} +.external-event:hover { + box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2); +} +/* + * Plugin: Select2 + * --------------- + */ +.select2-container--default.select2-container--focus, +.select2-selection.select2-container--focus, +.select2-container--default:focus, +.select2-selection:focus, +.select2-container--default:active, +.select2-selection:active { + outline: none; +} +.select2-container--default .select2-selection--single, +.select2-selection .select2-selection--single { + border: 1px solid #d2d6de; + border-radius: 0; + padding: 6px 12px; + height: 34px; +} +.select2-container--default.select2-container--open { + border-color: #3c8dbc; +} +.select2-dropdown { + border: 1px solid #d2d6de; + border-radius: 0; +} +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #3c8dbc; + color: white; +} +.select2-results__option { + padding: 6px 12px; + user-select: none; + -webkit-user-select: none; +} +.select2-container .select2-selection--single .select2-selection__rendered { + padding-left: 0; + padding-right: 0; + height: auto; + margin-top: -4px; +} +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 6px; + padding-left: 20px; +} +.select2-container--default .select2-selection--single .select2-selection__arrow { + height: 28px; + right: 3px; +} +.select2-container--default .select2-selection--single .select2-selection__arrow b { + margin-top: 0; +} +.select2-dropdown .select2-search__field, +.select2-search--inline .select2-search__field { + border: 1px solid #d2d6de; +} +.select2-dropdown .select2-search__field:focus, +.select2-search--inline .select2-search__field:focus { + outline: none; + border: 1px solid #3c8dbc; +} +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; +} +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; +} +.select2-container--default .select2-results__option[aria-selected=true], +.select2-container--default .select2-results__option[aria-selected=true]:hover { + color: #444; +} +.select2-container--default .select2-selection--multiple { + border: 1px solid #d2d6de; + border-radius: 0; +} +.select2-container--default .select2-selection--multiple:focus { + border-color: #3c8dbc; +} +.select2-container--default.select2-container--focus .select2-selection--multiple { + border-color: #d2d6de; +} +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #3c8dbc; + border-color: #367fa9; + padding: 1px 10px; + color: #fff; +} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + margin-right: 5px; + color: rgba(255, 255, 255, 0.7); +} +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #fff; +} +.select2-container .select2-selection--single .select2-selection__rendered { + padding-right: 10px; +} +/* + * General: Miscellaneous + * ---------------------- + */ +.pad { + padding: 10px; +} +.margin { + margin: 10px; +} +.margin-bottom { + margin-bottom: 20px; +} +.margin-bottom-none { + margin-bottom: 0; +} +.margin-r-5 { + margin-right: 5px; +} +.inline { + display: inline; +} +.description-block { + display: block; + margin: 10px 0; + text-align: center; +} +.description-block.margin-bottom { + margin-bottom: 25px; +} +.description-block > .description-header { + margin: 0; + padding: 0; + font-weight: 600; + font-size: 16px; +} +.description-block > .description-text { + text-transform: uppercase; +} +.bg-red, +.bg-yellow, +.bg-aqua, +.bg-blue, +.bg-light-blue, +.bg-green, +.bg-navy, +.bg-teal, +.bg-olive, +.bg-lime, +.bg-orange, +.bg-fuchsia, +.bg-purple, +.bg-maroon, +.bg-black, +.bg-red-active, +.bg-yellow-active, +.bg-aqua-active, +.bg-blue-active, +.bg-light-blue-active, +.bg-green-active, +.bg-navy-active, +.bg-teal-active, +.bg-olive-active, +.bg-lime-active, +.bg-orange-active, +.bg-fuchsia-active, +.bg-purple-active, +.bg-maroon-active, +.bg-black-active, +.callout.callout-danger, +.callout.callout-warning, +.callout.callout-info, +.callout.callout-success, +.alert-success, +.alert-danger, +.alert-error, +.alert-warning, +.alert-info, +.label-danger, +.label-info, +.label-warning, +.label-primary, +.label-success, +.modal-primary .modal-body, +.modal-primary .modal-header, +.modal-primary .modal-footer, +.modal-warning .modal-body, +.modal-warning .modal-header, +.modal-warning .modal-footer, +.modal-info .modal-body, +.modal-info .modal-header, +.modal-info .modal-footer, +.modal-success .modal-body, +.modal-success .modal-header, +.modal-success .modal-footer, +.modal-danger .modal-body, +.modal-danger .modal-header, +.modal-danger .modal-footer { + color: #fff !important; +} +.bg-gray { + color: #000; + background-color: #d2d6de !important; +} +.bg-gray-light { + background-color: #f7f7f7; +} +.bg-black { + background-color: #111111 !important; +} +.bg-red, +.callout.callout-danger, +.alert-danger, +.alert-error, +.label-danger, +.modal-danger .modal-body { + background-color: #dd4b39 !important; +} +.bg-yellow, +.callout.callout-warning, +.alert-warning, +.label-warning, +.modal-warning .modal-body { + background-color: #f39c12 !important; +} +.bg-aqua, +.callout.callout-info, +.alert-info, +.label-info, +.modal-info .modal-body { + background-color: #00c0ef !important; +} +.bg-blue { + background-color: #0073b7 !important; +} +.bg-light-blue, +.label-primary, +.modal-primary .modal-body { + background-color: #3c8dbc !important; +} +.bg-green, +.callout.callout-success, +.alert-success, +.label-success, +.modal-success .modal-body { + background-color: #00a65a !important; +} +.bg-navy { + background-color: #001f3f !important; +} +.bg-teal { + background-color: #39cccc !important; +} +.bg-olive { + background-color: #3d9970 !important; +} +.bg-lime { + background-color: #01ff70 !important; +} +.bg-orange { + background-color: #ff851b !important; +} +.bg-fuchsia { + background-color: #f012be !important; +} +.bg-purple { + background-color: #605ca8 !important; +} +.bg-maroon { + background-color: #d81b60 !important; +} +.bg-gray-active { + color: #000; + background-color: #b5bbc8 !important; +} +.bg-black-active { + background-color: #000000 !important; +} +.bg-red-active, +.modal-danger .modal-header, +.modal-danger .modal-footer { + background-color: #d33724 !important; +} +.bg-yellow-active, +.modal-warning .modal-header, +.modal-warning .modal-footer { + background-color: #db8b0b !important; +} +.bg-aqua-active, +.modal-info .modal-header, +.modal-info .modal-footer { + background-color: #00a7d0 !important; +} +.bg-blue-active { + background-color: #005384 !important; +} +.bg-light-blue-active, +.modal-primary .modal-header, +.modal-primary .modal-footer { + background-color: #357ca5 !important; +} +.bg-green-active, +.modal-success .modal-header, +.modal-success .modal-footer { + background-color: #008d4c !important; +} +.bg-navy-active { + background-color: #001a35 !important; +} +.bg-teal-active { + background-color: #30bbbb !important; +} +.bg-olive-active { + background-color: #368763 !important; +} +.bg-lime-active { + background-color: #00e765 !important; +} +.bg-orange-active { + background-color: #ff7701 !important; +} +.bg-fuchsia-active { + background-color: #db0ead !important; +} +.bg-purple-active { + background-color: #555299 !important; +} +.bg-maroon-active { + background-color: #ca195a !important; +} +[class^="bg-"].disabled { + opacity: 0.65; + filter: alpha(opacity=65); +} +.text-red { + color: #dd4b39 !important; +} +.text-yellow { + color: #f39c12 !important; +} +.text-aqua { + color: #00c0ef !important; +} +.text-blue { + color: #0073b7 !important; +} +.text-black { + color: #111111 !important; +} +.text-light-blue { + color: #3c8dbc !important; +} +.text-green { + color: #00a65a !important; +} +.text-gray { + color: #d2d6de !important; +} +.text-navy { + color: #001f3f !important; +} +.text-teal { + color: #39cccc !important; +} +.text-olive { + color: #3d9970 !important; +} +.text-lime { + color: #01ff70 !important; +} +.text-orange { + color: #ff851b !important; +} +.text-fuchsia { + color: #f012be !important; +} +.text-purple { + color: #605ca8 !important; +} +.text-maroon { + color: #d81b60 !important; +} +.link-muted { + color: #7a869d; +} +.link-muted:hover, +.link-muted:focus { + color: #606c84; +} +.link-black { + color: #666; +} +.link-black:hover, +.link-black:focus { + color: #999; +} +.hide { + display: none !important; +} +.no-border { + border: 0 !important; +} +.no-padding { + padding: 0 !important; +} +.no-margin { + margin: 0 !important; +} +.no-shadow { + box-shadow: none !important; +} +.list-unstyled, +.chart-legend, +.contacts-list, +.users-list, +.mailbox-attachments { + list-style: none; + margin: 0; + padding: 0; +} +.list-group-unbordered > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} +.flat { + border-radius: 0 !important; +} +.text-bold, +.text-bold.table td, +.text-bold.table th { + font-weight: 700; +} +.text-sm { + font-size: 12px; +} +.jqstooltip { + padding: 5px !important; + width: auto !important; + height: auto !important; +} +.bg-teal-gradient { + background: #39cccc !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important; + background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important; + background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important; + background: -o-linear-gradient(#7adddd, #39cccc) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important; + color: #fff; +} +.bg-light-blue-gradient { + background: #3c8dbc !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important; + background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important; + background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important; + background: -o-linear-gradient(#67a8ce, #3c8dbc) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important; + color: #fff; +} +.bg-blue-gradient { + background: #0073b7 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important; + background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important; + background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important; + background: -o-linear-gradient(#0089db, #0073b7) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important; + color: #fff; +} +.bg-aqua-gradient { + background: #00c0ef !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important; + background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important; + background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important; + background: -o-linear-gradient(#14d1ff, #00c0ef) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important; + color: #fff; +} +.bg-yellow-gradient { + background: #f39c12 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important; + background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important; + background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important; + background: -o-linear-gradient(#f7bc60, #f39c12) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important; + color: #fff; +} +.bg-purple-gradient { + background: #605ca8 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important; + background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important; + background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important; + background: -o-linear-gradient(#9491c4, #605ca8) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important; + color: #fff; +} +.bg-green-gradient { + background: #00a65a !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important; + background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important; + background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important; + background: -o-linear-gradient(#00ca6d, #00a65a) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important; + color: #fff; +} +.bg-red-gradient { + background: #dd4b39 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important; + background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important; + background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important; + background: -o-linear-gradient(#e47365, #dd4b39) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important; + color: #fff; +} +.bg-black-gradient { + background: #111111 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important; + background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important; + background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important; + background: -o-linear-gradient(#2b2b2b, #111111) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important; + color: #fff; +} +.bg-maroon-gradient { + background: #d81b60 !important; + background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important; + background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important; + background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important; + background: -o-linear-gradient(#e73f7c, #d81b60) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important; + color: #fff; +} +.description-block .description-icon { + font-size: 16px; +} +.no-pad-top { + padding-top: 0; +} +.position-static { + position: static !important; +} +.list-header { + font-size: 15px; + padding: 10px 4px; + font-weight: bold; + color: #666; +} +.list-seperator { + height: 1px; + background: #f4f4f4; + margin: 15px 0 9px 0; +} +.list-link > a { + padding: 4px; + color: #777; +} +.list-link > a:hover { + color: #222; +} +.font-light { + font-weight: 300; +} +.user-block:before, +.user-block:after { + content: " "; + display: table; +} +.user-block:after { + clear: both; +} +.user-block img { + width: 40px; + height: 40px; + float: left; +} +.user-block .username, +.user-block .description, +.user-block .comment { + display: block; + margin-left: 50px; +} +.user-block .username { + font-size: 16px; + font-weight: 600; +} +.user-block .description { + color: #999; + font-size: 13px; +} +.user-block.user-block-sm .username, +.user-block.user-block-sm .description, +.user-block.user-block-sm .comment { + margin-left: 40px; +} +.user-block.user-block-sm .username { + font-size: 14px; +} +.img-sm, +.img-md, +.img-lg, +.box-comments .box-comment img, +.user-block.user-block-sm img { + float: left; +} +.img-sm, +.box-comments .box-comment img, +.user-block.user-block-sm img { + width: 30px !important; + height: 30px !important; +} +.img-sm + .img-push { + margin-left: 40px; +} +.img-md { + width: 60px; + height: 60px; +} +.img-md + .img-push { + margin-left: 70px; +} +.img-lg { + width: 100px; + height: 100px; +} +.img-lg + .img-push { + margin-left: 110px; +} +.img-bordered { + border: 3px solid #d2d6de; + padding: 3px; +} +.img-bordered-sm { + border: 2px solid #d2d6de; + padding: 2px; +} +.attachment-block { + border: 1px solid #f4f4f4; + padding: 5px; + margin-bottom: 10px; + background: #f7f7f7; +} +.attachment-block .attachment-img { + max-width: 100px; + max-height: 100px; + height: auto; + float: left; +} +.attachment-block .attachment-pushed { + margin-left: 110px; +} +.attachment-block .attachment-heading { + margin: 0; +} +.attachment-block .attachment-text { + color: #555; +} +.connectedSortable { + min-height: 100px; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.sort-highlight { + background: #f4f4f4; + border: 1px dashed #ddd; + margin-bottom: 10px; +} +.full-opacity-hover { + opacity: 0.65; + filter: alpha(opacity=65); +} +.full-opacity-hover:hover { + opacity: 1; + filter: alpha(opacity=100); +} +.chart { + position: relative; + overflow: hidden; + width: 100%; +} +.chart svg, +.chart canvas { + width: 100% !important; +} +/* + * Misc: print + * ----------- + */ +@media print { + .no-print, + .main-sidebar, + .left-side, + .main-header, + .content-header { + display: none !important; + } + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0 !important; + min-height: 0 !important; + -webkit-transform: translate(0, 0) !important; + -ms-transform: translate(0, 0) !important; + -o-transform: translate(0, 0) !important; + transform: translate(0, 0) !important; + } + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 0 !important; + } + .invoice { + width: 100%; + border: 0; + margin: 0; + padding: 0; + } + .invoice-col { + float: left; + width: 33.3333333%; + } + .table-responsive { + overflow: auto; + } + .table-responsive > .table tr th, + .table-responsive > .table tr td { + white-space: normal !important; + } +} diff --git a/login/app/sprinkles/core/assets/userfrosting/css/tablesorter-reflow.css b/login/app/sprinkles/core/assets/userfrosting/css/tablesorter-reflow.css new file mode 100755 index 0000000..3a9c14f --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/tablesorter-reflow.css @@ -0,0 +1,61 @@ +/* REQUIRED CSS: change your reflow breakpoint here (35em below) */ +@media ( max-width: 35em ) { + + /* uncomment out the line below if you don't want the sortable headers to show */ + table.ui-table-reflow thead { display: none; } + + .uf-table-search { + display: inherit; + } + + /* css for reflow & reflow2 widgets */ + .ui-table-reflow td, + .ui-table-reflow th { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: right; + /* if not using the stickyHeaders widget (not the css3 version) + * the "!important" flag, and "height: auto" can be removed */ + width: 100% !important; + height: auto !important; + } + + .tablesorter-bootstrap > thead > tr > th, + .tablesorter-bootstrap > thead > tr > td, + .tablesorter-bootstrap > tfoot > tr > th, + .tablesorter-bootstrap > tfoot > tr > td { + padding: 4px; + margin: 0; + } + + /* reflow widget only */ + .ui-table-reflow tbody td[data-title]:not(:first-child):before { + color: #469; + font-size: 1.5em; + content: attr(data-title); + width: 100%; + white-space: pre; + display: block; + } + + /* reflow2 widget only */ + table.ui-table-reflow .ui-table-cell-label { + display: none; + } + + table.ui-table-reflow .ui-table-cell-label.ui-table-cell-label-top { + display: block; + padding: .4em 0; + margin: .4em 0; + text-transform: uppercase; + font-size: 1.5em; + font-weight: 400; + } + +} /* end media query */ + +/* reflow2 widget */ +.ui-table-reflow .ui-table-cell-label { + display: none; +} diff --git a/login/app/sprinkles/core/assets/userfrosting/css/uf-alerts.css b/login/app/sprinkles/core/assets/userfrosting/css/uf-alerts.css new file mode 100755 index 0000000..7ac5a97 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/uf-alerts.css @@ -0,0 +1,23 @@ +.uf-alert +{ + margin: 10px 0px 0px 0px; +} + +/* Invert margin when inside a modal-body */ +.modal-body .uf-alert +{ + margin: 0px 0px 10px 0px; +} + +.uf-alert .icon { + line-height: 20px; +} + +.uf-alert-message-container { + margin-left: 30px; + line-height: 20px; +} + +.uf-alert-message-container > ul { + margin-left: -20px; +} \ No newline at end of file diff --git a/login/app/sprinkles/core/assets/userfrosting/css/uf-collection.css b/login/app/sprinkles/core/assets/userfrosting/css/uf-collection.css new file mode 100755 index 0000000..432e1a4 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/uf-collection.css @@ -0,0 +1,15 @@ +/** + * Custom CSS for the ufCollection widget. + */ + +/** Prevent rows from overflowing container */ +.uf-collection-col-wrap { + overflow-wrap: break-word; + word-wrap: break-word; + word-break: break-all; +} + +.uf-collection span.select2-dropdown.select2-dropdown--below { + position:absolute; + top: -32px; +} diff --git a/login/app/sprinkles/core/assets/userfrosting/css/uf-jqueryvalidation.css b/login/app/sprinkles/core/assets/userfrosting/css/uf-jqueryvalidation.css new file mode 100755 index 0000000..6fd2e47 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/uf-jqueryvalidation.css @@ -0,0 +1,10 @@ +/* ========================================================================== + Custom styles for jQuery Validation elements + ========================================================================== */ + +.error-block { + margin-top: 5px; + margin-bottom: 10px; + + color: #a94442; +} diff --git a/login/app/sprinkles/core/assets/userfrosting/css/userfrosting.css b/login/app/sprinkles/core/assets/userfrosting/css/userfrosting.css new file mode 100755 index 0000000..38a92e2 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/css/userfrosting.css @@ -0,0 +1,204 @@ +/* Use to collapse empty button columns */ + +.hideable { + min-height: 0px; +} + +/* Custom styles for bootstrap-switch labels */ +label.label-switch { + margin-top: 5px; +} + +form textarea { + resize: vertical; /* user can resize vertically, but width is fixed */ +} + +/* Custom styling for table tool menus */ +.dropdown-toggle .caret { + position: relative; + top: -1px; + right: -3px; +} + +.box-tools .dropdown-toggle { + background-color: #ebeef5; + box-shadow: 1px 1px 15px 0px rgba(155, 155, 155, 0.1); +} + +/* Add some extra padding to tool groups in boxes */ +.box-tool-group { + padding: 10px 0 10px; +} + +.box-tool-group .btn-app { + margin: 0 10px 10px 0; +} + +.box-tool-menu { + background-color: #f4f4f4; +} + +.box-tool-menu > li > a { + color: #444; +} + +.box-profile { + padding: 10px 20px; +} + +.box-profile-property { + float: right !important; +} + +/* Styles for table column selectors */ + +.uf-table-cs-title { + padding: 0px 20px; + font-weight: bold; +} + +.uf-table-cs-options { + padding: 3px 20px; +} + +.uf-table-cs-options label { + width: 100%; + font-weight: normal; + word-wrap: break-word; + word-break: break-all; +} + +.uf-table-cs-options label span { + padding-left: 10px; +} + +/* Table column width, fit to content */ +.uf-table-fit-width { + width: 1%; + white-space: nowrap; +} + +/* Hide global search field on larger devices */ +.uf-table-search { + display: none; +} + +/* Special styling for uf-table messages */ +.uf-table-info { + background-color: #fff !important; + color: #cdcdcd; + font-weight: 700; + text-align: center; +} + +.uf-table-error-row td { + background-color: #f39c12 !important; + color: #fff !important; + text-align: center; +} + +/* Cursor styling for ufCopy */ +.uf-copy-trigger { + cursor: pointer; +} + +/* Special wrapper for alerts on public form pages (sign-in, register, etc) */ +.form-alerts { + margin-bottom: 10px !important; +} + +/* Styling for AdminLTE form control icons, that doesn't interfere with validation plugin */ +.form-control-icon { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} + +.input-lg ~ .form-control-icon, +.input-group-lg ~ .form-control-icon, +.form-group-lg .form-control ~ .form-control-icon { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm ~ .form-control-icon, +.input-group-sm ~ .form-control-icon, +.form-group-sm .form-control ~ .form-control-icon { + width: 30px; + height: 30px; + line-height: 30px; +} + +@media (min-width: 768px) { + .form-inline .has-feedback .form-control-icon, + .navbar-form .has-feedback .form-control-icon { + top: 0; + } +} + +.form-horizontal .has-feedback .form-control-icon { + right: 15px; +} + +/* Fix for select2 not resizing properly when the page is resized */ +.select2-container--default { + display: block; + width: 100% !important; +} + +/* Fix for links on info-box */ +a .info-box { + color: black; +} + +/* Custom styling for trash buttons */ +.btn-trash { + padding: 0 10px; + color: #777; +} + +.btn-trash:hover { + color: #d73925; +} + +/* Custom styling for nav logo */ +.main-header .logo { + font-weight: 400; + font-size: 18px; +} + +/* Padding for user menu */ +.user-menu .fa { + padding-left: .5em; + font-size: 11px; +} + +/* Custom classes to add responsiveness to bootstrap's dropdown-menu-right and dropdown-menu-left */ + +.dropdown-menu-right-responsive { + right: auto; + left: 0; +} + +.dropdown-menu-left-responsive { + right: 0; + left: auto; +} + +@media(min-width: 561px) { + .dropdown-menu-right-responsive { + right: 0; + left: auto; + } + .dropdown-menu-left-responsive { + right: auto; + left: 0; + } +} diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/README.md b/login/app/sprinkles/core/assets/userfrosting/favicons/README.md new file mode 100755 index 0000000..c756d36 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/favicons/README.md @@ -0,0 +1,7 @@ +# Default Favicons for UserFrosting + +There are a bewildering number of device- and vendor-specific favicons these days. And, the specifications are changing constantly as new devices with new screen resolutions are released, and old devices and operating systems are retired. + +We recommend the [Favicon Cheat Sheet](https://github.com/audreyr/favicon-cheat-sheet) as a way to stay up-to-date with current specifications and best practices regarding favicons. + +To automatically generate favicons for a wide variety of devices, platforms, and operating systems, we suggest https://realfavicongenerator.net. The default icons you see in this directory were generated using this site. diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png new file mode 100755 index 0000000..d2b133f Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png new file mode 100755 index 0000000..f6877ef Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png new file mode 100755 index 0000000..f0dcd45 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png new file mode 100755 index 0000000..03b3f7d Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png new file mode 100755 index 0000000..cdb7f6d Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png new file mode 100755 index 0000000..dea6333 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png new file mode 100755 index 0000000..292cc0b Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png new file mode 100755 index 0000000..2a12eae Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png new file mode 100755 index 0000000..be2007b Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png new file mode 100755 index 0000000..9cc0516 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png new file mode 100755 index 0000000..ee79201 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png new file mode 100755 index 0000000..c99a379 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png new file mode 100755 index 0000000..097a9af Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png new file mode 100755 index 0000000..1ca7d71 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png new file mode 100755 index 0000000..af016ec Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png new file mode 100755 index 0000000..4ed4ec6 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png new file mode 100755 index 0000000..e08a1c2 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png new file mode 100755 index 0000000..1b1d093 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png new file mode 100755 index 0000000..d2e5117 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png new file mode 100755 index 0000000..b836367 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png new file mode 100755 index 0000000..d1628ca Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png new file mode 100755 index 0000000..7c85a57 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png new file mode 100755 index 0000000..011967e Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png new file mode 100755 index 0000000..dcb3f7c Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png new file mode 100755 index 0000000..bd57115 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png new file mode 100755 index 0000000..8c919b8 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png new file mode 100755 index 0000000..e96533b Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png new file mode 100755 index 0000000..1b1d093 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png new file mode 100755 index 0000000..d2e5117 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png b/login/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png new file mode 100755 index 0000000..a705675 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png b/login/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png new file mode 100755 index 0000000..0d89d12 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico b/login/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico new file mode 100755 index 0000000..a787724 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml b/login/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml new file mode 100755 index 0000000..21fa5ad --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #603cba + + + diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/manifest.json b/login/app/sprinkles/core/assets/userfrosting/favicons/manifest.json new file mode 100755 index 0000000..328cd7a --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/favicons/manifest.json @@ -0,0 +1,51 @@ +{ + "name": "UserFrosting", + "icons": [ + { + "src": "\/android-chrome-36x36.png", + "sizes": "36x36", + "type": "image\/png" + }, + { + "src": "\/android-chrome-48x48.png", + "sizes": "48x48", + "type": "image\/png" + }, + { + "src": "\/android-chrome-72x72.png", + "sizes": "72x72", + "type": "image\/png" + }, + { + "src": "\/android-chrome-96x96.png", + "sizes": "96x96", + "type": "image\/png" + }, + { + "src": "\/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image\/png" + }, + { + "src": "\/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image\/png" + }, + { + "src": "\/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image\/png" + }, + { + "src": "\/android-chrome-384x384.png", + "sizes": "384x384", + "type": "image\/png" + }, + { + "src": "\/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image\/png" + } + ], + "theme_color": "#f3f2e4" +} diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png new file mode 100755 index 0000000..3227cbb Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png new file mode 100755 index 0000000..e8f3a69 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png new file mode 100755 index 0000000..b14af89 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png new file mode 100755 index 0000000..cabb0b9 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png new file mode 100755 index 0000000..7ae9615 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg b/login/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg new file mode 100755 index 0000000..2435014 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg @@ -0,0 +1,246 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + + + + + + + + + diff --git a/login/app/sprinkles/core/assets/userfrosting/images/cupcake.png b/login/app/sprinkles/core/assets/userfrosting/images/cupcake.png new file mode 100755 index 0000000..3e1a704 Binary files /dev/null and b/login/app/sprinkles/core/assets/userfrosting/images/cupcake.png differ diff --git a/login/app/sprinkles/core/assets/userfrosting/images/logo.svg b/login/app/sprinkles/core/assets/userfrosting/images/logo.svg new file mode 100755 index 0000000..b11b0b5 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/images/logo.svg @@ -0,0 +1,514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/login/app/sprinkles/core/assets/userfrosting/js/AdminLTE-custom.js b/login/app/sprinkles/core/assets/userfrosting/js/AdminLTE-custom.js new file mode 100755 index 0000000..177c845 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/AdminLTE-custom.js @@ -0,0 +1,117 @@ +/*! AdminLTE userfrosting.js + * ================ + * Userfrosting JS file for AdminLTE v2. This file + * should be included in all pages. It controls some layout + * options and implements functions related to Userfrosting. + * + * @Author Louis Charette + * @Support + * @license MIT + */ + +//Make sure jQuery has been loaded before app.js +if (typeof jQuery === "undefined") { + throw new Error("AdminLTE requires jQuery"); +} + +/* Tree_UF() +* ====== +* Overwrite the default behavior for UF menu compatibility +* +* @type Function +* @Usage: $.AdminLTE.tree_UF('.sidebar') +*/ +$.AdminLTE.tree_UF = function (menu) { + var _this = this; + var animationSpeed = $.AdminLTE.options.animationSpeed; + $(document).off('click', menu + ' li a').on('click', menu + ' li a', function (e) { + + //Get the clicked link and the next element + var $this = $(this); + var checkElement = $this.next(); + + //Check if the next element is a menu and is visible + if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) { + //Close the menu + checkElement.slideUp(animationSpeed, function () { + checkElement.removeClass('menu-open'); + //Fix the layout in case the sidebar stretches over the height of the window + //_this.layout.fix(); + }); + checkElement.parent("li").removeClass("active"); + } + //If the menu is not visible + else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) { + //Get the parent menu + var parent = $this.parents('ul').first(); + //Close all open menus within the parent + var ul = parent.find('ul:visible').slideUp(animationSpeed); + //Remove the menu-open class from the parent + ul.removeClass('menu-open'); + //Get the parent li + var parent_li = $this.parent("li"); + + //Open the target menu and add the menu-open class + checkElement.slideDown(animationSpeed, function () { + + //Add the class active to the parent li + checkElement.addClass('menu-open'); + parent.find('li.treeview.active').removeClass('active'); //<<-- Overwrite here. Otherwise, the menu href based active will be removed + parent_li.addClass('active'); + + //Fix the layout in case the sidebar stretches over the height of the window + _this.layout.fix(); + }); + } + //if this isn't a link, prevent the page from being redirected + if (checkElement.is('.treeview-menu')) { + e.preventDefault(); + } + }); +}; + +/* initMenu() +* ====== +* Activate the menu based on the url and href attr. +* +* @type Function +* @Usage: $.AdminLTE.initMenu('.sidebar') +*/ +$.AdminLTE.initMenu = function (searchElement) { + var _this = this; + var element = $(searchElement).filter(function() { + // Strip out everything after the hash, if present + var url_head = window.location.href.split('#', 1)[0]; + return this.href == url_head; // || url.href.indexOf(this.href) == 0 // Include this if you want to color all parent URIs as well + }).parent(); + $(element).addClass('active'); + $(element).parents('.treeview').addClass('active'); + $(element).parents('.treeview-menu').addClass('menu-open'); +}; + +$(function() { + //Init menu and trees + $.AdminLTE.initMenu('ul.sidebar-menu a'); + $.AdminLTE.tree_UF('.sidebar'); + + // Apply select2 to all js-select2 elements + $('.js-select2').select2({ minimumResultsForSearch: Infinity }); + + // Apply iCheck to all js-icheck elements + $('.js-icheck').iCheck({ + checkboxClass: 'icheckbox_square-blue', + radioClass: 'iradio_square-blue', + increaseArea: '20%' // optional + }); + + // Remember the sidebar collapse state + // See: https://github.com/almasaeed2010/AdminLTE/issues/896#issuecomment-264723101 + $('.sidebar-toggle').click(function(event) { + event.preventDefault(); + if (Boolean(sessionStorage.getItem('sidebar-toggle-collapsed'))) { + sessionStorage.setItem('sidebar-toggle-collapsed', ''); + } else { + sessionStorage.setItem('sidebar-toggle-collapsed', '1'); + } + }); +}); \ No newline at end of file diff --git a/login/app/sprinkles/core/assets/userfrosting/js/AdminLTE.js b/login/app/sprinkles/core/assets/userfrosting/js/AdminLTE.js new file mode 100755 index 0000000..54b6055 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/AdminLTE.js @@ -0,0 +1,763 @@ +/*! AdminLTE app.js + * ================ + * Main JS application file for AdminLTE v2. This file + * should be included in all pages. It controls some layout + * options and implements exclusive AdminLTE plugins. + * + * @Author Almsaeed Studio + * @Support + * @Email + * @version 2.3.6 + * @license MIT + */ + +//Make sure jQuery has been loaded before app.js +if (typeof jQuery === "undefined") { + throw new Error("AdminLTE requires jQuery"); +} + +/* AdminLTE + * + * @type Object + * @description $.AdminLTE is the main object for the template's app. + * It's used for implementing functions and options related + * to the template. Keeping everything wrapped in an object + * prevents conflict with other plugins and is a better + * way to organize our code. + */ +$.AdminLTE = {}; + +/* -------------------- + * - AdminLTE Options - + * -------------------- + * Modify these options to suit your implementation + */ +$.AdminLTE.options = { + //Add slimscroll to navbar menus + //This requires you to load the slimscroll plugin + //in every page before app.js + navbarMenuSlimscroll: true, + navbarMenuSlimscrollWidth: "3px", //The width of the scroll bar + navbarMenuHeight: "200px", //The height of the inner menu + //General animation speed for JS animated elements such as box collapse/expand and + //sidebar treeview slide up/down. This options accepts an integer as milliseconds, + //'fast', 'normal', or 'slow' + animationSpeed: 500, + //Sidebar push menu toggle button selector + sidebarToggleSelector: "[data-toggle='offcanvas']", + //Activate sidebar push menu + sidebarPushMenu: true, + //Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin) + sidebarSlimScroll: true, + //Enable sidebar expand on hover effect for sidebar mini + //This option is forced to true if both the fixed layout and sidebar mini + //are used together + sidebarExpandOnHover: false, + //BoxRefresh Plugin + enableBoxRefresh: true, + //Bootstrap.js tooltip + enableBSToppltip: true, + BSTooltipSelector: "[data-toggle='tooltip']", + //Enable Fast Click. Fastclick.js creates a more + //native touch experience with touch devices. If you + //choose to enable the plugin, make sure you load the script + //before AdminLTE's app.js + enableFastclick: false, + //Control Sidebar Options + enableControlSidebar: true, + controlSidebarOptions: { + //Which button should trigger the open/close event + toggleBtnSelector: "[data-toggle='control-sidebar']", + //The sidebar selector + selector: ".control-sidebar", + //Enable slide over content + slide: true + }, + //Box Widget Plugin. Enable this plugin + //to allow boxes to be collapsed and/or removed + enableBoxWidget: true, + //Box Widget plugin options + boxWidgetOptions: { + boxWidgetIcons: { + //Collapse icon + collapse: 'fa-minus', + //Open icon + open: 'fa-plus', + //Remove icon + remove: 'fa-times' + }, + boxWidgetSelectors: { + //Remove button selector + remove: '[data-widget="remove"]', + //Collapse button selector + collapse: '[data-widget="collapse"]' + } + }, + //Direct Chat plugin options + directChat: { + //Enable direct chat by default + enable: true, + //The button to open and close the chat contacts pane + contactToggleSelector: '[data-widget="chat-pane-toggle"]' + }, + //Define the set of colors to use globally around the website + colors: { + lightBlue: "#3c8dbc", + red: "#f56954", + green: "#00a65a", + aqua: "#00c0ef", + yellow: "#f39c12", + blue: "#0073b7", + navy: "#001F3F", + teal: "#39CCCC", + olive: "#3D9970", + lime: "#01FF70", + orange: "#FF851B", + fuchsia: "#F012BE", + purple: "#8E24AA", + maroon: "#D81B60", + black: "#222222", + gray: "#d2d6de" + }, + //The standard screen sizes that bootstrap uses. + //If you change these in the variables.less file, change + //them here too. + screenSizes: { + xs: 480, + sm: 768, + md: 992, + lg: 1200 + } +}; + +/* ------------------ + * - Implementation - + * ------------------ + * The next block of code implements AdminLTE's + * functions and plugins as specified by the + * options above. + */ +$(function () { + "use strict"; + + //Fix for IE page transitions + $("body").removeClass("hold-transition"); + + //Extend options if external options exist + if (typeof AdminLTEOptions !== "undefined") { + $.extend(true, + $.AdminLTE.options, + AdminLTEOptions); + } + + //Easy access to options + var o = $.AdminLTE.options; + + //Set up the object + _init(); + + //Activate the layout maker + $.AdminLTE.layout.activate(); + + //Enable sidebar tree view controls + $.AdminLTE.tree('.sidebar'); + + //Enable control sidebar + if (o.enableControlSidebar) { + $.AdminLTE.controlSidebar.activate(); + } + + //Add slimscroll to navbar dropdown + if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') { + $(".navbar .menu").slimscroll({ + height: o.navbarMenuHeight, + alwaysVisible: false, + size: o.navbarMenuSlimscrollWidth + }).css("width", "100%"); + } + + //Activate sidebar push menu + if (o.sidebarPushMenu) { + $.AdminLTE.pushMenu.activate(o.sidebarToggleSelector); + } + + //Activate Bootstrap tooltip + if (o.enableBSToppltip) { + $('body').tooltip({ + selector: o.BSTooltipSelector + }); + } + + //Activate box widget + if (o.enableBoxWidget) { + $.AdminLTE.boxWidget.activate(); + } + + //Activate fast click + if (o.enableFastclick && typeof FastClick != 'undefined') { + FastClick.attach(document.body); + } + + //Activate direct chat widget + if (o.directChat.enable) { + $(document).on('click', o.directChat.contactToggleSelector, function () { + var box = $(this).parents('.direct-chat').first(); + box.toggleClass('direct-chat-contacts-open'); + }); + } + + /* + * INITIALIZE BUTTON TOGGLE + * ------------------------ + */ + $('.btn-group[data-toggle="btn-toggle"]').each(function () { + var group = $(this); + $(this).find(".btn").on('click', function (e) { + group.find(".btn.active").removeClass("active"); + $(this).addClass("active"); + e.preventDefault(); + }); + + }); +}); + +/* ---------------------------------- + * - Initialize the AdminLTE Object - + * ---------------------------------- + * All AdminLTE functions are implemented below. + */ +function _init() { + 'use strict'; + /* Layout + * ====== + * Fixes the layout height in case min-height fails. + * + * @type Object + * @usage $.AdminLTE.layout.activate() + * $.AdminLTE.layout.fix() + * $.AdminLTE.layout.fixSidebar() + */ + $.AdminLTE.layout = { + activate: function () { + var _this = this; + _this.fix(); + _this.fixSidebar(); + $(window, ".wrapper").resize(function () { + _this.fix(); + _this.fixSidebar(); + }); + }, + fix: function () { + //Get window height and the wrapper height + var neg = $('.main-header').outerHeight() + $('.main-footer').outerHeight(); + var window_height = $(window).height(); + var sidebar_height = $(".sidebar").height(); + //Set the min-height of the content and sidebar based on the + //the height of the document. + if ($("body").hasClass("fixed")) { + $(".content-wrapper, .right-side").css('min-height', window_height - $('.main-footer').outerHeight()); + } else { + var postSetWidth; + if (window_height >= sidebar_height) { + $(".content-wrapper, .right-side").css('min-height', window_height - neg); + postSetWidth = window_height - neg; + } else { + $(".content-wrapper, .right-side").css('min-height', sidebar_height); + postSetWidth = sidebar_height; + } + + //Fix for the control sidebar height + var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector); + if (typeof controlSidebar !== "undefined") { + if (controlSidebar.height() > postSetWidth) + $(".content-wrapper, .right-side").css('min-height', controlSidebar.height()); + } + + } + }, + fixSidebar: function () { + //Make sure the body tag has the .fixed class + if (!$("body").hasClass("fixed")) { + if (typeof $.fn.slimScroll != 'undefined') { + $(".sidebar").slimScroll({destroy: true}).height("auto"); + } + return; + } else if (typeof $.fn.slimScroll == 'undefined' && window.console) { + window.console.error("Error: the fixed layout requires the slimscroll plugin!"); + } + //Enable slimscroll for fixed layout + if ($.AdminLTE.options.sidebarSlimScroll) { + if (typeof $.fn.slimScroll != 'undefined') { + //Destroy if it exists + $(".sidebar").slimScroll({destroy: true}).height("auto"); + //Add slimscroll + $(".sidebar").slimscroll({ + height: ($(window).height() - $(".main-header").height()) + "px", + color: "rgba(0,0,0,0.2)", + size: "3px" + }); + } + } + } + }; + + /* PushMenu() + * ========== + * Adds the push menu functionality to the sidebar. + * + * @type Function + * @usage: $.AdminLTE.pushMenu("[data-toggle='offcanvas']") + */ + $.AdminLTE.pushMenu = { + activate: function (toggleBtn) { + //Get the screen sizes + var screenSizes = $.AdminLTE.options.screenSizes; + + //Enable sidebar toggle + $(document).on('click', toggleBtn, function (e) { + e.preventDefault(); + + //Enable sidebar push menu + if ($(window).width() > (screenSizes.sm - 1)) { + if ($("body").hasClass('sidebar-collapse')) { + $("body").removeClass('sidebar-collapse').trigger('expanded.pushMenu'); + } else { + $("body").addClass('sidebar-collapse').trigger('collapsed.pushMenu'); + } + } + //Handle sidebar push menu for small screens + else { + if ($("body").hasClass('sidebar-open')) { + $("body").removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu'); + } else { + $("body").addClass('sidebar-open').trigger('expanded.pushMenu'); + } + } + }); + + $(".content-wrapper").click(function () { + //Enable hide menu when clicking on the content-wrapper on small screens + if ($(window).width() <= (screenSizes.sm - 1) && $("body").hasClass("sidebar-open")) { + $("body").removeClass('sidebar-open'); + } + }); + + //Enable expand on hover for sidebar mini + if ($.AdminLTE.options.sidebarExpandOnHover + || ($('body').hasClass('fixed') + && $('body').hasClass('sidebar-mini'))) { + this.expandOnHover(); + } + }, + expandOnHover: function () { + var _this = this; + var screenWidth = $.AdminLTE.options.screenSizes.sm - 1; + //Expand sidebar on hover + $('.main-sidebar').hover(function () { + if ($('body').hasClass('sidebar-mini') + && $("body").hasClass('sidebar-collapse') + && $(window).width() > screenWidth) { + _this.expand(); + } + }, function () { + if ($('body').hasClass('sidebar-mini') + && $('body').hasClass('sidebar-expanded-on-hover') + && $(window).width() > screenWidth) { + _this.collapse(); + } + }); + }, + expand: function () { + $("body").removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover'); + }, + collapse: function () { + if ($('body').hasClass('sidebar-expanded-on-hover')) { + $('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse'); + } + } + }; + + /* Tree() + * ====== + * Converts the sidebar into a multilevel + * tree view menu. + * + * @type Function + * @Usage: $.AdminLTE.tree('.sidebar') + */ + $.AdminLTE.tree = function (menu) { + var _this = this; + var animationSpeed = $.AdminLTE.options.animationSpeed; + $(document).off('click', menu + ' li a') + .on('click', menu + ' li a', function (e) { + //Get the clicked link and the next element + var $this = $(this); + var checkElement = $this.next(); + + //Check if the next element is a menu and is visible + if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible')) && (!$('body').hasClass('sidebar-collapse'))) { + //Close the menu + checkElement.slideUp(animationSpeed, function () { + checkElement.removeClass('menu-open'); + //Fix the layout in case the sidebar stretches over the height of the window + //_this.layout.fix(); + }); + checkElement.parent("li").removeClass("active"); + } + //If the menu is not visible + else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) { + //Get the parent menu + var parent = $this.parents('ul').first(); + //Close all open menus within the parent + var ul = parent.find('ul:visible').slideUp(animationSpeed); + //Remove the menu-open class from the parent + ul.removeClass('menu-open'); + //Get the parent li + var parent_li = $this.parent("li"); + + //Open the target menu and add the menu-open class + checkElement.slideDown(animationSpeed, function () { + //Add the class active to the parent li + checkElement.addClass('menu-open'); + parent.find('li.active').removeClass('active'); + parent_li.addClass('active'); + //Fix the layout in case the sidebar stretches over the height of the window + _this.layout.fix(); + }); + } + //if this isn't a link, prevent the page from being redirected + if (checkElement.is('.treeview-menu')) { + e.preventDefault(); + } + }); + }; + + /* ControlSidebar + * ============== + * Adds functionality to the right sidebar + * + * @type Object + * @usage $.AdminLTE.controlSidebar.activate(options) + */ + $.AdminLTE.controlSidebar = { + //instantiate the object + activate: function () { + //Get the object + var _this = this; + //Update options + var o = $.AdminLTE.options.controlSidebarOptions; + //Get the sidebar + var sidebar = $(o.selector); + //The toggle button + var btn = $(o.toggleBtnSelector); + + //Listen to the click event + btn.on('click', function (e) { + e.preventDefault(); + //If the sidebar is not open + if (!sidebar.hasClass('control-sidebar-open') + && !$('body').hasClass('control-sidebar-open')) { + //Open the sidebar + _this.open(sidebar, o.slide); + } else { + _this.close(sidebar, o.slide); + } + }); + + //If the body has a boxed layout, fix the sidebar bg position + var bg = $(".control-sidebar-bg"); + _this._fix(bg); + + //If the body has a fixed layout, make the control sidebar fixed + if ($('body').hasClass('fixed')) { + _this._fixForFixed(sidebar); + } else { + //If the content height is less than the sidebar's height, force max height + if ($('.content-wrapper, .right-side').height() < sidebar.height()) { + _this._fixForContent(sidebar); + } + } + }, + //Open the control sidebar + open: function (sidebar, slide) { + //Slide over content + if (slide) { + sidebar.addClass('control-sidebar-open'); + } else { + //Push the content by adding the open class to the body instead + //of the sidebar itself + $('body').addClass('control-sidebar-open'); + } + }, + //Close the control sidebar + close: function (sidebar, slide) { + if (slide) { + sidebar.removeClass('control-sidebar-open'); + } else { + $('body').removeClass('control-sidebar-open'); + } + }, + _fix: function (sidebar) { + var _this = this; + if ($("body").hasClass('layout-boxed')) { + sidebar.css('position', 'absolute'); + sidebar.height($(".wrapper").height()); + if (_this.hasBindedResize) { + return; + } + $(window).resize(function () { + _this._fix(sidebar); + }); + _this.hasBindedResize = true; + } else { + sidebar.css({ + 'position': 'fixed', + 'height': 'auto' + }); + } + }, + _fixForFixed: function (sidebar) { + sidebar.css({ + 'position': 'fixed', + 'max-height': '100%', + 'overflow': 'auto', + 'padding-bottom': '50px' + }); + }, + _fixForContent: function (sidebar) { + $(".content-wrapper, .right-side").css('min-height', sidebar.height()); + } + }; + + /* BoxWidget + * ========= + * BoxWidget is a plugin to handle collapsing and + * removing boxes from the screen. + * + * @type Object + * @usage $.AdminLTE.boxWidget.activate() + * Set all your options in the main $.AdminLTE.options object + */ + $.AdminLTE.boxWidget = { + selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors, + icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons, + animationSpeed: $.AdminLTE.options.animationSpeed, + activate: function (_box) { + var _this = this; + if (!_box) { + _box = document; // activate all boxes per default + } + //Listen for collapse event triggers + $(_box).on('click', _this.selectors.collapse, function (e) { + e.preventDefault(); + _this.collapse($(this)); + }); + + //Listen for remove event triggers + $(_box).on('click', _this.selectors.remove, function (e) { + e.preventDefault(); + _this.remove($(this)); + }); + }, + collapse: function (element) { + var _this = this; + //Find the box parent + var box = element.parents(".box").first(); + //Find the body and the footer + var box_content = box.find("> .box-body, > .box-footer, > form >.box-body, > form > .box-footer"); + if (!box.hasClass("collapsed-box")) { + //Convert minus into plus + element.children(":first") + .removeClass(_this.icons.collapse) + .addClass(_this.icons.open); + //Hide the content + box_content.slideUp(_this.animationSpeed, function () { + box.addClass("collapsed-box"); + }); + } else { + //Convert plus into minus + element.children(":first") + .removeClass(_this.icons.open) + .addClass(_this.icons.collapse); + //Show the content + box_content.slideDown(_this.animationSpeed, function () { + box.removeClass("collapsed-box"); + }); + } + }, + remove: function (element) { + //Find the box parent + var box = element.parents(".box").first(); + box.slideUp(this.animationSpeed); + } + }; +} + +/* ------------------ + * - Custom Plugins - + * ------------------ + * All custom plugins are defined below. + */ + +/* + * BOX REFRESH BUTTON + * ------------------ + * This is a custom plugin to use with the component BOX. It allows you to add + * a refresh button to the box. It converts the box's state to a loading state. + * + * @type plugin + * @usage $("#box-widget").boxRefresh( options ); + */ +(function ($) { + + "use strict"; + + $.fn.boxRefresh = function (options) { + + // Render options + var settings = $.extend({ + //Refresh button selector + trigger: ".refresh-btn", + //File source to be loaded (e.g: ajax/src.php) + source: "", + //Callbacks + onLoadStart: function (box) { + return box; + }, //Right after the button has been clicked + onLoadDone: function (box) { + return box; + } //When the source has been loaded + + }, options); + + //The overlay + var overlay = $('
'); + + return this.each(function () { + //if a source is specified + if (settings.source === "") { + if (window.console) { + window.console.log("Please specify a source first - boxRefresh()"); + } + return; + } + //the box + var box = $(this); + //the button + var rBtn = box.find(settings.trigger).first(); + + //On trigger click + rBtn.on('click', function (e) { + e.preventDefault(); + //Add loading overlay + start(box); + + //Perform ajax call + box.find(".box-body").load(settings.source, function () { + done(box); + }); + }); + }); + + function start(box) { + //Add overlay and loading img + box.append(overlay); + + settings.onLoadStart.call(box); + } + + function done(box) { + //Remove overlay and loading img + box.find(overlay).remove(); + + settings.onLoadDone.call(box); + } + + }; + +})(jQuery); + +/* + * EXPLICIT BOX CONTROLS + * ----------------------- + * This is a custom plugin to use with the component BOX. It allows you to activate + * a box inserted in the DOM after the app.js was loaded, toggle and remove box. + * + * @type plugin + * @usage $("#box-widget").activateBox(); + * @usage $("#box-widget").toggleBox(); + * @usage $("#box-widget").removeBox(); + */ +(function ($) { + + 'use strict'; + + $.fn.activateBox = function () { + $.AdminLTE.boxWidget.activate(this); + }; + + $.fn.toggleBox = function () { + var button = $($.AdminLTE.boxWidget.selectors.collapse, this); + $.AdminLTE.boxWidget.collapse(button); + }; + + $.fn.removeBox = function () { + var button = $($.AdminLTE.boxWidget.selectors.remove, this); + $.AdminLTE.boxWidget.remove(button); + }; + +})(jQuery); + +/* + * TODO LIST CUSTOM PLUGIN + * ----------------------- + * This plugin depends on iCheck plugin for checkbox and radio inputs + * + * @type plugin + * @usage $("#todo-widget").todolist( options ); + */ +(function ($) { + + 'use strict'; + + $.fn.todolist = function (options) { + // Render options + var settings = $.extend({ + //When the user checks the input + onCheck: function (ele) { + return ele; + }, + //When the user unchecks the input + onUncheck: function (ele) { + return ele; + } + }, options); + + return this.each(function () { + + if (typeof $.fn.iCheck != 'undefined') { + $('input', this).on('ifChecked', function () { + var ele = $(this).parents("li").first(); + ele.toggleClass("done"); + settings.onCheck.call(ele); + }); + + $('input', this).on('ifUnchecked', function () { + var ele = $(this).parents("li").first(); + ele.toggleClass("done"); + settings.onUncheck.call(ele); + }); + } else { + $('input', this).on('change', function () { + var ele = $(this).parents("li").first(); + ele.toggleClass("done"); + if ($('input', ele).is(":checked")) { + settings.onCheck.call(ele); + } else { + settings.onUncheck.call(ele); + } + }); + } + }); + }; +}(jQuery)); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/attrchange.js b/login/app/sprinkles/core/assets/userfrosting/js/attrchange.js new file mode 100755 index 0000000..00878d3 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/attrchange.js @@ -0,0 +1,124 @@ +/* +A simple jQuery function that can add listeners on attribute change. +http://meetselva.github.io/attrchange/ + +About License: +Copyright (C) 2013-2014 Selvakumar Arumugam +You may use attrchange plugin under the terms of the MIT Licese. +https://github.com/meetselva/attrchange/blob/master/MIT-License.txt + */ +(function($) { + function isDOMAttrModifiedSupported() { + var p = document.createElement('p'); + var flag = false; + + if (p.addEventListener) { + p.addEventListener('DOMAttrModified', function() { + flag = true + }, false); + } else if (p.attachEvent) { + p.attachEvent('onDOMAttrModified', function() { + flag = true + }); + } else { return false; } + p.setAttribute('id', 'target'); + return flag; + } + + function checkAttributes(chkAttr, e) { + if (chkAttr) { + var attributes = this.data('attr-old-value'); + + if (e.attributeName.indexOf('style') >= 0) { + if (!attributes['style']) + attributes['style'] = {}; //initialize + var keys = e.attributeName.split('.'); + e.attributeName = keys[0]; + e.oldValue = attributes['style'][keys[1]]; //old value + e.newValue = keys[1] + ':' + + this.prop("style")[$.camelCase(keys[1])]; //new value + attributes['style'][keys[1]] = e.newValue; + } else { + e.oldValue = attributes[e.attributeName]; + e.newValue = this.attr(e.attributeName); + attributes[e.attributeName] = e.newValue; + } + + this.data('attr-old-value', attributes); //update the old value object + } + } + + //initialize Mutation Observer + var MutationObserver = window.MutationObserver + || window.WebKitMutationObserver; + + $.fn.attrchange = function(a, b) { + if (typeof a == 'object') {//core + var cfg = { + trackValues : false, + callback : $.noop + }; + //backward compatibility + if (typeof a === "function") { cfg.callback = a; } else { $.extend(cfg, a); } + + if (cfg.trackValues) { //get attributes old value + this.each(function(i, el) { + var attributes = {}; + for ( var attr, i = 0, attrs = el.attributes, l = attrs.length; i < l; i++) { + attr = attrs.item(i); + attributes[attr.nodeName] = attr.value; + } + $(this).data('attr-old-value', attributes); + }); + } + + if (MutationObserver) { //Modern Browsers supporting MutationObserver + var mOptions = { + subtree : false, + attributes : true, + attributeOldValue : cfg.trackValues + }; + var observer = new MutationObserver(function(mutations) { + mutations.forEach(function(e) { + var _this = e.target; + //get new value if trackValues is true + if (cfg.trackValues) { + e.newValue = $(_this).attr(e.attributeName); + } + if ($(_this).data('attrchange-status') === 'connected') { //execute if connected + cfg.callback.call(_this, e); + } + }); + }); + + return this.data('attrchange-method', 'Mutation Observer').data('attrchange-status', 'connected') + .data('attrchange-obs', observer).each(function() { + observer.observe(this, mOptions); + }); + } else if (isDOMAttrModifiedSupported()) { //Opera + //Good old Mutation Events + return this.data('attrchange-method', 'DOMAttrModified').data('attrchange-status', 'connected').on('DOMAttrModified', function(event) { + if (event.originalEvent) { event = event.originalEvent; }//jQuery normalization is not required + event.attributeName = event.attrName; //property names to be consistent with MutationObserver + event.oldValue = event.prevValue; //property names to be consistent with MutationObserver + if ($(this).data('attrchange-status') === 'connected') { //disconnected logically + cfg.callback.call(this, event); + } + }); + } else if ('onpropertychange' in document.body) { //works only in IE + return this.data('attrchange-method', 'propertychange').data('attrchange-status', 'connected').on('propertychange', function(e) { + e.attributeName = window.event.propertyName; + //to set the attr old value + checkAttributes.call($(this), cfg.trackValues, e); + if ($(this).data('attrchange-status') === 'connected') { //disconnected logically + cfg.callback.call(this, e); + } + }); + } + return this; + } else if (typeof a == 'string' && $.fn.attrchange.hasOwnProperty('extensions') && + $.fn.attrchange['extensions'].hasOwnProperty(a)) { //extensions/options + return $.fn.attrchange['extensions'][a].call(this, b); + } + } +})(jQuery); \ No newline at end of file diff --git a/login/app/sprinkles/core/assets/userfrosting/js/fortress-jqueryvalidation-methods.js b/login/app/sprinkles/core/assets/userfrosting/js/fortress-jqueryvalidation-methods.js new file mode 100755 index 0000000..b008cf2 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/fortress-jqueryvalidation-methods.js @@ -0,0 +1,57 @@ +$.validator.addMethod("equals", function(value, element, params) { + params = $.extend( + true, // deep extend + { + value: '', + caseSensitive: false + }, params); + + if (!params.caseSensitive) { + params.value = params.value.toLowerCase(); + value = value.toLowerCase(); + } + return this.optional(element) || value == params.value; +}, "Value is not correct."); + +$.validator.addMethod("notEquals", function(value, element, params) { + params = $.extend( + true, // deep extend + { + value: '', + caseSensitive: false + }, params); + + if (!params.caseSensitive) { + params.value = params.value.toLowerCase(); + value = value.toLowerCase(); + } + return this.optional(element) || value != params.value; +}, "Value is not correct."); + +$.validator.addMethod("noLeadingWhitespace", function(value, element) { + return this.optional(element) || /^\S.*$/i.test(value); +}, "No leading whitespace allowed"); + +$.validator.addMethod("noTrailingWhitespace", function(value, element) { + return this.optional(element) || /^.*\S$/i.test(value); +}, "No trailing whitespace allowed"); + +jQuery.validator.addMethod("memberOf", function(value, element, arr) { + return $.inArray(value, arr) != -1; +}, "Data provided must match one of the provided options."); + +jQuery.validator.addMethod("notMemberOf", function(value, element, arr) { + return $.inArray(value, arr) == -1; +}, "Data provided must NOT match one of the provided options."); + +jQuery.validator.addMethod("matchFormField", function(value, element, field) { + return value === $(element).closest('form').find("input[name=" + field + "]").val(); +}, "The specified fields must match."); + +jQuery.validator.addMethod("notMatchFormField", function(value, element, field) { + return value !== $(element).closest('form').find("input[name=" + field + "]").val(); +}, "The specified fields must NOT match."); + +$.validator.addMethod("username", function(value, element) { + return this.optional(element) || /^([a-z0-9\.\-_])+$/.test(value); +}, "The field may only contain lowercase letters, digits, '.', '-', and '_'."); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/handlebars-helpers.js b/login/app/sprinkles/core/assets/userfrosting/js/handlebars-helpers.js new file mode 100755 index 0000000..96f47bb --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/handlebars-helpers.js @@ -0,0 +1,119 @@ +/** + * This file contains extra helper functions for Handlebars.js. + * + * @see http://handlebarsjs.com/#helpers + */ + + /** + * Improved comparison operator + * See https://stackoverflow.com/a/16315366/2970321 + */ +Handlebars.registerHelper('ifx', function (v1, operator, v2, options) { + switch (operator) { + case '==': + return (v1 == v2) ? options.fn(this) : options.inverse(this); + case '===': + return (v1 === v2) ? options.fn(this) : options.inverse(this); + case '!=': + return (v1 != v2) ? options.fn(this) : options.inverse(this); + case '!==': + return (v1 !== v2) ? options.fn(this) : options.inverse(this); + case '<': + return (v1 < v2) ? options.fn(this) : options.inverse(this); + case '<=': + return (v1 <= v2) ? options.fn(this) : options.inverse(this); + case '>': + return (v1 > v2) ? options.fn(this) : options.inverse(this); + case '>=': + return (v1 >= v2) ? options.fn(this) : options.inverse(this); + case '&&': + return (v1 && v2) ? options.fn(this) : options.inverse(this); + case '||': + return (v1 || v2) ? options.fn(this) : options.inverse(this); + default: + return (v1 == v2) ? options.fn(this) : options.inverse(this); + } +}); + +/** + * Perform simple calculations. + * + * usage: {{calc x '+' 2}} + */ +Handlebars.registerHelper('calc', function (v1, operator, v2, options) { + lvalue = parseFloat(v1); + rvalue = parseFloat(v2); + + return { + "+": lvalue + rvalue, + "-": lvalue - rvalue, + "*": lvalue * rvalue, + "/": lvalue / rvalue, + "%": lvalue % rvalue + }[operator]; +}); + +/** + * format an ISO date using Moment.js + * + * moment syntax example: moment(Date("2011-07-18T15:50:52")).format("MMMM YYYY") + * usage: {{dateFormat creation_date format="MMMM YYYY"}} + * @requires momentjs http://momentjs.com/ + */ +Handlebars.registerHelper('dateFormat', function(context, block) { + if (window.moment) { + var f = block.hash.format || "MMM Do, YYYY"; + return moment(context).format(f); + } else { + // moment plugin not available. return data as is. + console.log("The moment.js plugin is not loaded. Please make sure you have included moment.js on this page."); + return context; + } +}); + +/** + * Format a phone number. + */ +Handlebars.registerHelper("phoneUSFormat", function(phoneNumber) { + if (typeof phoneNumber === 'undefined') { + return ''; + } + + phoneNumber = phoneNumber.toString(); + return "(" + phoneNumber.substr(0,3) + ") " + phoneNumber.substr(3,3) + "-" + phoneNumber.substr(6,4); +}); + +/** + * Format currency (USD). + */ +Handlebars.registerHelper("currencyUsdFormat", function(amount) { + var parsedAmount = parseFloat(amount); + if (parsedAmount < 0) { + return "-$" + Math.abs(parsedAmount).toFixed(2); + } else { + return "$" + parsedAmount.toFixed(2); + } +}); + +/** + * Convert a string to a slug using speakingurl.js. + * + * @requires speakingurl https://pid.github.io/speakingurl/ + */ +Handlebars.registerHelper('slug', function(text) { + return getSlug(text); +}); + +/** + * Equality helper for Handlebars + * http://stackoverflow.com/questions/8853396/logical-operator-in-a-handlebars-js-if-conditional/21915381#21915381 + * @deprecated since 4.1 - use ifx instead + * usage: {{ifCond apple orange}} + */ +Handlebars.registerHelper('ifCond', function(v1, v2, options) { + if(v1 == v2) { + return options.fn(this); + } + + return options.inverse(this); +}); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/query-string.js b/login/app/sprinkles/core/assets/userfrosting/js/query-string.js new file mode 100755 index 0000000..5e0d780 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/query-string.js @@ -0,0 +1,65 @@ +/** + * @add jQuery.String + */ +$.String = $.extend($.String || {}, { + /** + * @function deparam + * + * Takes a string of name value pairs and returns a Object literal that represents those params. + * + * @param {String} params a string like "foo=bar&person[age]=3" + * @return {Object} A JavaScript Object that represents the params: + * + * { + * foo: "bar", + * person: { + * age: "3" + * } + * } + */ + deparam: function(params){ + var digitTest = /^\d+$/, + keyBreaker = /([^\[\]]+)|(\[\])/g, + plus = /\+/g, + paramTest = /([^?#]*)(#.*)?$/; + + if(! params || ! paramTest.test(params) ) { + return {}; + } + + + var data = {}, + pairs = params.split('&'), + current; + + for(var i=0; i < pairs.length; i++){ + current = data; + var pair = pairs[i].split('='); + + // if we find foo=1+1=2 + if(pair.length != 2) { + pair = [pair[0], pair.slice(1).join("=")] + } + + var key = decodeURIComponent(pair[0].replace(plus, " ")), + value = decodeURIComponent(pair[1].replace(plus, " ")), + parts = key.match(keyBreaker); + + for ( var j = 0; j < parts.length - 1; j++ ) { + var part = parts[j]; + if (!current[part] ) { + // if what we are pointing to looks like an array + current[part] = digitTest.test(parts[j+1]) || parts[j+1] == "[]" ? [] : {} + } + current = current[part]; + } + lastPart = parts[parts.length - 1]; + if(lastPart == "[]"){ + current.push(value) + }else{ + current[lastPart] = value; + } + } + return data; + } +}); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/tablesorter/widget-sort2Hash.js b/login/app/sprinkles/core/assets/userfrosting/js/tablesorter/widget-sort2Hash.js new file mode 100755 index 0000000..1be9c85 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/tablesorter/widget-sort2Hash.js @@ -0,0 +1,271 @@ +/*! Widget: sort2Hash (BETA) - updated 8/12/2017 (v2.28.15.uf) */ +/* Requires tablesorter v2.8+ and jQuery 1.7+ + * by Rob Garrison + * + * Temporary patched version of widget to handle browser history issues (#712). + */ +;( function( $ ) { + 'use strict'; + var ts = $.tablesorter || {}, + s2h = ts.sort2Hash = { + init : function( c, wo ) { + var filter, temp, page, size, + table = c.table, + pager = c.pager, + hasSaveSort = ts.hasWidget( table, 'saveSort' ), + sort = s2h.decodeHash( c, wo, 'sort' ); + if ( ( sort && !hasSaveSort ) || ( sort && hasSaveSort && wo.sort2Hash_overrideSaveSort ) ) { + s2h.convertString2Sort( c, wo, sort ); + } + if ( ts.hasWidget( c.table, 'pager' ) ) { + temp = parseInt( s2h.decodeHash( c, wo, 'page' ), 10 ); + page = pager.page = ( temp < 0 ? 0 : ( temp > pager.totalPages ? pager.totalPages - 1 : temp ) ); + size = pager.size = parseInt( s2h.decodeHash( c, wo, 'size' ), 10 ); + } + if ( ts.hasWidget( table, 'filter' ) ) { + filter = s2h.decodeHash( c, wo, 'filter' ); + if ( filter ) { + filter = filter.split( wo.sort2Hash_separator ); + c.$table.one( 'tablesorter-ready', function() { + setTimeout(function(){ + c.$table.one( 'filterEnd', function() { + $(this).triggerHandler( 'pageAndSize', [ page, size ] ); + }); + // use the newest filter comparison code + if ( ts.filter.equalFilters ) { + temp = ts.filter.equalFilters( c, c.lastSearch, filter ); + } else { + // quick n' dirty comparison... it will miss filter changes of + // the same value in a different column, see #1363 + temp = ( c.lastSearch || [] ).join( '' ) !== ( filter || [] ).join( '' ); + } + // don't set filters if they haven't changed + if ( !temp ) { + $.tablesorter.setFilters( table, filter, true ); + } + }, 100 ); + }); + } + } + if ( !filter ) { + c.$table.one( 'tablesorter-ready', function() { + c.$table.triggerHandler( 'pageAndSize', [ page, size ] ); + }); + } + + c.$table.on( 'sortEnd.sort2hash filterEnd.sort2hash pagerComplete.sort2Hash', function() { + if ( this.hasInitialized ) { + s2h.setHash( this.config, this.config.widgetOptions ); + } + }); + }, + + getTableId : function( c, wo ) { + // option > table id > table index on page + return wo.sort2Hash_tableId || + c.table.id || + 'table' + $( 'table' ).index( c.$table ); + }, + regexEscape : function( v ) { + return v.replace( /([\.\^\$\*\+\-\?\(\)\[\]\{\}\\\|])/g, '\\$1'); + }, + // convert 'first%20name,asc,last%20name,desc' into [[0,0], [1,1]] + convertString2Sort : function( c, wo, sortHash ) { + var regex, column, direction, temp, index, $cell, + arry = sortHash.split( wo.sort2Hash_separator ), + indx = 0, + len = arry.length, + sort = []; + while ( indx < len ) { + // column index or text + column = arry[ indx++ ]; + temp = parseInt( column, 10 ); + // ignore wo.sort2Hash_useHeaderText setting & + // just see if column contains a number + if ( isNaN( temp ) || temp > c.columns ) { + regex = new RegExp( '(' + s2h.regexEscape( column ) + ')', 'i' ); + for ( index = 0; index < c.columns; index++ ) { + $cell = c.$headerIndexed[ index ]; + if ( regex.test( $cell.attr( wo.sort2Hash_headerTextAttr ) ) ) { + column = index; + index = c.columns; + } + } + } + direction = arry[ indx++ ]; + // ignore unpaired values + if ( typeof column !== 'undefined' && typeof direction !== 'undefined' ) { + // convert text to 0, 1 + if ( isNaN( direction ) ) { + // default to ascending sort + direction = direction.indexOf( wo.sort2Hash_directionText[ 1 ] ) > -1 ? 1 : 0; + } + sort.push( [ column, direction ] ); + } + } + if ( sort.length ) { + c.sortList = sort; + } + }, + + // convert [[0,0],[1,1]] to 'first%20name,asc,last%20name,desc' + convertSort2String : function( c, wo ) { + var index, txt, column, direction, + sort = [], + arry = c.sortList || [], + len = arry.length; + for ( index = 0; index < len; index++ ) { + column = arry[ index ][ 0 ]; + txt = $.trim( c.$headerIndexed[ column ].attr( wo.sort2Hash_headerTextAttr ) ); + sort.push( txt !== '' ? encodeURIComponent( txt ) : column ); + direction = wo.sort2Hash_directionText[ arry[ index ][ 1 ] ]; + sort.push( direction ); + } + // join with separator + return sort.join( wo.sort2Hash_separator ); + }, + + convertFilter2String : function( c, wo ) { + var index, txt, column, direction, + sort = [], + arry = c.sortList || [], + len = arry.length; + for ( index = 0; index < len; index++ ) { + column = arry[ index ][ 0 ]; + txt = $.trim( c.$headerIndexed[ column ].attr( wo.sort2Hash_headerTextAttr ) ); + column = typeof txt !== 'undefined' ? encodeURIComponent( txt ) : column; + sort.push( column ); + direction = wo.sort2Hash_directionText[ arry[ index ][ 1 ] ]; + sort.push( direction ); + } + // join with separator + return sort.join( wo.sort2Hash_separator ); + }, + + // Get URL Parameters (getParam) + // modified from http://www.netlobo.com/url_query_string_javascript.html + getParam : function ( name, hash, returnRegex ) { + if ( !hash ) { hash = window.location.hash; } + var regex = new RegExp( '[\\?&]' + s2h.regexEscape( name ) + '=([^&#]*)' ), + match = regex.exec( hash ); + if ( returnRegex ) { return regex; } + return match === null ? '' : decodeURIComponent( match[ 1 ] ); + }, + + // remove parameter from hash + removeParam : function( name, hash ) { + if ( !hash ) { hash = window.location.hash; } + var index, + regex = s2h.getParam( name, hash, true ), + result = [], + parts = hash.split( '&' ), + len = parts.length; + for ( index = 0; index < len; index++ ) { + // regex expects a leading '&'... + if ( !regex.test( '&' + parts[ index ] ) ) { + result.push( parts[ index ] ); + } + } + return result.length ? result.join( '&' ) : ''; + }, + + encodeHash : function( c, wo, component, value, rawValue ) { + var result = false, + tableId = s2h.getTableId( c, wo ); + if ( typeof wo.sort2Hash_encodeHash === 'function' ) { + result = wo.sort2Hash_encodeHash( c, tableId, component, value, rawValue || value ); + } + if ( result === false ) { + result = '&' + component + '[' + tableId + ']=' + value; + } + return result; + }, + + decodeHash : function( c, wo, component ) { + var result = false, + tableId = s2h.getTableId( c, wo ); + if ( typeof wo.sort2Hash_decodeHash === 'function' ) { + // return a string + result = wo.sort2Hash_decodeHash( c, tableId, component ); + } + if ( result === false ) { + result = s2h.getParam( component + '[' + tableId + ']' ); + } + return result || ''; + }, + + cleanHash : function( c, wo, component, hash ) { + var result = false, + tableId = s2h.getTableId( c, wo ); + if ( typeof wo.sort2Hash_cleanHash === 'function' ) { + // can return an array or string + result = wo.sort2Hash_cleanHash( c, tableId, component, hash ); + } + if ( result === false ) { + // parameter example: 'sort[table0]=0,0' + result = s2h.removeParam( component + '[' + tableId + ']', hash ); + } + return result || ''; + }, + + setHash : function( c, wo ) { + var str = '', + hash = window.location.hash, + hasPager = ts.hasWidget( c.table, 'pager' ), + hasFilter = ts.hasWidget( c.table, 'filter' ), + sortList = s2h.convertSort2String( c, wo ), + filters = ( hasFilter && c.lastSearch.join('') !== '' ? c.lastSearch : [] ), + filtersStr = encodeURIComponent( filters.join( c.widgetOptions.sort2Hash_separator ) ), + components = { + 'sort' : sortList ? s2h.encodeHash( c, wo, 'sort', sortList, c.sortList ) : '', + 'page' : hasPager ? s2h.encodeHash( c, wo, 'page', c.pager.page + 1 ) : '', + 'size' : hasPager ? s2h.encodeHash( c, wo, 'size', c.pager.size ) : '', + 'filter' : filtersStr ? s2h.encodeHash( c, wo, 'filter', filtersStr, filters ) : '' + }; + // remove old hash + $.each( components, function( component, value ) { + hash = s2h.cleanHash( c, wo, component, hash ); + str += value; + }); + + // Combine new hash with any existing hashes + var hashChar = c.widgetOptions.sort2Hash_hash; + var newHash = ( ( window.location.hash || '' ).replace( hashChar, '' ).length ? hash : wo.sort2Hash_hash ) + str; + var baseUrl = window.location.href.split(hashChar)[0]; + // Ensure that there is a leading hash character + var firstChar = newHash[0]; + if (firstChar != hashChar) { + newHash = hashChar + newHash; + } + + // Update URL in browser + window.location.replace(baseUrl + newHash); + } + }; + + ts.addWidget({ + id: 'sort2Hash', + priority: 60, // after saveSort & pager + options: { + sort2Hash_hash : '#', // hash prefix + sort2Hash_separator : '-', // don't '#' or '=' here + sort2Hash_headerTextAttr : 'data-header', // data attribute containing alternate header text + sort2Hash_directionText : [ 0, 1 ], // [ 'asc', 'desc' ], + sort2Hash_overrideSaveSort : false, // if true, override saveSort widget if saved sort available + + // this option > table ID > table index on page + sort2Hash_tableId : null, + // custom hash processing functions + sort2Hash_encodeHash : null, + sort2Hash_decodeHash : null, + sort2Hash_cleanHash : null + }, + init: function(table, thisWidget, c, wo) { + s2h.init( c, wo ); + }, + remove: function(table, c) { + c.$table.off( '.sort2hash' ); + } + }); + +})(jQuery); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js b/login/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js new file mode 100755 index 0000000..06a889c --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js @@ -0,0 +1,285 @@ +/** + * ufAlerts jQuery plugin. Fetches and renders alerts from the UF alert stream. + * + * Based on template from https://github.com/jquery-boilerplate/jquery-boilerplate + * + * === USAGE === + + * ufAlerts can be initialized on any container element as follows: + * + * $('#myDiv').ufAlerts(options); + * + * `options` is an object containing any of the following parameters: + * @param {string} url The absolute URL from which to fetch flash alerts. + * @param {bool} scrollToTop Whether to automatically scroll back to the top of the page after rendering alerts. + * @param {string} alertMessageClass The CSS class(es) to be applied to each alert message. + * @param {string} alertTemplateId The CSS id(es) for the Handlebar alert template. + * @param {bool} agglomerate Set to true to render all alerts together, applying styling for the highest-priority alert being rendered. + * + * == EVENTS == + * + * uf-form triggers the following events: + * + * `fetch.ufAlerts`: triggered when the alerts have been successfully fetched from the server. + * `render.ufAlerts`: triggered when all alerts have been rendered and the call to render() has completed. + * + * == METHODS == + * + * `fetch()`: Asynchronously gets alerts from the server. + * `push(options)`: Adds a alert of a specified type (danger, warning, info, success) to the internal collection of alerts. + * `clear()`: Removes all messages from the internal collection. + * `render()`: Renders the collection of alerts to the container, awaiting results of `fetch()` if required. + * + * UserFrosting https://www.userfrosting.com + * @author Alexander Weissman + */ +;(function($, window, document, undefined) { + 'use strict'; + + // Define plugin name and defaults. + var pluginName = 'ufAlerts', + defaults = { + url : site.uri.public + '/alerts', + scrollToTop : true, + scrollWhenVisible : false, + agglomerate : false, + alertMessageClass : 'uf-alert-message', + alertTemplateId : 'uf-alert-template', + DEBUG : false + }; + + // Constructor + function Plugin (element, options) { + this.element = element[0]; + this.$element = $(this.element); + this.settings = $.extend(true, {}, defaults, options); + this._defaults = defaults; + this._name = pluginName; + + // Detect changes to element attributes + this.$element.attrchange({ callback: function (event) { this.element = event.target; }.bind(this) }); + + // Plugin variables + this.alerts = []; + this._newAlertsPromise = $.Deferred().resolve(); + this._alertTemplateHtml = $('#' + this.settings.alertTemplateId).html(); + this._alertTypePriorities = { + danger : 3, + warning: 2, + success: 1, + info : 0 + }; + this._alertTypeIcon = { + danger : 'fa-ban', + warning: 'fa-warning', + success: 'fa-check', + info : 'fa-info' + }; + + return this; + } + + // Functions + $.extend(Plugin.prototype, { + /** + * Clear all alerts from the current uf-alerts collection. + */ + clear: function() { + // See http://stackoverflow.com/a/1232046/2970321 + this.alerts.length = 0; + + if (this.settings.agglomerate) { + this.element.toggleClass('alert', false) + .toggleClass('alert-info', false) + .toggleClass('alert-success', false) + .toggleClass('alert-warning', false) + .toggleClass('alert-danger', false); + } + + // Clear any alert HTML + this.$element.empty(); + + return this.$element; + }, + /** + * Fetches alerts from the alert stream + */ + fetch: function() { + // Set a promise, so that any chained calls after fetch can wait until the messages have been retrieved + this._newAlertsPromise = $.ajax({ + url: this.settings.url, + cache: false + }).then( + // Success + this._fetchSuccess.bind(this), + // Failure + this._fetchFailure.bind(this) + ); + + return this.$element; + }, + /** + * Success callback for fetch + */ + _fetchSuccess: function(alerts) { + if (alerts != null) this.alerts = $.merge(this.alerts, alerts); + this.$element.trigger('fetch.' + this._name); + }, + /** + * Failure callback for fetch + */ + _fetchFailure: function(response) { + this.$element.trigger('error.' + this._name); + if ((typeof site !== 'undefined') && site.debug.ajax && response.responseText) { + document.write(response.responseText); + document.close(); + } else { + if (this.settings.DEBUG) { + console.warn('Error (' + response.status + '): ' + response.responseText ); + } + } + }, + /** + * Push a given message to the current uf-alerts collection. + */ + push: function(options) { + this.alerts.push({ + type : options[0], + message: options[1] + }); + + return this.$element; + }, + /** + * Renders the alerts. + */ + render: function() { + // Wait for promise completion, only if promise is unresolved. + if (this._newAlertsPromise.state() == 'resolved' || this._newAlertsPromise.state() == 'rejected') { + this._render(); + } + else { + $.when(this._newAlertsPromise).then(this._render.bind(this)); + } + + return this.$element; + }, + /* + * Internal private method that physically handles rendering operation. + */ + _render: function() { + // Holds generated HTML + var alertHtml = ''; + // Only compile alerts if there are alerts to display + if (this.alerts.length > 0) { + // Prepare template + var alertTemplate = Handlebars.compile(this._alertTemplateHtml, {noEscape: true}); + var i; + // If agglomeration is enabled, set the container to the highest priority alert type + if (this.settings.agglomerate) { + // Holds generated agglomerated alerts + var alertMessage = '
    '; + + // Determine overall alert priority + var alertContainerType = 'info'; + for (i = 0; i < this.alerts.length; i++) { + if (this._alertTypePriorities[this.alerts[i].type] > this._alertTypePriorities[alertContainerType]) { + alertContainerType = this.alerts[i].type; + } + } + + // Compile each alert + var aggTemplate = Handlebars.compile('
  • {{ message }}
  • '); + for (i = 0; i < this.alerts.length; i++) { + alertMessage += aggTemplate(this.alerts[i]); + } + + alertMessage += '
'; + + // Generate complete alert HTML + alertHtml = alertTemplate({ + type : alertContainerType, + message: alertMessage, + icon : this._alertTypeIcon[alertContainerType] + }); + } + else { + // Compile each alert. + for (i = 0; i < this.alerts.length; i++) { + var alert = this.alerts[i]; + + // Inject icon + alert.icon = this._alertTypeIcon[alert.type]; + + // Compile alert + alertHtml += alertTemplate(alert); + } + } + } + // Show alerts + this.$element.html(alertHtml); + + // Scroll to top of alert location is new alerts output, and auto scrolling is enabled + if (this.settings.scrollToTop && alertHtml !== '') { + // Don't scroll if already visible, unless scrollWhenVisible is true + if (!this._alertsVisible() || this.settings.scrollWhenVisible) { + $('html, body').animate({ scrollTop: this.$element.offset().top }, 'fast'); + } + } + + // Trigger render events + this.$element.trigger('render.' + this._name); + }, + /** + * Returns true if alerts container is completely within the viewport. + */ + _alertsVisible: function() { + var rect = this.element.getBoundingClientRect(); + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && + rect.right <= (window.innerWidth || document.documentElement.clientWidth) + ); + }, + /** + * Completely destroy the ufAlerts plugin on the element. + */ + destroy: function() { + // Unbind any bound events + this.$element.off('.' + this._name); + + // Remove plugin from element + this.$element.removeData(this._name); + + return this.$element; + } + }); + + // Handles instantiation and access to non-private methods. + $.fn[pluginName] = function(methodOrOptions) { + // Grab plugin instance + var instance = $(this).data(pluginName); + // If undefined or object, initalise plugin. + if (methodOrOptions === undefined || typeof methodOrOptions === 'object') { + // Only initalise if not previously done. + if (!instance) { + $(this).data(pluginName, new Plugin(this, methodOrOptions)); + } + return this; + } + // Otherwise ensure first parameter is a valid string, and is the name of an actual function. + else if (typeof methodOrOptions === 'string' && typeof instance[methodOrOptions] === 'function') { + // Ensure not a private function + if (methodOrOptions.indexOf('_') !== 0) { + return instance[methodOrOptions]( Array.prototype.slice.call(arguments, 1)); + } + else { + console.warn('Method ' + methodOrOptions + ' is private!'); + } + } + else { + console.warn('Method ' + methodOrOptions + ' does not exist.'); + } + }; +})(jQuery, window, document); \ No newline at end of file diff --git a/login/app/sprinkles/core/assets/userfrosting/js/uf-captcha.js b/login/app/sprinkles/core/assets/userfrosting/js/uf-captcha.js new file mode 100755 index 0000000..ed3ecea --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/uf-captcha.js @@ -0,0 +1,13 @@ +/** + * This plugin reloads the captcha in the specified element. + */ +(function( $ ) { + $.fn.captcha = function() { + // Set the new captcha image + $(this).attr('src', site.uri.public + "/account/captcha?" + new Date().getTime()); + + // Clear whatever the user entered for the captcha value last time + var target = $(this).data('target'); + $(target).val(""); + }; +}( jQuery )); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/uf-collection.js b/login/app/sprinkles/core/assets/userfrosting/js/uf-collection.js new file mode 100755 index 0000000..a2afc6e --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/uf-collection.js @@ -0,0 +1,345 @@ +/** + * uf-collection plugin. Widget for attaching/detaching related items to a single parent item (e.g. roles for a user, etc). + * + * === USAGE === + * + * uf-collection can be initialized on a div element as follows: + * + * $("#myCollection").ufCollection(options); + * + * `options` is an object containing any of the following parameters: + * @param {bool} useDropdown Set to true if rows should be added using a select2 dropdown, false for free text inputs (see https://ux.stackexchange.com/a/15637/53990). + * @param {Object} dropdown The options to pass to the select2 plugin for the add item dropdown. + * @param {string} dropdown.ajax.url The url from which to fetch options (as JSON data) in the dropdown selector menu. + * @param {bool} selectOnClose Set to true if you want the currently highlighted dropdown item to be automatically added when the dropdown is closed for any reason. + * @param {string} dropdown.theme The select2 theme to use for the dropdown menu. Defaults to "default". + * @param {string} dropdown.placeholder Placeholder text to use in the dropdown menu before a selection is made. Defaults to "Item". + * @param {string} dropdown.width Width of the dropdown selector, when used. Defaults to "100%". + * @param {callback} transformDropdownSelection Custom transformation on objects from the dropdown before passing them to render in the collection table. + * @param {Object} dropdownControl a jQuery selector specifying the dropdown select2 control. Defaults to looking for a .js-select-new element inside the parent object. + * @param {string} dropdownTemplate A Handlebars template to use for rendering the dropdown items. + * @param {Object} rowContainer a jQuery selector specifying the place where rows should be added. Defaults to looking for the first tbody element inside the parent object. + * @param {string} rowTemplate A Handlebars template to use for rendering each row in the table. + * + * == EVENTS == + * + * ufCollection triggers the following events: + * + * `rowAdd.ufCollection`: triggered when a new row is added to the collection. + * `rowDelete.ufCollection`: triggered when a row is removed from the collection. + * `rowTouch.ufCollection`: triggered when any inputs in a row are brought into focus. + * + * UserFrosting https://www.userfrosting.com + * @author Alexander Weissman + */ +;(function($, window, document, undefined) { + "use strict"; + + // Define plugin name and defaults. + var pluginName = "ufCollection", + defaults = { + useDropdown: true, + dropdown: { + ajax : { + url : "", + dataType : "json", + delay : 250, + data : function (params) { + return { + filters: { + info : params.term + } + }; + }, + processResults : function (data, params) { + // Process the data into dropdown options + var suggestions = []; + if (data && data.rows) { + suggestions = data.rows; + } + return { + results: suggestions + }; + }, + cache : true + }, + placeholder : "Item", + selectOnClose : false, // Make a selection when they click out of the box/press the next button + theme : "default", + width : "100%", + }, + transformDropdownSelection: function (item) { + return item; + }, + dropdownControl : null, + dropdownTemplate: "", + rowContainer : null, + rowTemplate : "", + DEBUG : false + }; + + // Constructor + function Plugin (element, options) { + this.element = element[0]; + this.$element = $(this.element); + var lateDefaults = { + dropdownControl: this.$element.find('.js-select-new'), + rowContainer: this.$element.find('tbody').first() + }; + this.settings = $.extend(true, {}, defaults, lateDefaults, options); + this._defaults = defaults; + this._name = pluginName; + + // Detect changes to element attributes + this.$element.attrchange({ callback: function (event) { this.element = event.target; }.bind(this) }); + + // Internal counter for adding rows to the collection. Gets updated every time `_createRow` is called. + this._rownum = 0; + + // Keep track of last added row + this._lastRow = null; + + // Handlebars template method + this._dropdownTemplateCompiled = Handlebars.compile(this.settings.dropdownTemplate); + + this._rowTemplateCompiled = Handlebars.compile(this.settings.rowTemplate); + + // Add container class + this.$element.toggleClass("uf-collection", true); + + // Add bindings for any rows already present in the DOM + $.each(this.settings.rowContainer.find('.uf-collection-row'), $.proxy(function(idx, row) { + this._onNewRow($(row)); + this._lastRow = row; + }, this)); + + // If we're using dropdown options, create the select2 and add bindings to add a new row when an option is selected + if (this.settings.useDropdown) { + this._initDropdownField(this.settings.dropdownControl); + + this.settings.dropdownControl.on("select2:select", $.proxy(function(e) { + var item = $(e.target).select2("data")[0]; + // Apply any transformations before rendering as a row + var transformed = this.settings.transformDropdownSelection(item); + this._createRow(transformed); + }, this)); + } + else { + // Otherwise, add a new virgin row + this._createVirginRow(); + } + + return this; + } + + // Functions + $.extend(Plugin.prototype, { + /** + * Add a new row to the collection, optionally passing in prepopulated template data. + */ + addRow: function(options) { + // Grab params, if any + var params = {}; + if (typeof options !== 'undefined') { + params = options[0]; + } + + this._createRow(params); + + return this.$element; + }, + /** + * Add a new 'virgin' row to the collection, optionally passing in prepopulated template data. + * Virgin rows are rows that have not yet been brought into focus by the user. + * When a virgin row is brought into focus, it loses its virgin status and a new virgin row is created. + */ + addVirginRow: function(options) { + // Grab params, if any + var params = {}; + if (typeof options !== 'undefined') { + params = options[0]; + } + + this._createVirginRow(params); + + return this.$element; + }, + /** + * Delete a target row. + */ + deleteRow: function(row) { + this._deleteRow(row); + + return this.$element; + }, + /** + * Get the dropdown control for the collection, if one exists. + */ + getDropdown: function() { + return this.settings.dropdownControl; + }, + /** + * Get the last row added in the collection. + */ + getLastRow: function () { + return this._lastRow; + }, + /** + * Touch a target row. + */ + touchRow: function(row) { + this._touchRow(row); + + return this.$element; + }, + /** + * Create a new row and attach the handler for deletion to the js-delete-row button + */ + _createRow: function(params) { + params = $.extend(true, + { + id: "", + rownum: this._rownum + }, params); + + // Generate the row and append to table + var newRowTemplate = this._rowTemplateCompiled(params), + newRow; + + // Add the new row before any virgin rows in the table. + var virginRows = this.settings.rowContainer.find('.uf-collection-row-virgin').length; + if (virginRows) { + newRow = $(newRowTemplate).insertBefore(this.settings.rowContainer.find('.uf-collection-row-virgin:first')); + } else { + newRow = $(newRowTemplate).appendTo(this.settings.rowContainer); + } + + this._lastRow = newRow; + + // Add bindings and fire event + this._onNewRow(newRow); + + return newRow; + }, + /** + * Create a new, blank row with the 'virgin' status. + */ + _createVirginRow: function(params) { + // Generate the row and append to table + var newRow = this._createRow(params); + + // Set the row's 'virgin' status + newRow.addClass('uf-collection-row-virgin'); + newRow.find('.js-delete-row').hide(); + + return newRow; + }, + /** + * Delete a row from the collection. + */ + _deleteRow: function(row) { + row.remove(); + this.$element.trigger('rowDelete.ufCollection'); + }, + /** + * Add delete and touch bindings for a row, increment the internal row counter, and fire the rowAdd event + */ + _onNewRow: function(row) { + // Trigger to delete row + row.find('.js-delete-row').on('click', $.proxy(function(e) { + this._deleteRow($(e.target).closest('.uf-collection-row')); + }, this)); + + // Once the new row comes into focus for the first time, it has been "touched" + row.find(':input').on('focus', $.proxy(function() { + this._touchRow(row); + }, this)); + + this._rownum += 1; + + // Fire event when row has been constructed + this.$element.trigger('rowAdd.ufCollection', row); + }, + /** + * Remove a row's virgin status, show the delete button, and add a new virgin row if needed + */ + _touchRow: function(row) { + row.removeClass('uf-collection-row-virgin'); + row.find('.js-delete-row').show(); + + this.$element.trigger('rowTouch.ufCollection', row); + + // If we're not using dropdowns, assert that the table doesn't already have a virgin row. If not, create a new virgin row. + if (!this.settings.useDropdown) { + var virginRows = this.settings.rowContainer.find('.uf-collection-row-virgin').length; + if (!virginRows) { + this._createVirginRow(); + } + } + }, + /** + * Initialize the select2 dropdown for this collection on a specified control element. + */ + _initDropdownField: function(field) { + var options = this.settings.dropdown; + + if (!("templateResult" in options)) { + options.templateResult = $.proxy(function(item) { + // Display loading text if the item is marked as "loading" + if (item.loading) return item.text; + + // Must wrap this in a jQuery selector to render as HTML + return $(this._dropdownTemplateCompiled(item)); + }, this); + } + // Legacy options (<= v4.0.9) + if ("dataUrl" in this.settings) { + options.ajax.url = this.settings.dataUrl; + } + if ("ajaxDelay" in this.settings) { + options.ajax.delay = this.settings.ajaxDelay; + } + if ("dropdownTheme" in this.settings) { + options.theme = this.settings.dropdownTheme; + } + if ("placeholder" in this.settings) { + options.placeholder = this.settings.placeholder; + } + if ("selectOnClose" in this.settings) { + options.selectOnClose = this.settings.selectOnClose; + } + if ("width" in this.settings) { + options.width = this.settings.width; + } + + return field.select2(options); + } + }); + + // Handles instantiation and access to non-private methods. + $.fn[pluginName] = function(methodOrOptions) { + // Grab plugin instance + var instance = $(this).data(pluginName); + // If undefined or object, initalise plugin. + if (methodOrOptions === undefined || typeof methodOrOptions === 'object') { + // Only initalise if not previously done. + if (!instance) { + $(this).data(pluginName, new Plugin(this, methodOrOptions)); + } + return this; + } + // Otherwise ensure first parameter is a valid string, and is the name of an actual function. + else if (typeof methodOrOptions === 'string' && typeof instance[methodOrOptions] === 'function') { + // Ensure not a private function + if (methodOrOptions.indexOf('_') !== 0) { + return instance[methodOrOptions]( Array.prototype.slice.call(arguments, 1)); + } + else { + console.warn( 'Method ' + methodOrOptions + ' is private!' ); + } + } + else { + console.warn( 'Method ' + methodOrOptions + ' does not exist.' ); + } + }; +})(jQuery, window, document); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/uf-copy.js b/login/app/sprinkles/core/assets/userfrosting/js/uf-copy.js new file mode 100755 index 0000000..a47f6b8 --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/uf-copy.js @@ -0,0 +1,50 @@ +/** + * Copies text or control fields to clipboard. Wrap a .js-copy-target and .js-copy-trigger inside a common .js-copy-container. + */ + +if (typeof $.uf === 'undefined') { + $.uf = {}; +} + +$.uf.copy = function (button) { + var _this = this; + + var clipboard = new Clipboard(button, { + text: function(trigger) { + var el = $(trigger).closest('.js-copy-container').find('.js-copy-target'); + if (el.is(':input')) { + return el.val(); + } else { + return el.html(); + } + } + }); + + clipboard.on('success', function(e) { + setTooltip(e.trigger, 'Copied!'); + hideTooltip(e.trigger); + }); + + clipboard.on('error', function(e) { + setTooltip(e.trigger, 'Failed!'); + hideTooltip(e.trigger); + }); + + function setTooltip(btn, message) { + $(btn) + .attr('data-original-title', message) + .tooltip('show'); + } + + function hideTooltip(btn) { + setTimeout(function() { + $(btn).tooltip('hide') + .attr('data-original-title', ""); + }, 1000); + } + + // Tooltip + $(button).tooltip({ + trigger: 'click' + }); +}; diff --git a/login/app/sprinkles/core/assets/userfrosting/js/uf-form.js b/login/app/sprinkles/core/assets/userfrosting/js/uf-form.js new file mode 100755 index 0000000..15952ab --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/uf-form.js @@ -0,0 +1,297 @@ +/** + * uf-form plugin. Handles validation and submission for basic UserFrosting forms. + * + * This plugin uses the jQueryvalidation plugin (https://jqueryvalidation.org/) to perform instant, client-side form validation. + * UserFrosting forms must be wrapped in a
element, and contain a + + * + * Initialize ufTable on your container object: + * + * $("#widget-users").ufTable(options); + * + * `options` is an object containing any of the following parameters: + * @param {string} dataUrl The absolute URL from which to fetch table data. + * @param {mixed} addParams An object containing any additional key-value pairs that you want appended to the AJAX requests. + * @param {mixed} tablesorter An object containing tablesorter's configuration options (https://mottie.github.io/tablesorter/docs/#Configuration) + * @param {mixed} pager An object containing tablesorter's paging options (https://mottie.github.io/tablesorter/docs/#pager) + * + * == EVENTS == + * + * ufTable triggers the following events: + * + * `pagerComplete.ufTable`: triggered when the tablesorter pager plugin has completed rendering of the table. + * + * == METHODS == + * + * `getTableStateVars( table )`: fetches the current page size, page number, sort order, sort field, and column filters. + * + * UserFrosting https://www.userfrosting.com + * @author Alexander Weissman + */ +;(function($, window, document, undefined) { + 'use strict'; + + // Define plugin name and defaults. + var pluginName = 'ufTable', + defaults = { + DEBUG : false, + site : site, // global site variables + dataUrl : '', + msgTarget : $('#alerts-page'), + addParams : {}, + filterAllField : '_all', + useLoadingTransition : true, + rowTemplate : null, + columnTemplates : {}, + tablesorter : { + debug: false, + theme : 'bootstrap', + widthFixed: true, + // Set up pagination of data via an AJAX source + // See http://jsfiddle.net/Mottie/uwZc2/ + // Also see https://mottie.github.io/tablesorter/docs/example-pager-ajax.html + widgets: ['saveSort', 'sort2Hash', 'filter', 'pager', 'columnSelector', 'reflow2'], + widgetOptions : { + columnSelector_layout : '', + filter_cssFilter: 'form-control', + filter_saveFilters : true, + filter_serversideFiltering : true, + filter_selectSource : { + '.filter-select' : function() { return null; } + }, + + // apply disabled classname to the pager arrows when the rows at either extreme is visible + pager_updateArrows: true, + + // starting page of the pager (zero based index) + pager_startPage: 0, + + // Number of visible rows + pager_size: 10, + + // Save pager page & size if the storage script is loaded (requires $.tablesorter.storage in jquery.tablesorter.widgets.js) + pager_savePages: true, + + // if true, the table will remain the same height no matter how many records are displayed. The space is made up by an empty + // table row set to a height to compensate; default is false + pager_fixedHeight: false, + + // remove rows from the table to speed up the sort of large tables. + // setting this to false, only hides the non-visible rows; needed if you plan to add/remove rows with the pager enabled. + pager_removeRows: false, // removing rows in larger tables speeds up the sort + + // target the pager markup - see the HTML block below + pager_css: { + errorRow : 'uf-table-error-row', // error information row + disabled : 'disabled' // Note there is no period "." in front of this class name + }, + + // Must be initialized with a 'data' key + pager_ajaxObject: { + data: {}, + dataType: 'json' + }, + + // hash prefix + sort2Hash_hash : '#', + // don't '#' or '=' here + sort2Hash_separator : '|', + // this option > table ID > table index on page + sort2Hash_tableId : null, + // if true, show header cell text instead of a zero-based column index + sort2Hash_headerTextAttr : 'data-column-name', + // direction text shown in the URL e.g. [ 'asc', 'desc' ] + sort2Hash_directionText : [ 'asc', 'desc' ], // default values + // if true, override saveSort widget sort, if used & stored sort is available + sort2Hash_overrideSaveSort : true, // default = false + } + } + }; + + // Constructor + function Plugin (element, options) { + this.element = element[0]; + this.$element = $(this.element); + + var lateDefaults = { + download: { + button: this.$element.find('.js-uf-table-download'), + callback: $.proxy(this._onDownload, this) + }, + info: { + container: this.$element.find('.js-uf-table-info'), + callback: $.proxy(this._renderInfoMessages, this) + }, + overlay: { + container: this.$element.find('.js-uf-table-overlay') + }, + tableElement: this.$element.find('.tablesorter'), + tablesorter: { + widgetOptions: { + columnSelector_container : this.$element.find('.js-uf-table-cs-options'), + filter_external : this.$element.find('.js-uf-table-search input'), + + // Pager selectors + pager_selectors: { + container : this.$element.find('.js-uf-table-pager'), + first : '.first', // go to first page arrow + prev : '.prev', // previous page arrow + next : '.next', // next page arrow + last : '.last', // go to last page arrow + gotoPage : '.gotoPage', // go to page selector - select dropdown that sets the current page + pageDisplay : '.pagedisplay', // location of where the "output" is displayed + pageSize : '.pagesize' // page size selector - select dropdown that sets the "size" option + }, + // We need to use $.proxy to properly bind the context for callbacks that will be called by Tablesorter + + // Generate the URL for the AJAX request, with the relevant parameters + pager_customAjaxUrl: $.proxy(this._generateUrl, this), + + // Callback to process the response from the AJAX request + pager_ajaxProcessing: $.proxy(this._processAjax, this), + + // Callback to display errors + pager_ajaxError: $.proxy(this._pagerAjaxError, this), + + sort2Hash_encodeHash: $.proxy(this._encodeHash, this), + + sort2Hash_decodeHash: $.proxy(this._decodeHash, this), + + sort2Hash_cleanHash: $.proxy(this._cleanHash, this) + } + } + }; + this.settings = $.extend(true, {}, defaults, lateDefaults, options); + this._defaults = defaults; + this._name = pluginName; + this._debugAjax = (typeof this.settings.site !== 'undefined') && this.settings.site.debug.ajax; + + // Fall back to attributes from data-*, default values if not specified in options + var pagerContainer = this.settings.tablesorter.widgetOptions.pager_selectors.container; + var infoContainer = this.settings.info.container; + var dataAttributeDefaults = { + info: { + messageEmptyRows: infoContainer.data('message-empty-rows') ? + infoContainer.data('message-empty-rows') : + "Sorry, we've got nothing here." + }, + tablesorter: { + widgetOptions: { + // possible variables: {size}, {page}, {totalPages}, {filteredPages}, {startRow}, {endRow}, {filteredRows} and {totalRows} + // also {page:input} & {startRow:input} will add a modifiable input in place of the value + pager_output: pagerContainer.data('output-template') ? + pagerContainer.data('output-template') : + '{startRow} to {endRow} of {filteredRows} ({totalRows})' // default if not set on data-* attribute + } + } + }; + + this.settings = $.extend(true, {}, dataAttributeDefaults, this.settings); + + // Check that tableElement exists + var tableElement = this.settings.tableElement; + if (!tableElement.length) { + if (window.console && console.error) { + console.error('ufTable could not be initialized: wrapper element does not exist, or does not contain a matched tableElement (see https://learn.userfrosting.com/client-side-code/components/tables )'); + } + return; + } + + // Copy over dataUrl to pager_ajaxUrl + this.settings.tablesorter.widgetOptions.pager_ajaxUrl = this.settings.dataUrl; + + // Set up 'loading' overlays + if (this.settings.useLoadingTransition) { + var overlay = this.settings.overlay.container; + tableElement.bind('sortStart filterStart pageMoved', function() { + overlay.removeClass('hidden'); + }).bind('pagerComplete updateComplete', function() { + overlay.addClass('hidden'); + }); + } + + // Set up tablesorter and pager + this.ts = tableElement.tablesorter(this.settings.tablesorter); + + // Map default column template selectors based on data-column-template attribute in each column header + var columns = this.ts[0].config.$headerIndexed; + var columnTemplates = {}; + for (var col = 0; col < columns.length; col++) { + var columnName = columns[col].data('column-name'); + if (!columnName && this.settings.DEBUG) { + console.error('Column number ' + col + ' is missing a data-column-name attribute.'); + } + columnTemplates[columnName] = columns[col].data('column-template'); + } + + // Merge in any column template selectors that were set in the ctor options + columnTemplates = $.extend(true, columnTemplates, this.settings.columnTemplates); + + // Locate and compile templates for any string-identified column renderers + // At the same time, build out a numerically indexed array of templates + this.columnTemplatesIndexed = []; + for (var col = 0; col < columns.length; col++) { + var columnName = columns[col].data('column-name'); + if (!columnTemplates[columnName] && this.settings.DEBUG) { + console.error("No template found for column '" + columnName + "'."); + } + var columnTemplate = columnTemplates[columnName]; + if (typeof columnTemplate === 'string') { + this.columnTemplatesIndexed.push(Handlebars.compile($(columnTemplate).html())); + } else { + this.columnTemplatesIndexed.push(columnTemplate); + } + } + + // Locate and compile row template + this.rowTemplate = Handlebars.compile(''); + // If rowTemplateSelector is set, then find the DOM element that it references, which contains the template + if (this.settings.rowTemplate) { + var rowTemplate = this.settings.rowTemplate; + if (typeof rowTemplate === 'string') { + this.rowTemplate = Handlebars.compile($(this.settings.rowTemplate).html()); + } else { + this.rowTemplate = rowTemplate; + } + } + + // Link CSV download button + this.settings.download.button.on('click', this.settings.download.callback); + + // Allow clicking on the labels in the table menu without closing the menu + $(this.settings.tablesorter.widgetOptions.columnSelector_container).find('label').on('click', function(e) { + e.stopPropagation(); + }); + + // Propagate our own pagerComplete event + this.ts.on('pagerComplete', $.proxy(function () { + this.$element.trigger('pagerComplete.ufTable'); + }, this)); + + // Show info messages when there are no rows/no results + this.ts.on('filterEnd filterReset pagerComplete', this.settings.info.callback); + + // Detect changes to element attributes + this.$element.attrchange({ + callback: function (event) { + this.element = event.target; + }.bind(this) + }); + + return this; + } + + /** + * Get state variables for this table, as required by the AJAX data source: sorts, filters, size, page + */ + Plugin.prototype.getTableStateVars = function(table) { + var base = this; + + // Get sort column and order + var sortOrders = { + '0': 'asc', + '1': 'desc' + }; + + // Set sorts in URL. Assumes each th has a data-column-name attribute that corresponds to the name in the API + var sortList = table.config.sortList; + var sorts = {}; + for (var i = 0; i < sortList.length; i++) { + var columnIndex = sortList[i][0]; + var columnDirection = sortOrders[sortList[i][1]]; // Converts to 'asc' or 'desc' + if (sortList[i]) { + var columnName = table.config.$headerIndexed[columnIndex].data('column-name'); + sorts[columnName] = columnDirection; + } + } + + // Set filters in URL. Assumes each th has a data-column-name attribute that corresponds to the name in the API + var filterList = base.getSavedFilters(table); + var filters = {}; + for (i = 0; i < filterList.length; i++) { + if (filterList[i]) { + var columnName = base.settings.filterAllField; + + if (table.config.$headerIndexed[i]) { + columnName = table.config.$headerIndexed[i].data('column-name'); + } + + filters[columnName] = filterList[i]; + } + } + + var state = { + size: table.config.pager.size, + page: table.config.pager.page, + sorts: sorts, + filters: filters + }; + + return state; + }; + + /** + * Get saved filters from the browser local storage. Those should always be up to date + */ + Plugin.prototype.getSavedFilters = function(table) { + + // Fallback to `getFilters` or empty in case of failure + var filterList = $.tablesorter.getFilters(table) || []; + + // Overwrite list with saved filter for filter-select not setup by ts + var isArray, saved, + wo = table.config.widgetOptions; + if ( wo.filter_saveFilters && $.tablesorter.storage ) { + saved = $.tablesorter.storage( table, 'tablesorter-filters' ) || []; + isArray = $.isArray( saved ); + // make sure we're not just getting an empty array + if ( !( isArray && saved.join( '' ) === '' || !isArray ) ) { + filterList = $.tablesorter.filter.processFilters( saved ); + } + } + + return filterList; + }; + + /** + * Generate the AJAX url. + * Used as the default callback for pager_customAjaxUrl + * @private + */ + Plugin.prototype._generateUrl = function(table, url) { + var tableState = this.getTableStateVars(table); + + if (this.settings.DEBUG) { + console.log(tableState); + } + + $.extend(table.config.pager.ajaxObject.data, tableState); + + // Merge in any additional parameters + $.extend(table.config.pager.ajaxObject.data, this.settings.addParams); + + return url; + }; + /** + * Process data returned from the AJAX request and rendering the table cells. + * Used as the default callback for pager_ajaxProcessing + * @private + */ + Plugin.prototype._processAjax = function(data) { + var ts = this.ts[0]; + var json = {}, + rows = ''; + + if (data) { + var size = data.rows.length; + + // Render table rows and cells via Handlebars + for (var row = 0; row < size; row++) { + var cellData = { + rownum: row, + row : data.rows[row], // It is safe to use the data from the API because Handlebars escapes HTML + site : this.settings.site + }; + + rows += this.rowTemplate(cellData); + + for (var col = 0; col < this.columnTemplatesIndexed.length; col++) { + rows += this.columnTemplatesIndexed[col](cellData); + } + + rows += ''; + } + + // Initialize any dropdown filters + var columns = ts.config.$headerIndexed; + this._ajaxInitFilterSelects(columns, data.listable); + + json.total = data.count; // Get total rows without pagination + json.filteredRows = data.count_filtered; // no filtering + json.rows = $(rows); + json.output = data.output; + } else { + json.total = 0; + json.filteredRows = 0; + json.rows = ''; + } + + return json; + }; + + /** + * Initialize filter select menus using the ajax `listable` values + * @private + */ + Plugin.prototype._ajaxInitFilterSelects = function(columns, listable) { + var ts = this.ts[0]; + var filters = this.getSavedFilters(ts); + // Find columns with `.filter-select` and match them to column numbers based on their data-column-name + for (var col = 0; col < columns.length; col++) { + var column = columns[col]; + // If the column is designated for filter-select, get the listables from the data and recreate it + if (column.hasClass('filter-select')) { + var columnName = column.data('column-name'); + if (listable[columnName]) { + $.tablesorter.filter.buildSelect(ts, col, listable[columnName], true); + // If there is a filter actually set for this column, update the selected option. + if (filters[col]) { + var selectControl = $(ts).find(".tablesorter-filter[data-column='" + col + "']"); + selectControl.val(filters[col]); + } + } + } + } + }; + + /** + * Implements handler for the "download CSV" button. + * Default callback for download.callback + * @private + */ + Plugin.prototype._onDownload = function () { + var tableState = this.getTableStateVars(this.ts[0]); + tableState.format = 'csv'; + delete tableState.page; + delete tableState.size; + + // Merge in any additional request parameters + $.extend(tableState, this.settings.addParams); + + // Causes download to begin + window.location = this.settings.dataUrl + '?' + $.param(tableState); + }; + + /** + * Handle pager ajax errors. + * @private + */ + Plugin.prototype._pagerAjaxError = function(c, jqXHR, settings, exception) { + this._ajaxError(jqXHR); + + // Let TS handle the in-table error message + return ''; + }; + + /** + * Handle ajax error + * @private + */ + Plugin.prototype._ajaxError = function(jqXHR) { + if (typeof jqXHR === 'object') { + // Error messages + if (this._debugAjax && jqXHR.responseText) { + document.write(jqXHR.responseText); + document.close(); + } else { + if (this.settings.DEBUG) { + console.log('Error (' + jqXHR.status + '): ' + jqXHR.responseText ); + } + // Display errors on failure + // TODO: ufAlerts widget should have a 'destroy' method + if (!this.settings.msgTarget.data('ufAlerts')) { + this.settings.msgTarget.ufAlerts(); + } else { + this.settings.msgTarget.ufAlerts('clear'); + } + + this.settings.msgTarget.ufAlerts('fetch').ufAlerts('render'); + } + } + }; + + /** + * Render info messages, such as when there are no results. + * Default callback for info.callback + * @private + */ + Plugin.prototype._renderInfoMessages = function () { + var table = this.ts[0]; + var infoMessages = this.settings.info.container; + if (table.config.pager) { + infoMessages.html(''); + var fr = table.config.pager.filteredRows; + if (fr === 0) { + infoMessages.html(this.settings.info.messageEmptyRows); + } + } + }; + + /** + * Encode the current table state variables into a URL hash. + * Default callback for sort2Hash_encodeHash + * @private + */ + Plugin.prototype._encodeHash = function(config, tableId, component, value, rawValue) { + var wo = config.widgetOptions; + if ( component === 'filter' ) { + // rawValue is an array of filter values, numerically indexed + var encodedFilters = ''; + var len = rawValue.length; + for (var index = 0; index < len; index++) { + if (rawValue[index]) { + var columnName = this.settings.filterAllField; + if (config.$headerIndexed[index]) { + columnName = $(config.$headerIndexed[index][0]).attr(wo.sort2Hash_headerTextAttr); + } + encodedFilters += '&filter[' + tableId + '][' + columnName + ']=' + encodeURIComponent(rawValue[index]); + } + } + return encodedFilters; + } else if ( component === 'sort' ) { + // rawValue is an array of sort pairs [columnNum, sortDirection] + var encodedFilters = ''; + var len = rawValue.length; + for (var index = 0; index < len; index++) { + var columnNum = rawValue[index][0]; + var sortDirection = rawValue[index][1]; + var columnName = $(config.$headerIndexed[columnNum][0]).attr(wo.sort2Hash_headerTextAttr); + encodedFilters += '&sort[' + tableId + '][' + columnName + ']=' + wo.sort2Hash_directionText[sortDirection]; + } + return encodedFilters; + } + return false; + }; + + /** + * Decode the current table state variables from the URL hash. + * Default callback for sort2Hash_decodeHash + * @private + */ + Plugin.prototype._decodeHash = function(config, tableId, component) { + var wo = config.widgetOptions; + var result; + // Convert hash into JSON object + var urlObject = $.String.deparam(window.location.hash); + delete urlObject[wo.sort2Hash_hash]; // Remove hash character + if (component === 'filter') { + var decodedFilters = []; + // Extract filter names and values for the specified table + var pageFilters = urlObject.filter ? urlObject.filter : []; + if (pageFilters[tableId]) { + var tableFilters = pageFilters[tableId]; + // Build a numerically indexed array of filter values + var len = config.$headerIndexed.length; + for (var index = 0; index < len; index++) { + var columnName = $(config.$headerIndexed[index][0]).attr(wo.sort2Hash_headerTextAttr); + if (tableFilters[columnName] && tableFilters[columnName] != this.settings.filterAllField) { + decodedFilters.push(tableFilters[columnName]); + } else { + decodedFilters.push(''); + } + } + // Convert array of filter values to a delimited string + result = decodedFilters.join(wo.sort2Hash_separator); + // make sure to use decodeURIComponent on the result + return decodeURIComponent(result); + } else { + return ''; + } + } + return false; + }; + + /** + * Clean up URL hash. + * Default callback for sort2Hash_cleanHash + * @private + */ + Plugin.prototype._cleanHash = function(config, tableId, component, hash) { + var wo = config.widgetOptions; + // Convert hash to JSON object + var urlObject = $.String.deparam(hash); + delete urlObject[wo.sort2Hash_hash]; // Remove hash character + // Remove specified component for specified table + if (urlObject[component]) { + if (urlObject[component][tableId]) { + delete urlObject[component][tableId]; + } + // Delete entire component if no other tables remaining + if (jQuery.isEmptyObject(urlObject[component])) { + delete urlObject[component]; + } + } + // Convert modified JSON object back into serialized representation + var result = decodeURIComponent(jQuery.param(urlObject)); + return result.length ? result : ''; + }; + + // Handles instantiation and access to non-private methods. + $.fn[pluginName] = function(methodOrOptions) { + // Grab plugin instance + var instance = $(this).data(pluginName); + // If undefined or object, initalise plugin. + if (methodOrOptions === undefined || typeof methodOrOptions === 'object') { + // Only initalise if not previously done. + if (!instance) { + $(this).data(pluginName, new Plugin(this, methodOrOptions)); + } + return this; + // Otherwise ensure first parameter is a valid string, and is the name of an actual function. + } else if (typeof methodOrOptions === 'string' && typeof instance[methodOrOptions] === 'function') { + // Ensure not a private function + if (methodOrOptions.indexOf('_') !== 0) { + return instance[methodOrOptions]( Array.prototype.slice.call(arguments, 1)); + } + else { + console.warn( 'Method ' + methodOrOptions + ' is private!' ); + } + } else { + console.warn( 'Method ' + methodOrOptions + ' does not exist.' ); + } + }; +})(jQuery, window, document); diff --git a/login/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js b/login/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js new file mode 100755 index 0000000..444b4ac --- /dev/null +++ b/login/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js @@ -0,0 +1,53 @@ +// Parser for sorting integers, timestamps, etc based on metadata from attributes +// Adapted from http://mottie.github.io/tablesorter/docs/example-parsers-advanced.html +$.tablesorter.addParser({ + // set a unique id + id: 'metanum', + is: function(s) { + // return false so this parser is not auto detected + return false; + }, + format: function(s, table, cell, cellIndex) { + var $cell = $(cell); + // returns metadata, or cell text (s) if it doesn't exist + return $cell.attr('data-num') || s; + + }, + // set type to numeric + type: 'numeric' +}); + +$.tablesorter.addParser({ + // set a unique id + id: 'metatext', + is: function(s) { + // return false so this parser is not auto detected + return false; + }, + format: function(s, table, cell, cellIndex) { + var $cell = $(cell); + // returns metadata, or cell text (s) if it doesn't exist + return $cell.attr('data-text') || s; + + }, + + type: 'text' +}); + +$.tablesorter.addParser({ + // set a unique id + id: 'isblank', + is: function(s) { + // return false so this parser is not auto detected + return false; + }, + format: function(s, table, cell, cellIndex) { + var $cell = $(cell); + // returns 1 if blank (whitespace), 0 otherwise + var isBlank = $cell.html().trim() == " " ? 1 : 0; + return isBlank; + + }, + + type: 'numeric' +}); -- cgit v1.2.3