diff options
author | marvin-borner@live.com | 2018-04-16 21:09:05 +0200 |
---|---|---|
committer | marvin-borner@live.com | 2018-04-16 21:09:05 +0200 |
commit | cf14306c2b3f82a81f8d56669a71633b4d4b5fce (patch) | |
tree | 86700651aa180026e89a66064b0364b1e4346f3f /main/app/sprinkles/core/assets/userfrosting | |
parent | 619b01b3615458c4ed78bfaeabb6b1a47cc8ad8b (diff) |
Main merge to user management system - files are now at /main/public/
Diffstat (limited to 'main/app/sprinkles/core/assets/userfrosting')
67 files changed, 12341 insertions, 0 deletions
diff --git a/main/app/sprinkles/core/assets/userfrosting/css/AdminLTE-skins-all.css b/main/app/sprinkles/core/assets/userfrosting/css/AdminLTE-skins-all.css new file mode 100755 index 0000000..53577c4 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css b/main/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css new file mode 100755 index 0000000..38fe523 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/css/AdminLTE.css @@ -0,0 +1,5894 @@ +@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 <http://almsaeedstudio.com> + * 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 <BODY> 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/main/app/sprinkles/core/assets/userfrosting/css/tablesorter-reflow.css b/main/app/sprinkles/core/assets/userfrosting/css/tablesorter-reflow.css new file mode 100755 index 0000000..3a9c14f --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/css/uf-alerts.css b/main/app/sprinkles/core/assets/userfrosting/css/uf-alerts.css new file mode 100755 index 0000000..7ac5a97 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/css/uf-collection.css b/main/app/sprinkles/core/assets/userfrosting/css/uf-collection.css new file mode 100755 index 0000000..432e1a4 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/css/uf-jqueryvalidation.css b/main/app/sprinkles/core/assets/userfrosting/css/uf-jqueryvalidation.css new file mode 100755 index 0000000..6fd2e47 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/css/userfrosting.css b/main/app/sprinkles/core/assets/userfrosting/css/userfrosting.css new file mode 100755 index 0000000..38a92e2 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/favicons/README.md b/main/app/sprinkles/core/assets/userfrosting/favicons/README.md new file mode 100755 index 0000000..c756d36 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png Binary files differnew file mode 100755 index 0000000..d2b133f --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-144x144.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png Binary files differnew file mode 100755 index 0000000..f6877ef --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-192x192.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png Binary files differnew file mode 100755 index 0000000..f0dcd45 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-256x256.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png Binary files differnew file mode 100755 index 0000000..03b3f7d --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-36x36.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png Binary files differnew file mode 100755 index 0000000..cdb7f6d --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-384x384.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png Binary files differnew file mode 100755 index 0000000..dea6333 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-48x48.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png Binary files differnew file mode 100755 index 0000000..292cc0b --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-512x512.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png Binary files differnew file mode 100755 index 0000000..2a12eae --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-72x72.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png Binary files differnew file mode 100755 index 0000000..be2007b --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/android-chrome-96x96.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png Binary files differnew file mode 100755 index 0000000..9cc0516 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png Binary files differnew file mode 100755 index 0000000..ee79201 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-114x114.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png Binary files differnew file mode 100755 index 0000000..c99a379 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png Binary files differnew file mode 100755 index 0000000..097a9af --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-120x120.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png Binary files differnew file mode 100755 index 0000000..1ca7d71 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png Binary files differnew file mode 100755 index 0000000..af016ec --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-144x144.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png Binary files differnew file mode 100755 index 0000000..4ed4ec6 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png Binary files differnew file mode 100755 index 0000000..e08a1c2 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-152x152.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png Binary files differnew file mode 100755 index 0000000..1b1d093 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png Binary files differnew file mode 100755 index 0000000..d2e5117 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-180x180.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png Binary files differnew file mode 100755 index 0000000..b836367 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png Binary files differnew file mode 100755 index 0000000..d1628ca --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-57x57.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png Binary files differnew file mode 100755 index 0000000..7c85a57 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png Binary files differnew file mode 100755 index 0000000..011967e --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-60x60.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png Binary files differnew file mode 100755 index 0000000..dcb3f7c --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png Binary files differnew file mode 100755 index 0000000..bd57115 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-72x72.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png Binary files differnew file mode 100755 index 0000000..8c919b8 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png Binary files differnew file mode 100755 index 0000000..e96533b --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-76x76.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png Binary files differnew file mode 100755 index 0000000..1b1d093 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon-precomposed.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png Binary files differnew file mode 100755 index 0000000..d2e5117 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/apple-touch-icon.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png b/main/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png Binary files differnew file mode 100755 index 0000000..a705675 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/favicon-16x16.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png b/main/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png Binary files differnew file mode 100755 index 0000000..0d89d12 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/favicon-32x32.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico b/main/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico Binary files differnew file mode 100755 index 0000000..a787724 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/favicon.ico diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml b/main/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml new file mode 100755 index 0000000..21fa5ad --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/ieconfig.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square70x70logo src="/mstile-70x70.png"/>
+ <square150x150logo src="/mstile-150x150.png"/>
+ <square310x310logo src="/mstile-310x310.png"/>
+ <wide310x150logo src="/mstile-310x150.png"/>
+ <TileColor>#603cba</TileColor>
+ </tile>
+ </msapplication>
+</browserconfig>
diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/manifest.json b/main/app/sprinkles/core/assets/userfrosting/favicons/manifest.json new file mode 100755 index 0000000..328cd7a --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png Binary files differnew file mode 100755 index 0000000..3227cbb --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-144x144.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png Binary files differnew file mode 100755 index 0000000..e8f3a69 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-150x150.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png Binary files differnew file mode 100755 index 0000000..b14af89 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x150.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png Binary files differnew file mode 100755 index 0000000..cabb0b9 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-310x310.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png Binary files differnew file mode 100755 index 0000000..7ae9615 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/mstile-70x70.png diff --git a/main/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg b/main/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg new file mode 100755 index 0000000..2435014 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/favicons/safari-pinned-tab.svg @@ -0,0 +1,246 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> +<svg version="1.0" xmlns="http://www.w3.org/2000/svg" + width="2061.000000pt" height="2061.000000pt" viewBox="0 0 2061.000000 2061.000000" + preserveAspectRatio="xMidYMid meet"> +<metadata> +Created by potrace 1.11, written by Peter Selinger 2001-2013 +</metadata> +<g transform="translate(0.000000,2061.000000) scale(0.100000,-0.100000)" +fill="#000000" stroke="none"> +<path d="M11924 20602 c-23 -15 -154 -225 -166 -265 -6 -23 -24 -56 -38 -73 +-29 -34 -77 -193 -104 -344 -34 -185 -47 -488 -25 -547 13 -34 59 -84 71 -77 +4 3 8 38 8 77 0 40 5 135 10 212 27 360 96 596 235 800 53 77 85 145 85 180 0 +34 -47 57 -76 37z"/> +<path d="M9482 18775 c-113 -29 -217 -78 -303 -142 l-64 -48 56 -8 c48 -8 63 +-6 102 12 25 12 77 28 114 37 126 28 178 67 197 147 8 32 14 32 -102 2z"/> +<path d="M11641 18720 c-26 -43 -26 -66 -1 -132 22 -58 26 -118 10 -148 -15 +-28 -47 -42 -110 -49 l-55 -6 74 -24 c40 -14 146 -60 235 -104 236 -116 321 +-152 442 -187 137 -39 306 -121 410 -197 110 -83 250 -233 334 -360 40 -60 +107 -180 151 -268 43 -88 97 -189 119 -224 38 -62 45 -86 41 -141 -4 -50 -6 +-51 -83 -24 -190 65 -447 128 -711 173 -222 39 -321 52 -786 106 -409 48 -450 +54 -774 115 -115 22 -234 40 -264 40 l-56 0 6 -37 c4 -24 16 -46 33 -59 28 +-23 111 -49 183 -59 24 -3 56 -12 71 -20 30 -15 52 -62 43 -93 -2 -10 0 -37 6 +-60 15 -53 84 -117 269 -247 78 -55 142 -107 142 -115 0 -9 -7 -26 -16 -38 +-13 -18 -24 -22 -72 -22 -31 0 -86 9 -120 20 -35 11 -78 20 -95 20 -35 0 -117 +-34 -117 -48 0 -8 738 -232 1040 -316 333 -93 675 -172 1440 -336 644 -138 +744 -162 803 -191 55 -27 104 -74 129 -123 21 -41 48 -152 48 -200 l0 -28 +-122 6 c-973 50 -1322 53 -1676 16 -122 -13 -152 -25 -152 -57 0 -41 41 -69 +146 -102 390 -119 938 -257 1284 -322 61 -11 120 -42 103 -52 -9 -5 -129 -25 +-345 -56 -138 -21 -299 -66 -305 -88 -2 -6 5 -14 17 -18 12 -4 19 -12 17 -18 +-10 -28 -164 -5 -587 84 -543 115 -765 160 -1025 204 -116 20 -250 44 -300 55 +-141 30 -162 32 -206 20 -33 -9 -43 -18 -56 -47 -13 -33 -13 -38 5 -62 30 -41 +76 -57 321 -116 405 -97 628 -136 1326 -235 237 -34 484 -70 550 -81 66 -10 +123 -19 127 -19 4 0 10 -10 13 -22 12 -40 55 -87 96 -109 23 -11 81 -29 131 +-40 94 -20 152 -41 161 -56 3 -5 -343 -19 -811 -32 -449 -13 -819 -26 -822 +-28 -9 -8 33 -33 64 -37 537 -77 1265 -146 2021 -192 276 -17 736 -15 852 4 +33 5 56 5 63 -2 6 -6 17 -6 32 1 13 6 56 14 96 17 73 6 73 6 109 -29 45 -43 +110 -68 253 -95 74 -14 144 -35 204 -62 50 -22 132 -54 181 -72 71 -26 93 -38 +103 -59 19 -39 -2 -78 -48 -90 -56 -15 -465 -1 -665 23 -99 11 -297 37 -440 +56 -391 52 -509 64 -755 74 -186 8 -267 16 -465 49 -132 22 -314 49 -405 61 +-312 38 -1083 202 -1157 246 -37 21 -53 24 -152 24 -127 0 -136 -8 -78 -64 25 +-26 78 -49 260 -115 273 -98 401 -132 602 -161 176 -25 297 -51 611 -131 259 +-65 460 -105 608 -118 78 -7 102 -13 113 -27 19 -25 17 -32 -15 -48 -16 -8 +-48 -40 -72 -71 -62 -80 -142 -150 -195 -171 -39 -15 -53 -15 -99 -5 -63 14 +-179 80 -261 150 -33 28 -75 59 -93 68 -31 16 -35 16 -67 -1 -40 -22 -60 -63 +-51 -109 9 -49 80 -190 141 -282 29 -44 97 -132 150 -195 53 -63 123 -147 156 +-187 l60 -72 -40 -20 c-72 -37 -104 -36 -286 8 -94 22 -307 63 -475 91 -168 +27 -394 68 -504 90 -288 58 -531 100 -1066 185 -695 110 -993 165 -1355 251 +-162 39 -205 40 -253 6 l-28 -21 -493 185 c-272 102 -496 182 -500 178 -11 +-11 97 -102 166 -140 105 -59 531 -236 993 -414 680 -261 1396 -498 2105 -695 +554 -154 1403 -355 1503 -355 104 0 150 -42 122 -111 -27 -65 -169 -104 -410 +-114 -488 -19 -1114 97 -1990 370 -366 115 -1178 393 -1218 419 -22 13 -58 29 +-80 36 -42 11 -92 5 -92 -11 0 -12 84 -59 134 -74 24 -7 79 -33 122 -58 421 +-238 1013 -477 1619 -652 498 -144 1352 -337 1965 -444 150 -26 1044 -171 +1056 -171 2 0 4 -7 4 -15 0 -26 53 -74 105 -94 163 -62 375 -155 422 -183 29 +-18 70 -49 90 -70 l37 -38 -31 0 c-17 0 -44 6 -60 14 -20 11 -145 22 -447 41 +-230 14 -419 25 -421 23 -1 -2 -5 -13 -9 -24 -6 -20 -1 -23 56 -36 602 -136 +1408 -324 1408 -329 0 -12 -58 -31 -92 -31 -18 0 -80 8 -137 17 -189 32 -381 +8 -561 -68 -72 -31 -79 -32 -160 -25 -47 4 -404 57 -794 118 -1439 225 -1626 +249 -2466 319 -679 57 -687 57 -718 34 -15 -11 -28 -27 -30 -35 -6 -29 253 +-128 333 -128 13 0 28 -6 34 -14 6 -8 31 -17 55 -20 38 -6 44 -10 50 -37 9 +-47 44 -72 146 -108 199 -69 337 -148 445 -254 89 -87 98 -141 31 -192 -81 +-62 -509 -215 -1061 -380 -176 -52 -378 -118 -450 -146 -169 -66 -273 -93 +-339 -86 -44 5 -68 -1 -171 -40 -275 -104 -834 -281 -1145 -363 -184 -48 -208 +-58 -233 -95 -20 -32 -23 -33 -112 -39 -727 -56 -1440 -59 -2045 -11 -510 41 +-1079 132 -1514 241 -191 48 -298 83 -536 176 -169 66 -209 85 -230 111 -49 +63 -123 137 -176 178 -53 41 -224 133 -231 125 -11 -11 46 -96 96 -146 58 -59 +146 -113 249 -155 43 -18 75 -41 114 -81 29 -31 93 -88 142 -126 98 -76 321 +-216 376 -236 336 -123 583 -181 925 -217 231 -24 745 -38 1190 -31 899 14 +1535 56 2435 161 331 39 1117 120 1255 130 50 3 110 13 135 20 25 8 162 30 +305 50 143 20 355 49 470 65 116 16 320 41 455 55 135 14 405 50 600 80 426 +66 573 84 746 92 l130 6 80 -42 c250 -131 504 -389 630 -638 80 -160 41 -273 +-114 -327 -66 -24 -180 -35 -523 -51 -361 -18 -352 -17 -1134 -95 -324 -33 +-705 -68 -845 -80 -868 -70 -1174 -130 -1670 -325 -195 -77 -342 -125 -685 +-223 -324 -93 -764 -212 -784 -212 -10 0 -44 9 -77 20 -53 19 -223 47 -1249 +210 -334 53 -386 63 -570 115 -169 48 -548 171 -584 189 -59 31 -101 16 -101 +-36 0 -33 2 -33 -139 -12 -275 40 -478 117 -649 246 -36 28 -124 77 -195 109 +-361 166 -641 320 -867 478 -267 187 -384 240 -594 267 -124 16 -189 42 -289 +116 l-58 43 30 7 c16 5 45 26 64 48 l34 40 646 -294 c356 -161 659 -304 673 +-317 24 -22 33 -24 121 -23 95 2 97 1 121 -27 19 -23 27 -27 38 -18 22 18 17 +26 -20 39 -23 7 -49 30 -78 67 -49 64 -137 141 -728 633 -234 195 -567 476 +-740 625 -402 346 -730 619 -1362 1133 -278 227 -530 439 -560 470 -66 72 +-122 177 -144 268 -42 179 29 596 151 877 6 13 2 17 -17 17 -39 0 -136 -54 +-218 -120 -41 -34 -100 -82 -131 -106 -91 -73 -100 -116 -43 -210 118 -194 +140 -281 112 -445 -22 -134 21 -260 127 -369 23 -25 46 -59 50 -77 3 -17 12 +-34 19 -36 7 -3 16 -19 19 -36 4 -17 16 -39 27 -48 11 -10 20 -26 20 -37 0 +-11 20 -41 44 -66 24 -25 87 -114 141 -198 83 -131 105 -158 152 -188 29 -20 +67 -56 84 -80 36 -52 74 -151 83 -216 7 -49 38 -98 62 -98 10 0 14 -13 14 -46 +0 -42 -1 -45 -22 -38 -42 13 -73 32 -131 83 -60 53 -106 81 -130 81 -16 0 -49 +-70 -68 -143 -18 -72 -6 -216 25 -312 14 -45 30 -126 35 -186 11 -120 22 -176 +53 -269 65 -201 194 -364 376 -476 160 -98 248 -190 277 -287 12 -41 14 -84 9 +-216 -7 -191 1 -218 72 -255 36 -19 54 -21 229 -19 217 3 323 17 485 62 127 +36 154 34 186 -14 16 -24 15 -27 -12 -66 -63 -89 -76 -120 -82 -184 -11 -141 +91 -292 206 -303 56 -5 99 11 187 68 34 22 75 42 91 46 46 9 86 -31 144 -145 +107 -207 224 -284 386 -251 76 15 219 83 319 150 83 56 165 96 205 102 24 3 +25 0 28 -50 2 -29 -6 -95 -17 -147 -23 -103 -27 -237 -10 -298 6 -21 26 -56 +46 -78 121 -133 421 -74 932 183 285 143 310 150 354 99 18 -21 33 -65 52 +-148 35 -153 75 -260 131 -359 73 -127 117 -164 200 -164 66 0 125 31 152 79 +27 48 38 135 51 391 6 102 16 205 23 230 13 43 15 45 48 42 53 -6 146 -37 276 +-93 71 -31 157 -59 214 -70 152 -31 211 -71 238 -159 6 -19 16 -136 22 -259 +16 -323 36 -422 101 -496 47 -53 114 -69 259 -62 63 4 134 10 158 13 l44 7 +-21 -39 c-35 -66 -28 -124 53 -446 95 -373 162 -611 287 -1023 56 -181 144 +-476 196 -655 130 -448 230 -739 284 -826 14 -23 19 -50 19 -103 0 -73 9 -93 +55 -119 15 -8 27 -78 75 -423 32 -228 72 -531 89 -674 22 -184 41 -299 66 +-392 49 -188 60 -282 45 -370 -11 -66 -16 -76 -56 -112 -34 -32 -51 -41 -79 +-41 -80 0 -133 53 -342 340 -78 107 -97 142 -137 247 -51 138 -61 199 -136 +823 -93 771 -115 903 -271 1580 -197 854 -306 1230 -472 1631 -35 85 -67 166 +-71 181 -14 58 -57 74 -101 35 -21 -18 -31 -48 -60 -172 -85 -364 -86 -417 +-14 -706 113 -458 170 -750 214 -1108 37 -295 52 -359 180 -776 95 -307 129 +-449 160 -661 51 -347 155 -673 322 -1012 65 -132 70 -168 30 -227 -15 -22 +-32 -58 -38 -80 -15 -53 -60 -108 -132 -161 -99 -73 -169 -69 -255 14 -112 +109 -214 298 -302 559 -48 141 -60 188 -60 239 0 121 -498 2064 -730 2849 +-179 606 -275 899 -340 1043 -46 102 -98 199 -110 207 -11 7 -55 -50 -75 -98 +-8 -20 -15 -54 -15 -75 0 -80 87 -558 171 -937 98 -442 336 -1383 459 -1815 +149 -525 190 -716 183 -860 -4 -71 1 -127 17 -220 24 -134 28 -265 11 -370 +-13 -80 -49 -120 -108 -120 -33 0 -46 9 -118 82 -45 46 -96 101 -113 123 l-32 +40 0 -30 c0 -36 30 -151 58 -222 72 -188 228 -370 382 -448 25 -12 101 -35 +170 -50 188 -40 438 -113 930 -270 58 -18 146 -45 196 -59 51 -14 163 -53 250 +-87 396 -153 413 -156 829 -163 464 -7 641 -28 1545 -180 750 -126 927 -145 +1425 -153 566 -9 988 24 1733 137 1120 171 1302 188 1982 194 431 4 527 11 +780 56 400 73 727 191 1739 629 178 77 341 152 363 167 81 57 138 165 138 264 +0 107 -52 187 -179 272 -153 104 -250 221 -309 376 -28 73 -40 120 -78 322 +-31 166 -124 309 -238 365 -28 13 -95 33 -149 44 -104 21 -195 58 -274 112 +-89 61 -367 272 -533 404 -270 216 -360 272 -520 326 -115 38 -270 49 -385 27 +l-71 -14 94 225 c51 124 210 512 352 861 602 1481 843 2031 1216 2780 168 336 +222 434 316 576 127 190 211 331 413 699 76 138 156 277 180 310 59 84 83 135 +99 208 10 50 33 97 104 214 59 96 101 154 117 161 29 14 41 52 25 82 -9 17 -9 +25 4 39 18 20 20 44 6 70 -5 10 -71 90 -146 177 -157 184 -178 221 -178 314 1 +81 25 146 101 265 31 50 85 146 120 213 56 110 63 130 63 182 0 63 -19 94 -76 +123 -16 8 -179 58 -363 112 -184 53 -351 105 -371 115 -59 30 -88 71 -95 137 +-14 121 -49 206 -145 348 -26 39 -59 92 -75 119 -19 34 -38 53 -64 64 l-36 16 +0 90 c0 133 -23 174 -195 351 -149 154 -160 173 -160 283 0 81 31 236 85 429 +25 87 45 179 45 206 0 45 -1 47 -28 47 -39 0 -52 32 -52 125 0 57 -5 82 -20 +107 -16 26 -20 51 -20 116 0 56 -4 82 -12 82 -6 0 -22 10 -35 22 -42 40 -48 +17 -49 -195 -1 -187 -10 -254 -37 -287 -14 -19 -58 -50 -69 -50 -16 0 -8 97 +16 195 46 192 49 212 36 282 -20 117 -97 256 -159 287 -14 7 -55 16 -90 20 +-146 16 -183 56 -189 203 l-4 93 53 -16 c30 -9 78 -30 107 -47 62 -37 230 +-169 253 -199 10 -13 23 -19 33 -15 22 9 20 27 -4 27 -13 0 -22 10 -29 36 -17 +60 -51 101 -151 178 -52 41 -104 84 -115 96 -11 12 -38 31 -60 42 -22 11 -69 +46 -104 77 -304 269 -576 385 -1206 514 l-109 22 -53 70 c-242 318 -456 448 +-773 470 -174 12 -287 50 -550 186 -178 92 -195 106 -186 144 9 36 28 40 110 +26 39 -7 162 -16 273 -21 319 -15 398 -38 583 -175 125 -91 217 -147 309 -185 +71 -29 200 -65 207 -57 3 3 -157 166 -354 363 -453 454 -602 628 -783 921 +-115 186 -209 272 -384 354 -80 38 -247 87 -355 104 l-45 7 65 -59 c64 -59 +153 -137 344 -303 155 -134 303 -310 424 -505 52 -84 150 -280 167 -334 7 -23 +5 -23 -33 10 -22 19 -147 126 -278 239 -471 406 -873 722 -1449 1140 l-210 +153 63 -7 c93 -10 211 -47 437 -136 191 -75 334 -124 341 -117 10 9 -51 78 +-93 105 -78 50 -263 134 -468 211 -263 100 -432 186 -699 356 -289 184 -394 +246 -509 300 -102 47 -245 97 -331 115 -71 15 -110 47 -134 113 l-20 51 -21 +-34z m105 -1815 c193 -33 371 -97 549 -196 134 -74 155 -92 155 -135 0 -50 +-14 -55 -126 -44 -134 13 -312 12 -376 -1 -29 -6 -81 -24 -115 -39 -84 -38 +-118 -44 -169 -30 -63 18 -117 70 -158 150 -46 93 -55 149 -29 191 22 34 139 +119 164 119 9 0 56 -7 105 -15z m5990 -3540 c-15 -23 -52 -42 -62 -32 -3 3 -2 +17 2 32 8 33 67 64 72 39 2 -8 -3 -26 -12 -39z m-15398 -3420 c35 -29 46 -67 +36 -119 l-6 -36 -50 42 c-57 47 -72 77 -58 113 12 32 40 32 78 0z m109 -180 +c2 -6 -3 -20 -12 -30 -14 -20 -15 -20 -35 5 -11 14 -20 29 -20 33 0 12 63 4 +67 -8z m263 -103 c0 -2 -13 -15 -30 -29 -21 -17 -30 -34 -30 -54 0 -34 19 -46 +126 -77 80 -24 92 -35 101 -86 l6 -36 -64 0 c-51 0 -67 -4 -86 -22 -13 -12 +-23 -27 -23 -35 0 -20 -60 -16 -97 7 -33 20 -76 77 -88 118 -7 24 4 29 23 10 +10 -10 15 -10 22 2 18 28 10 56 -29 113 -42 59 -41 66 10 86 21 9 159 11 159 +3z m90 -451 c3 -2 -8 -1 -25 3 -32 8 -55 30 -55 55 0 10 13 3 37 -20 21 -18 +40 -36 43 -38z m3374 -1488 c57 -40 57 -53 2 -53 -53 0 -110 21 -143 52 -31 +29 -13 41 52 34 32 -4 64 -16 89 -33z m158 -77 c22 -16 22 -16 -14 -16 -22 0 +-45 8 -59 21 l-24 20 37 -5 c21 -2 48 -12 60 -20z m263 -110 c26 -8 65 -29 86 +-45 21 -17 45 -31 54 -31 22 0 55 -18 55 -30 0 -19 -59 -11 -70 10 -8 15 -21 +20 -54 20 -47 0 -166 53 -174 78 -5 17 43 16 103 -2z m7062 -337 c24 -11 52 +-33 63 -47 12 -15 85 -111 163 -213 78 -103 190 -245 249 -317 123 -149 166 +-179 244 -168 43 5 44 5 44 -23 0 -15 -9 -70 -20 -122 -11 -52 -20 -116 -20 +-144 0 -27 -9 -72 -19 -100 -10 -27 -67 -232 -126 -455 -308 -1171 -764 -2779 +-798 -2819 -8 -9 -17 -32 -21 -51 -12 -60 -153 -157 -208 -142 -32 8 -66 64 +-118 192 -60 149 -120 421 -120 545 0 78 125 1113 196 1620 40 292 42 402 6 +510 -73 220 -88 245 -137 245 -36 0 -74 -36 -80 -78 -4 -20 -19 -93 -35 -162 +-61 -260 -95 -447 -306 -1700 -19 -113 -72 -470 -119 -795 -124 -857 -172 +-1143 -256 -1519 l-39 -178 -58 -77 c-90 -117 -150 -142 -242 -101 -67 30 +-225 141 -236 164 -5 12 -40 37 -77 56 -38 20 -76 44 -84 55 -20 27 -14 96 36 +430 53 353 86 619 171 1375 93 826 102 947 132 1750 19 508 17 820 -5 897 -24 +86 -159 363 -191 392 -17 16 -41 25 -74 29 -44 4 -53 1 -84 -26 -36 -32 -52 +-72 -63 -157 -4 -27 -9 -59 -12 -69 -5 -18 -6 -18 -19 5 -9 16 -13 62 -14 139 +-1 215 -23 412 -63 549 l-21 74 29 55 c41 78 117 157 170 178 128 48 307 -47 +560 -299 66 -66 147 -140 180 -165 159 -118 438 -216 657 -229 91 -6 100 -4 +152 21 42 21 62 39 81 71 37 62 44 94 55 240 12 154 28 223 80 330 33 68 50 +90 120 150 124 108 188 127 277 84z m-4723 -610 c20 -17 52 -58 72 -92 195 +-325 376 -468 618 -486 120 -9 120 -8 127 -279 3 -119 9 -226 14 -237 25 -61 +101 -124 152 -126 10 0 -3 -7 -29 -15 -92 -28 -107 -91 -68 -282 10 -54 24 +-173 30 -267 21 -327 235 -2034 340 -2705 26 -166 31 -187 54 -206 13 -12 30 +-24 36 -26 7 -2 20 -61 31 -143 48 -351 71 -455 126 -557 25 -46 25 -48 8 -75 +-73 -114 -169 -181 -241 -170 -96 16 -213 109 -320 252 -75 103 -145 165 -185 +165 -22 0 -12 -66 -99 695 -97 852 -125 1105 -159 1460 -47 472 -60 577 -92 +745 -69 353 -209 750 -386 1093 -46 89 -104 152 -151 164 l-24 6 3 496 c3 453 +2 499 -14 535 -9 21 -17 40 -17 42 0 3 15 13 33 24 49 30 99 26 141 -11z +m1526 -69 c129 -219 248 -287 431 -247 l66 14 7 -406 c14 -880 49 -1612 112 +-2361 33 -406 46 -520 55 -520 4 0 22 30 40 66 30 61 33 77 40 198 4 72 25 +514 48 981 23 468 46 860 51 872 5 12 18 27 29 33 19 10 20 8 16 -17 -3 -16 +-12 -197 -20 -403 -25 -627 -47 -976 -75 -1205 -6 -44 -15 -210 -20 -370 -5 +-159 -17 -414 -26 -565 -9 -151 -17 -459 -18 -685 -3 -383 -4 -415 -24 -480 +-18 -62 -28 -77 -84 -130 -35 -33 -87 -72 -115 -88 -71 -38 -189 -67 -305 -74 +l-98 -6 0 99 c0 54 9 430 20 834 34 1295 42 1820 38 2510 -4 642 -6 679 -25 +760 -40 160 -102 299 -186 410 -48 63 -44 22 -38 420 3 172 1 204 -18 273 -19 +72 -19 82 -6 115 17 39 33 62 45 62 4 0 31 -40 60 -90z m-1540 -2529 c50 -398 +89 -726 87 -728 -12 -11 -41 15 -61 56 -21 41 -22 49 -10 76 19 44 17 158 -6 +252 -11 45 -27 144 -35 220 -9 76 -31 242 -50 368 -58 395 -60 415 -40 460 10 +22 19 36 21 30 2 -5 44 -336 94 -734z"/> +<path d="M7997 17171 c-21 -10 -55 -34 -75 -53 -20 -19 -71 -62 -113 -96 -42 +-33 -98 -85 -126 -115 l-50 -55 -7 -94 c-12 -177 22 -403 79 -524 33 -68 111 +-160 157 -185 27 -15 27 -15 -56 183 -37 86 -74 191 -83 232 -15 70 -15 78 1 +121 30 78 84 91 228 54 105 -27 147 -18 173 38 16 33 18 64 16 228 -2 196 -6 +251 -24 273 -14 17 -75 14 -120 -7z"/> +<path d="M6910 17111 c-207 -255 -261 -331 -432 -617 -160 -266 -161 -270 +-124 -544 8 -63 20 -218 26 -345 11 -253 21 -340 51 -448 11 -40 24 -94 30 +-122 14 -64 41 -109 85 -135 27 -17 34 -28 34 -53 0 -34 31 -110 48 -121 16 +-10 35 32 28 60 -4 13 -19 38 -35 56 -23 27 -37 68 -74 213 -55 216 -72 331 +-63 445 11 161 78 331 170 435 50 56 46 59 71 -60 27 -126 73 -262 123 -360 +37 -73 64 -108 139 -183 51 -52 96 -105 99 -118 8 -33 57 -80 91 -89 15 -3 38 +-16 51 -27 12 -12 22 -17 22 -11 0 5 -9 18 -20 28 -11 10 -20 27 -20 37 0 28 +-27 76 -49 88 -11 5 -31 10 -45 10 -23 0 -26 4 -26 38 0 28 -11 56 -40 101 +-52 80 -163 301 -201 400 -58 151 -83 274 -82 406 1 69 8 143 16 175 45 172 +85 286 131 375 50 97 51 102 51 185 0 83 -20 200 -33 200 -4 -1 -14 -9 -22 +-19z"/> +<path d="M4200 15495 c-19 -19 -42 -35 -53 -35 -10 0 -39 -21 -65 -47 -26 -25 +-35 -37 -21 -25 14 12 32 22 40 22 23 1 53 22 98 73 50 55 51 64 1 12z"/> +<path d="M3930 13725 c-7 -8 -21 -15 -33 -15 -28 0 -81 -35 -111 -74 -14 -19 +-41 -44 -60 -56 -19 -11 -107 -98 -195 -191 -137 -145 -166 -182 -201 -252 +-30 -62 -42 -99 -46 -152 l-6 -70 46 -43 c27 -25 55 -42 69 -42 31 0 88 39 +104 70 7 14 32 66 55 115 24 50 87 158 140 240 133 210 219 364 225 405 3 19 +15 45 26 58 11 12 16 22 10 22 -6 0 -16 -7 -23 -15z"/> +<path d="M2674 13567 c-25 -14 -132 -145 -192 -234 -98 -145 -190 -374 -227 +-563 -49 -255 11 -719 131 -1009 111 -269 296 -490 779 -933 371 -340 858 +-778 862 -774 3 2 -1 23 -7 46 -9 34 -49 81 -222 263 -522 549 -1019 1133 +-1175 1382 -53 84 -112 216 -134 300 -39 150 -22 409 44 685 l13 55 18 -80 +c42 -186 147 -439 255 -618 27 -45 52 -100 56 -122 11 -57 22 -75 56 -87 24 +-8 29 -15 29 -43 0 -32 21 -65 40 -65 5 0 17 11 25 24 21 31 6 63 -35 77 -25 +9 -28 16 -32 64 -3 40 -14 70 -41 113 -59 96 -133 376 -156 594 -21 192 -8 +400 38 583 44 177 46 199 27 249 -28 73 -106 121 -152 93z"/> +<path d="M5265 6405 c56 -741 1232 -4262 1540 -4612 13 -16 25 -22 25 -15 0 7 +-22 86 -50 175 -71 234 -180 621 -335 1197 -335 1241 -499 1768 -740 2380 +-128 325 -382 878 -430 935 -15 19 -16 16 -10 -60z"/> +<path d="M5345 4220 c6 -31 41 -162 187 -685 50 -181 91 -381 118 -575 39 +-283 116 -539 255 -840 34 -74 67 -149 74 -167 20 -51 54 -76 90 -68 38 8 71 +48 71 85 0 40 -34 201 -81 380 -76 292 -174 561 -424 1160 -70 168 -165 404 +-212 525 -46 121 -81 204 -78 185z"/> +<path d="M5125 3042 c1 -265 3 -275 126 -456 107 -160 195 -265 253 -306 41 +-28 66 -37 66 -25 0 3 -23 50 -50 105 -28 56 -103 232 -166 393 -100 251 -200 +475 -222 499 -4 4 -7 -91 -7 -210z"/> +</g> +</svg> diff --git a/main/app/sprinkles/core/assets/userfrosting/images/cupcake.png b/main/app/sprinkles/core/assets/userfrosting/images/cupcake.png Binary files differnew file mode 100755 index 0000000..3e1a704 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/images/cupcake.png diff --git a/main/app/sprinkles/core/assets/userfrosting/images/logo.svg b/main/app/sprinkles/core/assets/userfrosting/images/logo.svg new file mode 100755 index 0000000..b11b0b5 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/images/logo.svg @@ -0,0 +1,514 @@ +<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="612px" height="537px" viewBox="0 0 612 537" style="enable-background:new 0 0 612 537;" xml:space="preserve">
+<path style="fill:#FFFFFF;" d="M71.3,277.7c-1.9,3.4-2.2,7.6-1.4,12.6c9.1,23.9,33.6,61.6,48.5,100.3c14.8,38.2,18.8,57.5,32.1,75.8
+ s59.7,30.3,59.7,30.3l59.2,11.9V309C269.5,309,77.4,266.9,71.3,277.7z"/>
+<polygon style="fill:#FFFFFF;" points="310.5,35.1 305.1,40.5 299.3,44.3 242.7,84 278.2,108.5 328.5,109.7 310,72.4 310,54 "/>
+<path style="fill:#FFFFFF;" d="M133,147L133,147c-0.4,0.4-0.7,0.7-1,1l0,0c-0.8,0-1.5,0.2-2,1l0,0c-0.3,0.3-0.7,0.6-1,1
+ c-2.6,0.3-3.9,2.4-5.4,4.1c-6,6.8-12.2,13.3-19.2,19.2c-10.4,8.8-19,19.4-27.5,29.8c-3.6,4.3-7.4,8.7-9.8,13.9c-4,0.6-6.4,3.9-9.5,6
+ c-1.8,1.3-1.6,2.9-0.4,4.7c2,2.9,3.4,6.3,2.7,9.8c-0.8,3.8,0.3,6.7,2.8,9.4c0.4,0.3,0.9,0.7,1.3,1l0,0c0,0.9,0,1.7,1,2l0,0
+ c0,0.9,0.1,1.7,1,2l0,0c0,0.9,0.2,1.6,1,2l0,0c0.3,0.4,0.7,0.8,1,1.1c1.7,2.6,3.4,5.2,5,7.8c0,2.7,0,5.4,0,8.1
+ c-2.4,3.8-2,7.8-0.5,11.8c0.5,1.4,0.4,2.9,0.6,4.4c0.8,7.4,4.2,13.4,10.4,17.1c4.8,2.9,7.8,5.8,6.6,11.6c-0.2,0.8,0,1.7,0,2.5
+ c-0.2,3.2,1.3,4.5,4.5,4.5c4.8,0,9.6,0,14.3-1.6c1.5-0.5,3.5-1.3,4.6,0.2c0.9,1.2-0.9,2.3-1.4,3.4c-1.8,3.3-0.7,6.3,1.5,8.7
+ c2.3,2.5,5.1,1.2,7.2-0.4c2.9-2.2,4.1-0.6,5.2,1.8c3.5,7.4,7.5,8.6,14.6,4.7c2.6-1.4,4.9-3.7,8.1-4.2c0.6,2,0,3.5-0.4,5.2
+ c-1.9,8.8,1.3,11.9,10.1,9.7c1.1-0.3,2.2-0.7,3.3-1.1c5.1-1.6,9.7-4.4,14.5-6.7c2.8-1.4,4.3-0.9,4.9,2.3c0.6,3.3,1.5,6.5,3.1,9.4
+ c1.3,2.4,2.6,4.9,5.9,4.3c3.5-0.7,3.3-3.9,3.6-6.3c0.4-3.8-0.3-7.8,1.2-11.5c4.7,0.2,8.4,3.5,13,4.1c3.4,0.4,5.6,2,5.8,5.6
+ c0.1,1.8,0.1,3.6,0.2,5.5c0.6,12.3,2.1,13.6,14,11.6c-1.9,1.6-1.9,3.3-1.3,5.7c2.8,12.1,6.3,24,10,35.8c3.1,9.8,5.3,19.8,9.3,29.3
+ l0,0c0.3,0.7,0.7,1.3,1,2l0,0c0.3,1.7-0.8,3.9,1.9,4.5c1.3,10,2.9,20,3.9,30c0.5,5.4,3.5,10.5,2,16.1c-2.2,3.3-4.6,2.7-6.7,0.2
+ c-2.5-3-4.7-6.2-7-9.4c-0.5-2.2-1.8-4.1-2.2-6.5c-2.3-15.6-3.3-31.4-6.9-46.8c-4-16.8-7.2-33.7-14.4-49.6c-0.4-0.8-0.1-2.2-1.4-2.3
+ c-1.1-0.1-1.7,1-1.9,2c-1,5.3-3.2,10.5-1.7,16.2c2.6,10.3,5.1,20.6,6.1,31.2c1.1,11.3,6.7,21.6,8,32.8c1,8.4,3.8,16.1,7.3,23.7
+ c0.8,1.8,2.2,3.4,1.8,5.5c-0.7,1.2-1.7,2.2-1.7,3.7c-5.1,6-7.8,5.8-12.2-0.9c-2.8-4.3-4.3-9.2-5.8-14c0.2-1.7,0-3.3-0.4-4.9
+ c-6.3-25.2-12.4-50.5-20.2-75.4c-2.1-6.7-3.9-13.5-7.7-19.8c-2,1.9-2.3,3.6-1.9,5.8c2.8,18.5,7.7,36.6,12.3,54.7
+ c2.4,9.6,5.8,19,7.3,28.9c-1,4.5,1.4,8.7,0.8,13.2c-0.3,2,0.1,4.4-1.8,5.3c-2.2,1-3.4-1.3-4.8-2.6c-0.9-0.9-1.7-1.9-2.6-3
+ c0.8,7.9,6.9,16.3,13.4,17.4c7.5,1.3,14.5,4.1,21.8,6.1c1.9,0.6,3.7,1.3,5.7,1.8c7.5,1.9,14.6,6.5,22.2,6.2
+ c19-0.7,37.2,4.1,55.7,6.6c17.9,2.4,35.5,1.8,53.1-0.6c18.7-2.5,37.2-6.5,56.3-5.9c10,0.3,20.3-1.1,29.9-4.2
+ c12.6-4.2,24.7-9.9,37-15.1c6.3-2.6,7.4-10,1.5-13.6c-6.2-3.8-8.5-9-9.5-15.8c-0.7-5.3-3.3-10.3-9.2-10.9c-3.7-0.4-6.1-2.1-8.7-4
+ c-3.5-2.5-6.9-5.1-10.3-7.8c-6.9-5.6-13.7-11.5-24.3-8.6c14.7-35.1,27.7-70.6,45.5-103.9c5.9-8,10.3-16.8,15.1-25.4
+ c1.4-2.5,3.8-4.6,3.6-7.8c1.6-2.5,3.1-5.1,4.7-7.6c1.6-0.6,1.8-1.6,0.8-2.9c1.5-0.9,0.8-1.8,0-2.7c-2.1-2.4-4.1-4.9-6.2-7.3
+ c-2-3.6-0.7-6.7,1.3-9.7c1.5-2.4,2.9-4.8,4.1-7.4c1.6-3.3,0.4-5-2.8-5.9c-4.5-1.3-8.9-2.6-13.4-3.9c-2.3-0.7-4.9-1.5-5-4.1
+ c-0.2-4.2-2.5-7.1-4.7-10.2c-0.6-1.5-1.5-2.8-3.2-3c1.6-6.3-3.2-9.2-6.7-12.8c-2.4-2.5-1.7-5.6-1.2-8.5c0.6-3.6,1.8-7,2.8-10.6
+ c1-1.7,2.4-3.3,0.2-6.4c-0.2,2.3-0.3,3.4-0.3,4.5c-0.3,0-0.7,0-1,0c0-1.4,0.5-2.9-0.8-4.1c0-0.4-0.1-0.7-0.1-1.1
+ c-0.2-1.7,0.6-3.5-0.8-5l-0.1-0.2c-0.2-2.9,0.4-6.2-3-7.9c-0.4,0-0.7,0-1.1,0l0,0c-0.5-4.2-5-5.1-7-8c-0.5-7.2-6.1-10.4-11.3-13.7
+ c-8-5.1-17.8-6.7-25.5-12.4c-1.3-1.4-2.6-2.9-4.1-4.3c-8.6-8.4-17.6-16.7-23.7-27.2c-4.3-7.4-11-9.3-18.5-10.6c-1-0.6-2-1.3-3-1.9
+ c-1.1-2.3-3.3-3.2-5.4-4.2c-5.5-2.7-11.4-4.3-16.9-7.1c-9.6-5-17.8-12.8-28.9-14.9c-1.7-0.3-2.6-1.9-2.8-3.8
+ c-1.3-4.3-1.7-8.7-0.1-13.1c0.5-9.6,0.5-19.2,6.8-27.3c0.4-0.5,0.6-1.2,0.9-1.8c0.4-0.8,0.6-1.7-0.2-2.2s-1.6,0.1-2,0.9
+ c-1.2,2.1-3.1,3.9-3.5,6.5c-0.3,0.3-0.6,0.7-0.9,1l0,0c-1.4,0-1.9,1.1-2.5,2.1c-3,4.9-3.4,10.4-3.3,15.8c0.2,7.9-1.5,15.3-4.2,22.7
+ c-0.7,2-2,2.3-3.8,2.5c-5.2,0.7-10.5,1.2-15.6,2.3c-6.2,1.3-8.3,5.6-5.9,11.5c0.7,1.9,1.1,4.7,3.7,4.8c2.6,0.2,4.6-2.2,5.1-4.1
+ c1.9-7,6.6-8.3,12.9-7.6c1.5,0.2,3,0,4.5,0c9.8,0.2,14.9,5.5,15.3,15.4c0.1,3.4-0.8,4.8-4.4,4.6c-7-0.3-14-0.1-21,0
+ c-1.6,0-3.4-0.5-4.7,1c-0.7,0-1.3,0-2,0c-11.4-0.9-19.9-9.3-30.7-12c-1.1-0.3-1.7-1.9-0.8-2.3c3.9-1.6,1.7-4.3,1.5-6.7
+ c-0.1-1.6-0.3-3,1.7-4.2c6.7-4.2,13.7-7.8,19.5-13.7c5.9-5.8,13.5-9.9,19.2-16.2c1.1-1.2,3.2-2.1,1.8-4.6
+ c-11.6,9.3-23.5,18-37.4,23.5c-4.1,0.7-7.9,2.2-11.1,5.1c-3,0-5.7,1.3-7.8,2.9c-8.4,6.4-17.6,10.9-27.4,14.5
+ c-4.9,1.8-9.9,3.5-14.5,5.8c-7.8,3.9-12.8,10.9-18.2,17.3c-4.3,5.1-8.9,10.4-14.7,13.2c-7.5,3.5-15,7-22.4,10.7
+ c-4.3,2.2-9.1,4-11.8,8.6C133.6,146.2,133.3,146.6,133,147z"/>
+<path style="fill:#FFFFFF;" d="M156,405c-0.1-0.4-0.3-0.9-0.4-1.3c-0.1,0.1-0.4,0.2-0.4,0.3C155.5,404.3,155.7,404.7,156,405
+ c0.1,0.8,0.2,1.5,0.4,2.2c0.1-0.1,0.3-0.1,0.4-0.3C157.1,406.1,156.7,405.4,156,405z"/>
+<path style="fill:#FFFFFF;" d="M158.3,363.3c-0.6,13.8,30.6,108,37.7,113.3C184.1,438.5,177.3,399.2,158.3,363.3z"/>
+<path style="fill:#FFFFFF;" d="M160,416.7c2.4,10.3,6.3,20.3,7.5,30.7c1,8.3,3.7,15.7,7.3,23c0.7,1.4,1,3.9,3,3.2
+ c2.1-0.7,1.2-3.2,0.9-4.9C175.2,450.5,166,434.2,160,416.7z"/>
+<path style="fill:#FFFFFF;" d="M154.9,440.7c1.1,4.6-1.3,9.5,1.6,13.9c4.7,7.2,6.8,9.6,9.3,10.6
+ C161.3,457.3,159.4,448.5,154.9,440.7z"/>
+<path style="fill:#FFFFFF;" d="M153.4,398.4c0.1-0.3,0.1-0.5,0.2-0.7c-0.1,0-0.2,0.1-0.4,0.1C153.3,398,153.3,398.1,153.4,398.4z"/>
+<path style="fill:#FFFFFF;" d="M154.4,401.3c0.4,0,0.5-0.2,0.2-0.5c0,0-0.2,0.1-0.4,0.1C154.3,401,154.3,401.1,154.4,401.3z"/>
+<path style="fill:#FFFFFF;" d="M157.8,409.9c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1,0.1-0.2,0.2-0.3,0.3c0.1,0.1,0.3,0.3,0.4,0.4
+ C157.7,410.2,157.7,410,157.8,409.9z"/>
+<path style="fill:#F7E3E5;" d="M261.9,67.9c13.9-5.5,25.8-14.2,37.4-23.5c1.4,2.5-0.7,3.4-1.8,4.6c-5.7,6.3-13.4,10.4-19.2,16.2
+ c-5.9,5.9-12.8,9.5-19.5,13.7c-2,1.2-1.8,2.6-1.7,4.2c0.2,2.4,2.4,5.1-1.5,6.7c-0.9,0.4-0.3,2,0.8,2.3c10.8,2.7,19.3,11.1,30.7,12
+ c-0.3,2.4,1.2,2.7,3.1,3.3c1.7,0.6,4.5-0.3,5,2.7c-0.5,2.7,1.4,3.9,3.1,5.2c2.2,1.7,4.5,3.3,6.8,4.9c-0.1,2.6-1.6,2.1-3.5,1.9
+ c-1.9-0.2-3.9-2.1-6.7,0.2c7.9,2.4,15.2,4.6,22.5,6.7c17.3,5,35,8.2,52.5,12.1c6,1.4,7.6,3.4,8.1,9.8c-15.4-0.4-30.7-2.2-46.1-0.1
+ c-0.4-0.5-0.7-0.3-0.9,0.2c-0.1,2,1.6,2.4,2.9,2.8c10.9,3.4,21.9,6.1,33.1,8.2c0.5,0.8,1.2,0.9,2.1,0.8h0.1
+ c-5.6,1.7-11.7,1.1-17.1,3.7c1.1,0.5,1.3,0.7,0.9,1.5c-1.6-0.2-3.3-0.2-4.9-0.5c-13-2.7-25.8-5.7-38.9-7.7c-3-0.5-7.4-2.4-8.3,0.4
+ c-0.7,2.2,4.5,2.9,7.3,3.6c16.1,4.2,32.6,5.5,48.9,8.3c1.4,5.3,7.2,3,10,5.8c-13.3,0.4-26.6,0.8-39.8,1.2c0.3-0.9,2.1-2-0.8-2.3
+ c-5.2-0.5-10.5-1.3-15.6-2.6c-20-4.9-39.4-11.4-58.1-20.1c-11.5-5.3-23.2-10.4-31.7-20.3c-1.2-3-2.7-6-3.6-9.1
+ c-1.4-4.7,0.7-6.9,5.2-5.4c3.9,1.3,4.7-0.3,4.8-3.5c1.5,0,3,0.1,4.3,0.9c6.5,4,13,7.9,19.5,11.8c7.4,4.3,14.6,8.8,23.2,10.7
+ c15.3,3.3,30.6,7.2,45.9,10.4c2.6,0.5,5.5,2.5,9.1-0.1c-8.9-3.7-17.6-6-25.9-9.5c-10.5-4.4-20.4-8.9-27.1-18.9
+ c-2.3-3.4-5.8-6.2-10.5-7.8c-8.8-2.9-17.6-5.9-25.5-10.9c-5.2-3.3-9.9-3-14.9,0.7c-1.4,1-2.5,2.2-2.4,4.1c-2.4,2.8-6.1,4.4-8,7.8
+ c-3-2.6-5.5-0.1-8.3,0.6c-4.4,1.3-7.1,5.2-11.2,7c0.3-1.6,0.6-3.2,1.5-4.7c2.4-4.1,2.4-4.9,1.2-10.1c-5,5.4-8.7,11.7-12.4,17.9
+ c-1.3,2.1-2.3,4.6-1.8,7.1c1.7,7.9,0.2,16.2,2.8,24c-1,0.6-1.4,1.9-2.8,1.9c-4.2,0.1-3.5,1.9-1.5,4.2c1,1.1,1.7,2.4,2.8,3.5
+ c9.7,9.7,22.1,15.4,33.7,22.4c1.6,0.9,3.3,1.8,5.3,1.3c-0.1-1.4-1.1-1.6-1.8-1.9c-8.7-4-16.3-9.5-23.5-15.8
+ c-1.2-1.1-2.2-2.6-4.1-2.6c-2.8-0.1-3.5-2.2-4.1-4.3c1.2-1.7-0.3-2.6-1.2-3.7l0.1,0.1c-0.9-3.7-2.1-7.3-2.5-11.1
+ c-0.6-5.8,0.6-11.2,5.3-16.1c1.4,7.4,3.1,13.9,9.2,18.1l0,0c0.1,1.9,1.3,2.8,3,3l0,0c0.3,0.3,0.7,0.7,1,1c3.3,1.6,5.1,4.9,8.2,6.9
+ c10.2,6.5,20,13.5,30.2,19.9c5.5,3.4,11.2,6.8,18.1,7.8c-0.1-2.3-3-1.9-3-4.3c4.4-1,9.2,0.5,13.6-0.9c2.7-0.8,5.1-0.2,7.7,0.9
+ c9.5,4.3,18,10.4,27.9,14c5.9,2.1,11.3,5.4,17.8,5.8c-8-7-16.3-13.5-25.8-18.3c-8.4-4.3-16.2-9.9-24.9-13.4
+ c-9.1-3.7-19.1-5.3-28.5-8.4c-6.9-2.3-11.7-7.5-16.5-13c2.2-1.1,3.1,0.1,4.3,0.6c6.5,2.8,12.5,7.1,19.6,8.2
+ c23.2,3.5,44.9,12.4,67.4,18.2c0,1.4,0.9,2.1,2.1,2.5c6.1,2.1,12,4.8,18.5,5.5c10.9,1.2,21.2,5.8,32.3,6.3c0.4,0,0.7,1,1.1,1.5
+ c-0.8,0.2-1.4,0.6-2,1.3c-5.1,6.5-7.1,6.6-13.9,1.7c-1.3-0.9-2.7-3.3-4.5-1.6c-1.5,1.5-0.1,3.4,0.6,5c2.6,5.6,7.2,9.8,10.9,14.6
+ c-2,1.9-4.6,1.4-6.6,0.9c-7.5-2.1-15.3-2.7-22.8-4.3c-20.6-4.4-41.7-6.2-62.2-11.4c-1.5-0.4-3.3-0.7-4.6,1c-8-3-16-6-24-9
+ c2.5,3,5.9,4.3,9.2,5.7c33.4,14.2,67.9,25.1,103.4,32.6c1.7,0.4,5-0.4,5,2c0,2.7-3.3,2.8-5.4,3.4c-1.1,0.4-2.3,0.2-3.5,0.2
+ c-10.6,0.7-20.8-1.3-31.1-3.7c-15.9-3.8-31.1-9.5-46.6-14.6c-1.4-0.9-2.7-2-4.7-1.4c1.3,1.3,2.8,1.6,4.2,2
+ c24.1,13.9,50.8,19.9,77.6,25.5c11.8,2.4,23.8,4.1,35.7,6.1c0.3,2.3,2.4,2.3,3.9,3.1c4.1,2.1,9,2.8,12,6.8c-0.7,0-1.3,0-2,0
+ c-0.9-1-2-0.8-3.1-0.7c-6.1-0.4-12.2-0.8-18.3-1.2c0,0.3-0.1,0.6-0.1,0.9c11.8,2.7,23.7,5.5,35.5,8.2c-1.7,1.7-3.7,1-5.5,0.7
+ c-5.5-1.1-10.6-0.1-15.5,2.4c-1.6-0.2-3.3-0.2-4.9-0.5c-14.2-2.2-28.4-4.5-42.6-6.6c-15.5-2.3-31.2-3.5-46.8-4.7
+ c-1.4-0.1-3-0.6-4.1,1.2c2.7,1.3,5.4,2.6,8.4,2.7c0.4,0.3,0.7,0.5,1.1,0.8c0.6,0.1,1.2,0.1,1.9,0.2c0,1.7,0.7,2.4,2.5,3
+ c4.2,1.4,8.3,3.2,11.7,6.3c2.9,2.7,2.7,4.4-1,6c-10.2,4.4-20.9,7.2-31.4,10.5c-4.1,1.3-8,4-12.8,3.1c-0.1-2,0.3-4-0.5-5.9
+ c-1-2.3-2.4-3.6-5-2.7c-9.7,3.3-19.3,6.9-29.1,10.2c-13.5,4.5-27.1,7.5-41.6,6.3c0.5-0.4,0.7-0.7,1-0.7c15.6-0.6,29.3-7.1,43.2-13.1
+ c2.9-1.3,4.7-2.9,2.7-6.8c-7.5-15.1-14.8-30.3-25.6-43.3c-7-8.4-13.3-17.3-20.9-25.2c-2.6-2.7-4.7-5.8-7-8.7c0.3-0.3,0.6-0.5,1-0.8
+ c6.6,5.2,13.3,10.3,19.9,15.5c1.4,1.1,2.8,3.1,4.7,1.6c2-1.6,3.6-0.3,5,0.4c4.9,2.5,9.5,5.3,14.4,7.9c3.7,1.9,7.5,3.6,11.2,5.3
+ c-7.7-7.8-17.8-11.9-25.5-19.5c20.4,11.5,40.7,22.9,63.5,28.9c-5.4-3.1-11-5.6-16.6-8.4c-12.5-6.2-25.1-12.1-37.1-19.4
+ c-17.1-10.3-34-20.7-48.8-34.1c-7.8-7.1-15.7-14.4-17.6-25.7c-0.4-2.5-2.1-4.1-4-4.6c-3.9-0.9-7.2-3.2-10.9-4.4
+ c-1.8-0.6-3.3-0.5-4.6,0.7c-1.5,1.4-0.1,2.8,0.4,4.1c3.9,8.8,7.2,17.8,11.9,26.2c6.6,12,13,24.2,23,33.8c5.3,5.1,9.8,10.7,13.8,16.8
+ c8,12.2,14,25.5,21.6,37.9c0.4,0.7,0.8,1.6,0,2.3c-0.8,0.7-1.6,0-2.1-0.6c-8.7-9.2-19-17-24.6-29c-4.4-9.4-9.1-18.7-15.1-27.2
+ c-2.1-3-3-6.6-5.8-9.2c-1.5-1.3-2.5-1.5-3.5,0.3c-0.6,1.1,0.1,3.1-1.9,3c-1.8-0.1-1.8-2.1-2.5-3.4c-5.3-10.1-10.3-20.4-17.6-29.3
+ c-0.9-1.1-1.4-2.6-2.9-2c-8.4,3-19.3,2.1-22.5,13.7c-0.3,1.2-1,2.3-2.4,1.8c-1.3-0.5-2.4-1.5-2.3-3c0.1-0.9,0.8-1.8,1.2-2.6
+ c0.9-1.7,0.7-3.2-0.6-4.6c-1.4-1.5-2.7-1.2-4.5-0.6c-5.3,2-8.5,6.7-13.1,9.6c-1.3,0.8-2.8,2.2-1.8,4.2c1,1.8,2.8,1.7,4.4,1.3
+ c3.7-0.8,7.4-1.8,11.1-2.6c3.4-0.8,5.6,0.1,5.1,4.2c-1.4,1.4-2.7,2.9-4.1,4.3c-3.1,3.2-6.4,6.3-6.1,11.4c-4.4-1.3-8.8-2.8-12.1-6.2
+ c0.4-1.6,0.7-3.2,1.1-4.8c0.5-1.9-0.3-3.3-1.8-4.3c-1.9-1.2-2.7,0.7-3.5,1.7c-5.2,5.9-7.9,12.9-8.8,20.7c-3.1,0.7-2,4-3.5,5.7
+ c-3.3,3.8-2.3,7.7-0.4,12c3.7,8.3,8.9,15.6,14.4,22.5c4.5,5.7,9.7,11,16.1,15.3c5.3,3.5,11,6.6,15.4,11.5c1.7,1.9,2.4,3.3,0.4,5.3
+ c1.9,4.4,5.9,6,9.9,7.6l0.1,0.1c3.6,4.3,8.4,7,13,9.8c1.8,5,3,11,8.7,12.5c7.4,2,14.2,5.4,21.8,6.7c8,1.4,16.1,2,24,3.6
+ c2.7,0.6,5.9,1.9,10.3,0.2c-11.6-2.9-21-7.8-30.8-11.9l0,0c4.7-0.6,8.9,1.3,13.1,2.6c17.2,5.3,34.7,6.4,52.6,4.4
+ c14.3-1.6,28.4-4.1,42.8-5.3c3.3-0.3,7-0.1,10.3-1.4c1.6-0.6,3.4-1.1,3.8-2.8c0.5-2-1.4-2.8-2.8-3.6c-3.9-2-7.9-4-11.8-5.9
+ c0.9-0.9,2.1-0.8,3.3-0.9c9.3-1.3,18.6-2.8,28-3.7c11.7-1.1,23.1-4,34.9-4.2c7.4,3.5,13.1,9,16.9,16.1c2.8,5.2,0.4,8.3-5.4,9
+ c-6.1,0.7-12.2,0.6-18.3,1.1c-13,1.1-25.9,2.7-38.9,3.7c-13.6,1.1-27,2.2-39.7,7.7c-4.7,2-9.6,3.4-14.5,4.8
+ c-7,2.1-14.1,3.9-21.2,5.9c-1.6-0.4-3-1.1-4.7-1.4c-10.5-1.5-20.9-3.4-31.4-4.9c-7.8-1.1-15-3.9-22.5-6.2c-1.1-0.3-3.3-2.4-3.2,1.1
+ c-7.8-0.7-15.1-2.5-21.1-7.9c1.6-0.7,2.2-1.9,1.9-3.6c-0.1-0.8-0.6-1.2-1.4-1c-5.4,1.8-7.8-2.1-10.5-5.4c1.3,0,2.7,0,4,0
+ c0.4,0.4,0.8,0.9,1.2,1.3c0.1-0.2,0.3-0.4,0.4-0.6c-0.5-0.2-1.1-0.5-1.6-0.7c-1-1.1-1.8-2.4-2.9-3.4c-10.9-9.4-22.2-18.4-33.1-27.9
+ c-14.4-12.5-29.3-24.4-44-36.5c-4.4-3.6-6.7-7.6-6.1-13.6c0.6-5.8,1.6-11.4,4.1-16.7c2.4-5.2,6.3-9.6,9.8-13.9
+ c8.6-10.4,17.2-21,27.5-29.8c7-5.9,13.2-12.4,19.2-19.2c1.5-1.7,2.8-3.9,5.4-4.1c0.3-0.3,0.7-0.6,1-1l0,0c0.8,0,1.6-0.1,2-1l0,0
+ c0.3-0.3,0.6-0.7,1-1l0,0c0.3-0.4,0.6-0.8,1-1.2c2.7-4.6,7.4-6.4,11.8-8.6c7.4-3.7,14.9-7.2,22.4-10.7c5.8-2.8,10.4-8.1,14.7-13.2
+ c5.5-6.4,10.5-13.4,18.2-17.3c4.7-2.3,9.6-4,14.5-5.8c9.8-3.5,19-8.1,27.4-14.5c2.1-1.6,4.9-2.9,7.8-2.9c1.1,0,2.6,0.5,3.3,0
+ C256.7,71.2,261.3,72.5,261.9,67.9z"/>
+<path style="fill:#E794A1;" d="M419,270c-11.8-2.7-23.7-5.5-35.5-8.2c0-0.3,0.1-0.6,0.1-0.9c6.1,0.4,12.2,0.8,18.3,1.2
+ c0.9,0.9,1.9,0.9,3.1,0.7c0.7,0,1.3,0,2,0.1c10.9,0.2,21.9,1.6,32.7,0.1c10.9-1.5,19.3-7.7,25.7-16.2c2.4-3.2,1.6-7.6-1.6-9.9
+ c-3.2-2.2-5.5,1.6-8,3.2c-0.9,0.6-1.4,1.8-2,2.8c-5.2,8.4-12.9,11.9-22.5,12.3c-13.5,0.6-26.8-1.5-40.2-2.1
+ c-11.9-2-23.9-3.7-35.7-6.1c-26.8-5.5-53.5-11.6-77.6-25.5c0.2-0.2,0.4-0.4,0.5-0.7c15.4,5.1,30.7,10.8,46.6,14.6
+ c10.2,2.4,20.5,4.4,31.1,3.7c1.2-0.1,2.4,0.1,3.5-0.2c2.1-0.7,5.4-0.8,5.4-3.4c0-2.4-3.3-1.7-5-2c-35.5-7.5-70-18.4-103.4-32.6
+ c-3.3-1.4-6.7-2.7-9.2-5.7c8,3,16,6,24,9c13.7,6.2,28,10.2,42.4,14.1c16.6,4.6,33.4,8.5,50.5,11c1.3,0.2,2.6,1.1,3.2-1
+ c1.1-3.5,2.8-6.9,0-10.3c-3.7-4.9-8.3-9-10.9-14.6c-0.7-1.6-2.2-3.6-0.6-5c1.8-1.8,3.2,0.6,4.5,1.6c6.8,4.9,8.8,4.8,13.9-1.7
+ c0.6-0.7,1.2-1.1,2-1.3c1.8,0.3,3.7,0.3,5.3,1c13.3,4.9,26.7,9.8,39.9,15c13,5,28.3-0.8,34.9-13.5c1.2-0.2,2-0.9,2-2.2v0.1
+ c2.6-0.8,2.8-3.1,2.9-5.2c0.1-2.3-0.3-4.7,0-6.9c0.3-2.9,1.4,0.2,2.1-0.1l0.1,0.2c0.1,1.7-0.7,3.5,0.8,5c0,0.4,0.1,0.7,0.1,1.1
+ c0,1.4-0.5,2.9,0.8,4.1c0.3,0,0.7,0,1,0c0,0.6,0.1,1.3,0.1,1.9c-0.9,3.5-2.1,7-2.8,10.6c-0.5,2.9-1.2,6,1.2,8.5
+ c3.5,3.6,8.3,6.5,6.7,12.8c0.6,1.6,1.5,2.8,3.2,3c2.1,3.1,4.5,6.1,4.7,10.2c0.1,2.7,2.7,3.5,5,4.1c4.5,1.3,8.9,2.6,13.4,3.9
+ c3.2,0.9,4.4,2.6,2.8,5.9c-1.2,2.6-2.5,5-4.1,7.4c-2,3-3.3,6.2-1.3,9.7c-3.6,2-7.1,3.9-10.7,5.9c-0.4,0.3-0.9,0.7-1.3,1
+ c-4,3.1-4.9,7.4-5.1,12.1c-2.1-0.8-4.1-1.6-6.2-2.4c1.4,2.3,3.4,4,4.4,6.4c-5,4.1-10.5,7.7-16.1,11c-0.7,0.3-1.3,0.7-2,1h0.1
+ c-1.7-0.3-3.4-0.6-5.2-0.9c-0.2,1.9,1.9,1.7,2.3,3c-6.5,4.3-13.3,8.3-19.5,13c-3.5,2.7-7.3,3.9-11.4,5.2c-3.3,1-6.6-1.3-9.7,0.6
+ l-0.2-0.2l-0.3,0.1c-3.1-0.1-6,1.3-7.1,3.6c-3.1,6.2-8.4,5.5-13.8,5.5c-2.7,0-5.5,0.8-8.2,1.2c-2.3,0.4-4.5,1.1-6.2,2.8
+ c-4,3.3-8.4,4.9-13.7,4.2c-1.1-0.1-2.3,1.1-3.4,1.6c-4.6-4.8-7.4-0.4-10.5,2.1c-1.2-1.2-2.4,0.8-3.6,0.2c-4.1,0.4-8.4-0.6-12.5,0.6
+ c-6.3-1.6-13.1,0.3-19.3-2.6c7.9-2.3,16.2-0.5,24.2-1.9c10.2-1.8,20.7-1.7,30.7-5.8c10.4-4.3,21-8.2,32-10.8
+ c6.3-1.5,12.6-2.9,18.8-4.7c2.8-0.8,5.6-2.2,5.5-6.1c-0.1-3.6-2.6-4.9-5.4-5.7c-5.3-1.5-10.6-2.7-15.9-4.1c-5-1.3-10.1-2.7-15.1-4.1
+ c9.8-1.9,19.6-2.5,29.2-4c10.3-1.6,20.7-2.5,30.7-5.8c1.2-0.4,2.9-0.6,2.9-2.2c0-1.5-1.3-2.3-2.5-2.8c-1.5-0.7-3.1-1.3-4.7-1.7
+ c-9.6-2.1-19.5-1.9-29.3-2c-9.7-0.1-19.5,1.5-29,3.7c-9.6,2.2-19.3,4.1-29,6.1c-11.8,0.2-23.2,3.1-34.9,4.2
+ c-9.4,0.9-18.7,2.5-28,3.7c-1.1,0.2-2.3,0-3.3,0.9c-1.3,0.1-2.6,0.2-3.9,0.3c-0.3,0-0.7,0-1,0c-9.2,1-18.5,1.9-27.7,3
+ c-25,3-50,4.3-75.2,3.7c-11.7-0.2-23.2-1.5-34.1-6.1c-4.6-2.9-9.4-5.5-13-9.8c5.5,2.3,11,4.6,16.8,6c29.3,7.4,59.1,8.2,89,5.6
+ c10.1,0,20.1-1.7,30.2-2.6c16.3-1.5,32.6-3.9,48.7-6.9c18.6-3.5,37-7.4,55.5-11.3c6.7-1.4,13.3-3.3,21-5.2
+ c-15.5-2.6-29.7-4.9-43.9-7.4c-14.8-2.6-29.6-5.4-44.5-8.1c-0.6-0.1-1.2-0.1-1.9-0.2c-0.4-0.3-0.7-0.5-1.1-0.8
+ c-3.1-0.1-5.7-1.4-8.4-2.7c1-1.8,2.6-1.3,4.1-1.2c15.7,1.2,31.3,2.4,46.8,4.7c14.2,2.1,28.4,4.4,42.6,6.6c1.6,0.3,3.3,0.3,4.9,0.5
+ c0.4,0.3,0.8,0.7,1.2,0.8c12.6,2.1,25.3,3.6,37.7,6.3c14.5,3.1,27.9,0.9,41.1-5c4.3-1.9,5.9-5.5,7.4-9.4c0.7-1.7-0.2-2.6-1.9-2.5
+ c-1.5,0-3,0.1-4.4,0.4C459.3,267.6,439.4,271.3,419,270z"/>
+<path style="fill:#7A7A7A;" d="M378.8,342c1.7-1.7,3.9-2.4,6.2-2.8c4.1,3,9.1,4.3,12.9,7.9c2.3,2.2,4.3,6.8,7.5,5.4
+ c3.1-1.3,2.1-6.1,2.6-9.5c0.8-5.2,0.2-11.1,6.1-14.2l0.3-0.1l0.2,0.2c5.9-0.1,10.6,3.3,15.8,5.4c3,1.2,6.7,3.5,9.1,0.2
+ c2.3-3-0.9-5.8-2.6-8.3c-0.2-0.2-0.1-0.6-0.2-1c7.6,1.4,14.9,3.4,22.5,4.1c5,0.5,7.2-1.1,7.9-5.8c0.8-5.6-0.3-9.8-6.3-11.6
+ c-1-0.3-1.8-1.3-2.7-2c0.1-0.6,0.1-1.2,0.2-1.9h-0.1c0.5,0,1-0.1,1.6-0.1c7.6-0.3,15.3,2,22.9-0.6c0.3,0.3,0.5,0.5,0.8,0.8
+ c-2.4,4.4-5.1,8.6-7.2,13.1c-17.7,39-36.4,77.6-51.8,117.6c-3.2,8.2-8.1,13.9-16.4,17.6c-7.9,3.4-15,8.5-22.4,13
+ c-8.9,5.5-16.7,12.4-26.7,16.4c-22.8,9.2-45.3,19.1-70.3,21c-8.1,0.6-16.1,3.1-24.2,1.1c-6-1.4-11.9-3-17.9-3.9
+ c-1.3-0.2-2.3-0.5-2.5-2c-0.5-4-3-6.9-5.1-10c2.2-0.1,2.2-1.2,1.7-3c-0.6-2.3-1.4-4.8,0.5-7c2.3,3.1,4.5,6.4,7,9.4
+ c2.1,2.5,4.6,3.1,6.7-0.2c1.6-1.1,2-0.3,2.7,1.2c0.7,1.6,2.1,3.3,4.2,2.1c1.7-1,3.7-2.3,3.1-5c-0.2-0.9-0.3-1.9-0.5-2.8
+ c3.7,0.7,4.7,4.4,7,6.6c5.3,5.1,8.2,4.8,12-1.4c0.8,0,1.5,0,2.3-0.1c5.6,0,10.9-0.9,14.4-6c1.8,1.7,2,4,2.2,6.3
+ c0.1,1.2,0.8,1.7,1.9,2c0.9,0.2,1.3-0.6,1.3-1.1c0.4-4.3,3.2-4.7,6.6-4.1c7.7,5.6,8.4,5.5,12.9-1c0.6-0.3,1.3-0.9,1.8-0.7
+ c5.7,1.7,7.8-1.8,9.2-6.3c3.5-11.4,3.6-23.5,6.5-35c1.2,0.5,0.2,3.1,2.3,2.9c0.4,0.9,0.9,1.8,1.2,2.7c2.3,6.3,3.2,6.5,8,2.3
+ c0.3,6.3-3.2,11.9-3.9,19.3c0.9-1.6,1.2-2,1.4-2.4c8.2-22.7,15.6-45.7,22.7-68.8c3.1-9.8,4.6-19.6,3.1-29.8
+ c-0.7-2.9,1.1-5.6,0.7-8.5c1-2.3,0.2-4.6,0.1-6.8c1.5-2.3,1.3-4.6-0.1-6.9C377.7,347.3,377.5,344.5,378.8,342z M392,454
+ c0.4-0.9,0.8-1.8,1.3-2.7c15.3-35.7,30.5-71.4,45.7-107.1c0.5-1.1,1.8-2.7,0.3-3.6c-1.9-1.1-2.5,1.1-3.2,2.3
+ c-4.8,8.5-8.8,17.5-12.7,26.5c-11.4,26.7-23.8,53-30.9,81.3C392.4,451.8,392.2,452.9,392,454c0,0.1-0.1,0.2-0.2,0.3
+ C391.9,454.2,391.9,454.1,392,454z M450,348c-1.5,0.8-1.8,2.3-2.1,3.9c-0.7,1.3-1.5,2.6-2.2,3.9c-13.8,25.5-23,52.9-33.5,79.8
+ c-0.7,1.9-2.4,3.7-1.7,7.1c1.1-2.4,1.9-3.8,2.5-5.3c6.2-14.7,12.5-29.3,18.7-44c5.7-13.6,11.1-27.3,16.7-41
+ C449.3,351,450.1,349.7,450,348c0.3-0.3,0.5-0.7,0.8-1c-0.2-0.1-0.4-0.2-0.5-0.4C450.2,347.1,450.1,347.5,450,348z M403.3,362.9
+ c-8.2,13.7-30.6,81.4-27.7,96.7C385.5,427.2,396.7,395.7,403.3,362.9z M406.6,450.6c-0.1,0-0.3,0-0.3,0.1c-0.1,0.1-0.1,0.3-0.1,0.4
+ c0.2,0,0.4-0.1,0.6-0.1C406.7,450.9,406.7,450.7,406.6,450.6z M451.6,343.8c-0.1,0-0.2,0-0.2,0.1c-0.1,0.1-0.1,0.3-0.1,0.4
+ c0.2,0.4,0.3,0.3,0.4-0.1C451.7,344.1,451.7,344,451.6,343.8z M409.8,444c-0.1-0.3-0.2-0.6-0.3-0.8c-0.1,0.1-0.3,0.2-0.3,0.4
+ c0,0.3,0.1,0.6,0.1,0.9C409.5,444.3,409.7,444.2,409.8,444z M407.9,448.3c-0.1-0.3-0.2-0.5-0.3-0.8c-0.1,0.1-0.4,0.2-0.4,0.3
+ c0.1,0.3,0.2,0.6,0.3,0.8C407.6,448.5,407.8,448.4,407.9,448.3z"/>
+<path style="fill:#272424;" d="M238.8,492c2.1,3.1,4.6,6.1,5.1,10c0.2,1.5,1.2,1.8,2.5,2c6.1,0.9,12,2.5,17.9,3.9
+ c8.1,1.9,16.2-0.5,24.2-1.1c25-1.9,47.5-11.8,70.3-21c9.9-4,17.8-10.9,26.7-16.4c7.4-4.5,14.5-9.6,22.4-13
+ c8.3-3.6,13.2-9.4,16.4-17.6c15.5-40,34.1-78.6,51.8-117.6c2.1-4.5,4.8-8.7,7.2-13.1c0.4-0.3,0.8-0.5,1.2-0.8
+ c0.3,0.3,0.6,0.5,0.8,0.8c-2.3,6.4-6.9,11.9-8.3,18.7c-17.8,33.3-30.8,68.8-45.5,103.9c10.6-2.9,17.4,3,24.3,8.6
+ c3.3,2.7,6.8,5.3,10.3,7.8c2.6,1.9,5.1,3.6,8.7,4c5.9,0.7,8.4,5.6,9.2,10.9c0.9,6.8,3.2,12,9.5,15.8c5.9,3.5,4.8,10.9-1.5,13.6
+ c-12.3,5.2-24.4,10.9-37,15.1c-9.5,3.1-19.8,4.6-29.9,4.2c-19.1-0.6-37.6,3.3-56.3,5.9c-17.6,2.4-35.2,3.1-53.1,0.6
+ c-18.5-2.5-36.7-7.3-55.7-6.6c-7.6,0.3-14.7-4.3-22.2-6.2c-1.9-0.5-3.8-1.2-5.7-1.8c0.4-3.7,3.4-6.9,1.9-10.9
+ c-0.1-1.5,1-2.6,1.7-3.7C237.5,488.8,237.2,491.2,238.8,492z"/>
+<path style="fill:#F5CFD6;" d="M295,110c-0.4-3-3.3-2.1-5-2.7c-1.8-0.7-3.4-0.9-3.1-3.3c0.7,0,1.3,0,2,0c5.6,1,11.2,2.3,16.9,2.9
+ c15.1,1.8,30.3,2.9,44.8,8.1c1.3-3.3-1.5-5.1-2.4-7.3c-4.5-10.6-11.1-19.4-23-22.5c-6.3-1.6-11.4-5.9-18.2-7.5
+ c4.3,0.1,5.8-1.2,4-5.1c-0.5-1.1-0.4-2.7,0.9-3.6c0.2,1.8,1.1,3.4,2.8,3.8c11.1,2.2,19.3,9.9,28.9,14.9c5.5,2.9,11.4,4.4,16.9,7.1
+ c2.1,1,4.3,1.9,5.4,4.2c-6.9-1.6-13-5.8-20.4-6.3c16.6,11.8,32.6,24.2,47.7,37.8c-3.4-9-8.9-16.4-16.2-22.5
+ c-2.8-2.3-5.4-4.8-8.1-7.1c7.5,1.2,14.2,3.2,18.5,10.6c6.1,10.5,15.1,18.7,23.7,27.2c1.4,1.4,2.7,2.9,4.1,4.3
+ c-5.2-0.8-9.7-3.6-13.6-6.8c-6.3-4.9-13.8-2.3-20.5-4.1c-0.6-0.2-1.4,0-1.6,0.8c-0.2,0.8,0.2,1.3,0.8,1.6c5.4,2.7,10.6,6.2,16.9,6.4
+ c9.4,0.3,15,6.1,19.8,13c-9.1-1-17.8-4.1-27.1-3.9c11.2,3.9,22.6,7.5,33.9,10.9c2.4,0.7,4.6,1.6,2.1,4.2c-1.3,1.4-3.5,2.5-5.9,1.3
+ c-4-2.1-8-4-12-6c-9.5-4.7-19.2-8.9-30.1-9.5c-0.5-6.4-2.1-8.4-8.1-9.8c-17.5-4-35.2-7.2-52.5-12.1c-7.3-2.1-14.6-4.3-22.5-6.7
+ c2.8-2.3,4.7-0.3,6.7-0.2c1.8,0.1,3.4,0.6,3.5-1.9c1.5-0.6,0.7-2.6,1.9-3.3c1,5.6,4.7,8.8,8.5,6.7c4.2-2.3,8.4-1.2,12.6-1.3
+ c1,0,2.4,1.3,2.8-0.6c0.3-1.3-0.8-1.9-1.9-2.5c-5.6-3.4-11.5-5.6-18-6.2C305.6,111.9,300.3,111,295,110z M343.1,91.8
+ c0.1-0.1,0.2-0.2,0.3-0.2c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1,0.1-0.3,0.3-0.4,0.4C342.8,91.7,343,91.7,343.1,91.8z"/>
+<path style="fill:#BDBCBC;" d="M154.9,325c6,5.5,13.3,7.2,21.1,7.9l0,0c1.4,1.9,3.3,2.2,5.5,2l0,0c0.8,0.9,1.8,1.1,3,1
+ c1.5,0,2.6,0.4,3,2c1.6,1.3,3.4,2.3,5.5,2l0,0c0.3,1,1.1,1.2,2,1l0,0c-1.4,3.7-0.7,7.7-1.2,11.5c-0.3,2.5-0.1,5.7-3.6,6.3
+ c-3.3,0.6-4.6-1.9-5.9-4.3c-1.6-3-2.5-6.2-3.1-9.4c-0.6-3.3-2.1-3.7-4.9-2.3c-4.8,2.3-9.3,5.2-14.5,6.7c-1.1,0.3-2.2,0.8-3.3,1.1
+ c-8.7,2.1-12-0.9-10.1-9.7c0.3-1.6,1-3.2,0.4-5.2c-3.2,0.4-5.5,2.7-8.1,4.2c-7.2,3.9-11.2,2.7-14.6-4.7c-1.1-2.4-2.3-4-5.2-1.8
+ c-2.2,1.6-4.9,2.9-7.2,0.4c-2.2-2.4-3.2-5.4-1.5-8.7c0.6-1.1,2.4-2.2,1.4-3.4c-1.1-1.5-3.1-0.7-4.6-0.2c-4.7,1.5-9.5,1.5-14.3,1.6
+ c-3.1,0-4.7-1.3-4.5-4.5c0.1-0.8-0.1-1.7,0-2.5c1.1-5.8-1.8-8.8-6.6-11.6c-6.2-3.7-9.6-9.8-10.4-17.1c-0.2-1.5-0.1-3.1-0.6-4.4
+ c-1.5-4.1-1.9-8,0.5-11.8c2.8,0.5,4,3.9,7,4.1c1,1.8,2.1,3.7,3.1,5.5c0.3,0.1,0.6,0.2,0.9,0.4L84,281c0.4,0.6,0.9,1.1,1.3,1.7
+ c1.5,1.9,2.5,4.2,4.8,5.4L90,288c0.7,1.1,1.5,2.3,2.2,3.4c0.6,2.4,1.8,4.4,4.7,4.4c0.1,0.1,0.2,0.3,0.3,0.4c-0.2,1.5,0.7,1.8,2,1.8
+ c3,2,6.2,3.4,9.7,4c2.3,2,4.9,3.8,7.8,3.9c5.8,0.3,10.5,3.3,14.7,6.3C138.7,317.6,146.8,321.3,154.9,325z"/>
+<path style="fill:#110D0E;" d="M315.8,348.1c6.2,2.9,12.9,1,19.3,2.6c4.2,0.4,8.4,1.3,12.5-0.6c1.2,0.6,2.3-1.3,3.6-0.1
+ c-2.1,3.3-3,6.8-3.1,10.7c0,5.6-2.6,7.9-8,7c-6.7-1.1-13.1-3.1-17.9-8.5c-2-2.2-4.3-4.2-6.7-5.9c-5.9-4.3-9.6-3.1-12.6,3.8
+ c-2.3,3.9-4,8.3-7.9,11c-6.4,1.8-9.1,0.2-13.3-7.9c-1,0.7-1.3,1.8-1.6,2.8c-4.2,5-8.8,9.6-15.2,11.8c-8.5,0.2-12.9-5.5-16.7-11.8
+ c-1.7-2.8-3.1-4.1-6-1.8c-4.7,2.2-9.4,4.4-14.1,6.6c-11.9,2-13.4,0.7-14-11.6c-0.1-1.8-0.2-3.6-0.2-5.5c-0.2-4.3,3-4,5.5-3.4
+ c4.1,1.1,8.7,2.1,12,4.5c7.7,5.7,15.9,4.1,24,2.6c7.9-1.5,15.4-5,23.8-4.5c2.1,0.1,4.2-0.8,6.1-1.9
+ C295.3,347,305.6,346.4,315.8,348.1z"/>
+<path style="fill:#F7E3E5;" d="M312,69c-1.3,1-1.4,2.5-0.9,3.6c1.8,3.9,0.3,5.3-4,5.1c6.7,1.7,11.9,5.9,18.2,7.5
+ c11.9,3.1,18.4,11.9,23,22.5c1,2.3,3.7,4.1,2.4,7.3c-14.5-5.2-29.7-6.3-44.8-8.1c-5.7-0.7-11.3-1.9-16.9-2.9c1.3-1.5,3.1-1,4.7-1
+ c7-0.1,14-0.2,21,0c3.6,0.1,4.5-1.3,4.4-4.6c-0.3-10-5.5-15.3-15.3-15.4c-1.5,0-3,0.1-4.5,0c-6.2-0.7-11,0.6-12.9,7.6
+ c-0.5,1.9-2.5,4.3-5.1,4.1c-2.6-0.2-3-2.9-3.7-4.8c-2.3-6-0.2-10.2,5.9-11.5c5.1-1.1,10.4-1.7,15.6-2.3c1.8-0.2,3.1-0.5,3.8-2.5
+ c2.7-7.3,4.3-14.7,4.2-22.7c-0.1-5.4,0.3-10.9,3.3-15.8c0.6-1,1.1-2.1,2.5-2.1c-2.1,5.9-3,12-3,18.3c0,1.8-0.2,3.7,1.9,4.7
+ C310.3,60.3,310.8,64.6,312,69z"/>
+<path style="fill:#F5CFD6;" d="M67,217c-2.6,5.3-3.6,10.8-4.1,16.7c-0.6,6,1.7,10.1,6.1,13.6c14.7,12.1,29.7,23.9,44,36.5
+ c10.9,9.5,22.2,18.5,33.1,27.9c1.1,1,2,2.2,2.9,3.4l0,0c-1.3,0-2.7,0-4,0c-0.3,0-0.6,0-1-0.1c-0.3-0.3-0.7-0.6-1-0.9
+ c-10.4-4.7-20.7-9.4-31.1-14.1c-3.1-3-7.4-3.8-10.9-6c0.3-2.5-1.3-2.8-3.2-3.2c-2-0.5-3.9-1.5-0.4-3.8c-2.1,0.5-4.1-0.7-5.4,1.2
+ c-0.6-0.1-1.2-1.2-1.9-0.2l0.1,0.1c1-0.7-0.1-1.3-0.1-2c1.6-2,0-1.8-1.2-1.8l0.1,0.1c0.2-1.7,0.7-3.6-1.5-4.4
+ c-1.2-0.5-1.2,0.6-1.3,1.3c-0.7,0-1.3-1.2-2-0.2l0.1,0.1c0.9-0.7-0.1-1.2-0.1-1.9c0.9-3.5-1.9-4.6-4-6.2l0,0
+ c0.1-1.4-0.5-2.3-1.8-2.8c-0.9-3-1.9-6-5.2-7.3c-1.7-2.6-3.4-5.2-5-7.8c-0.3-0.4-0.7-0.8-1-1.1l0,0c0-0.8-0.1-1.6-1-2l0,0
+ c0-0.9-0.1-1.6-1-2l0,0c0-0.9-0.2-1.6-1-2l0,0c-0.4-0.3-0.9-0.7-1.3-1c-2.5-2.7-3.6-5.6-2.8-9.4c0.8-3.5-0.7-6.9-2.7-9.8
+ c-1.3-1.8-1.4-3.5,0.4-4.7C60.6,220.9,63,217.6,67,217z"/>
+<path style="fill:#E794A1;" d="M378,151c10.8,0.6,20.5,4.8,30.1,9.5c4,2,8,3.9,12,6c2.4,1.2,4.6,0.1,5.9-1.3
+ c2.5-2.6,0.3-3.4-2.1-4.2c-11.4-3.4-22.7-7-33.9-10.9c9.3-0.3,18.1,2.8,27.1,3.9c11.7,2.3,23.5,4.6,32.4,13.6c0.7,0.7,1.7,1,2.6,1.5
+ c2.1,2.9,6.5,3.7,7,8c-3.3-2.1-5.8-5.4-10-6c-7.8-4.3-16.4-1.4-24.6-2.2c-8.3-0.8-17-0.2-25.5-1.4c-9.9-1.4-19.9-3-29.8-4.5h-0.1
+ c-0.5-0.8-1.2-0.9-2.1-0.8c-11.2-2.1-22.2-4.9-33.1-8.2c-1.3-0.4-3-0.8-2.9-2.8c0.3,0,0.6-0.1,0.9-0.2
+ C347.3,148.8,362.6,150.6,378,151z"/>
+<path style="fill:#5F5F5F;" d="M238.8,492c-1.6-0.8-1.3-3.2-3.1-3.8c0.4-2.2-1-3.8-1.8-5.5c-3.5-7.6-6.3-15.3-7.3-23.7
+ c-1.3-11.2-6.8-21.5-8-32.8c-1.1-10.6-3.5-20.9-6.1-31.2c-1.4-5.6,0.7-10.8,1.7-16.2c0.2-1,0.8-2,1.9-2c1.3,0.1,1,1.5,1.4,2.3
+ c7.2,15.8,10.4,32.8,14.4,49.6c3.6,15.4,4.6,31.2,6.9,46.8c0.4,2.4,1.7,4.3,2.2,6.5c-1.9,2.2-1.1,4.7-0.5,7
+ C241,490.8,241,491.9,238.8,492z"/>
+<path style="fill:#5F5F5F;" d="M264.2,486.7c0.2,0.9,0.3,1.9,0.5,2.8c0.6,2.7-1.4,3.9-3.1,5c-2.1,1.2-3.5-0.5-4.2-2.1
+ c-0.6-1.5-1.1-2.3-2.7-1.2c1.6-5.6-1.5-10.7-2-16.1c-1-10-2.6-20-3.9-30c0.2-1.4,0.5-2.8-0.5-4.1c-1.5-11.9-3-23.9-4.5-35.8
+ c-0.3-6.1-1.5-12.1-0.8-18.2c2.9,0.9,3.8,3.6,4.9,5.9c5.2,10.6,8.6,21.7,9.7,33.6C259.4,446.6,262,466.6,264.2,486.7z"/>
+<path style="fill:#BDBCBC;" d="M205.3,466.4c-1.4-9.9-4.8-19.3-7.3-28.9c-4.6-18.1-9.5-36.2-12.3-54.7c-0.3-2.2,0-3.9,1.9-5.8
+ c3.8,6.3,5.6,13.1,7.7,19.8c7.8,24.8,13.8,50.1,20.2,75.4c0.4,1.6,0.6,3.3,0.4,4.9c-4.3,5.1-4.4,5-6.9-1.1
+ C207.8,472.8,206.6,469.6,205.3,466.4z"/>
+<path style="fill:#BDBCBC;" d="M243,387c-0.7,6.1,0.5,12.1,0.8,18.2c-1.3,1.4-0.9,3.2-0.7,4.8c0.7,6.1,1.9,12.1,2.4,18.1
+ c0.3,3.4,2.4,6.9,0.4,10.4c-4-9.5-6.2-19.5-9.3-29.3c-3.7-11.8-7.1-23.7-10-35.8c-0.6-2.4-0.6-4.1,1.3-5.7c4.7-2.2,9.4-4.4,14.1-6.6
+ c1,1.4,1,3.1,1,4.7C243,372.9,243,379.9,243,387z"/>
+<path style="fill:#BDBCBC;" d="M158.3,363.3c19.1,35.9,25.8,75.2,37.7,113.3C188.9,471.4,157.7,377.2,158.3,363.3z"/>
+<path style="fill:#E794A1;" d="M285.1,348c-1.9,1.1-4,2-6.1,1.9c-8.3-0.5-15.8,3-23.8,4.5c-8.2,1.5-16.3,3.1-24-2.6
+ c-3.3-2.5-7.8-3.4-12-4.5c-2.4-0.6-5.6-0.9-5.5,3.4c-0.2-3.6-2.4-5.2-5.8-5.6c-4.5-0.6-8.3-3.8-13-4.1l0,0c-0.3-1.1-1.2-1.1-2-1l0,0
+ c-1.5-1.7-3.3-2.3-5.5-2c-0.4-1.5-1.5-2-3-2c-0.8-0.9-1.8-1.2-3-1l0,0c-1.4-1.9-3.2-2.6-5.5-2l0,0c-0.1-3.6,2.1-1.5,3.2-1.1
+ c7.4,2.3,14.7,5,22.5,6.2c10.5,1.5,20.9,3.4,31.4,4.9c1.7,0.3,3.2,1,4.7,1.4c2,6,6.4,8.3,13,7.3C262.2,349.9,273.5,347.1,285.1,348z
+ "/>
+<path style="fill:#5F5F5F;" d="M205.3,466.4c1.3,3.2,2.5,6.4,3.8,9.6c2.4,6.1,2.6,6.1,6.9,1.1c1.5,4.8,3,9.7,5.8,14
+ c4.5,6.7,7.1,6.9,12.2,0.9c1.4,4-1.5,7.2-1.9,10.9c-7.3-2-14.3-4.8-21.8-6.1c-6.6-1.1-12.6-9.5-13.4-17.4c0.9,1,1.6,2.1,2.6,3
+ c1.4,1.3,2.6,3.7,4.8,2.6c1.9-0.9,1.6-3.3,1.8-5.3C206.7,475.1,204.3,470.9,205.3,466.4z"/>
+<path style="fill:#F7E3E5;" d="M452,169.1c-0.9-0.5-1.9-0.8-2.6-1.5c-8.9-9-20.6-11.3-32.4-13.6c-4.9-7-10.4-12.7-19.8-13
+ c-6.2-0.2-11.4-3.7-16.9-6.4c-0.6-0.3-1-0.8-0.8-1.6c0.2-0.8,1-1,1.6-0.8c6.7,1.9,14.2-0.8,20.5,4.1c4,3.1,8.4,5.9,13.6,6.8
+ c7.7,5.7,17.5,7.3,25.5,12.4C445.8,158.7,451.4,161.8,452,169.1z"/>
+<path style="fill:#7A7A7A;" d="M484.4,307.4c-0.4,0.3-0.8,0.5-1.2,0.8c-0.3-0.3-0.5-0.5-0.8-0.8c1.2-5.3-3.1-8-5.4-11.6
+ c0.4-1,0.8-1.9,1.2-2.9c2.7,0.5,5.5,1.3,8.2,1.5c4.6,0.2,6.1-2.4,3.6-6.3c-1.9-3-4.1-6-7.1-8.1c0.4-0.3,0.9-0.7,1.3-1
+ c5.6,1.4,11.3,2.8,16.9,4.2c0.9,1.3,0.8,2.3-0.8,2.9c-2,0.6-2.9,2.5-3.9,4.1c-0.6,1-3.4,1.8-0.7,3.6c0.2,3.3-2.2,5.4-3.6,7.8
+ c-4.8,8.6-9.2,17.5-15.1,25.4c1.4-6.8,6-12.3,8.3-18.7c0.7-1.3,1.4-2.6,2.1-3.9c0.2-0.4,0.5-0.9,0.7-1.3c0.9-0.3,1.1-1,1.2-1.9
+ c0.5-0.2,0.8-0.5,0.3-0.9c-0.2,0.2-0.3,0.5-0.5,0.7c-0.9,0.4-1.2,1.1-1,2c-0.8-0.1-0.9,0.4-1.1,0.9C485.5,304.6,485,306,484.4,307.4
+ z"/>
+<path style="fill:#F7E3E5;" d="M369,100.9c2.7,2.4,5.3,4.9,8.1,7.1c7.4,6,12.8,13.5,16.2,22.5c-15.1-13.6-31.1-26.1-47.7-37.8
+ C353,93.2,359,97.4,366,99C367,99.6,368,100.3,369,100.9z"/>
+<path style="fill:#BDBCBC;" d="M160,416.7c5.9,17.5,15.2,33.8,18.7,52.1c0.3,1.7,1.2,4.1-0.9,4.9c-2,0.7-2.4-1.9-3-3.2
+ c-3.6-7.3-6.4-14.7-7.3-23C166.3,436.9,162.4,427,160,416.7z"/>
+<path style="fill:#F7E3E5;" d="M449,171c4.2,0.6,6.8,3.9,10,6l0,0c0.4,0.9,0.7,0.8,1.1,0c3.4,1.7,2.8,4.9,3,7.9
+ c-0.7,0.3-1.8-2.8-2.1,0.1c-0.2,2.3,0.1,4.6,0,6.9c-0.1,2.1-0.3,4.4-2.9,5.2c-0.3-3.2,1-6.2,1.5-9.3c0.5-3.5-2.4-9.6-5.3-9.6
+ C448.6,178.3,448.8,174.9,449,171z"/>
+<path style="fill:#110D0E;" d="M501.1,283.1c-5.6-1.4-11.3-2.8-16.9-4.2c3.6-2,7.1-3.9,10.7-5.9c2.1,2.4,4.1,4.9,6.2,7.3
+ C501.9,281.3,502.6,282.2,501.1,283.1z"/>
+<path style="fill:#BDBCBC;" d="M154.9,440.7c4.5,7.8,6.4,16.6,10.8,24.5c-2.5-1-4.6-3.4-9.3-10.6C153.6,450.2,156,445.2,154.9,440.7
+ z"/>
+<path style="fill:#F5CFD6;" d="M311.9,55.9c-2.1-0.9-1.9-2.8-1.9-4.7c-0.1-6.3,0.8-12.4,3-18.3l0,0c0.3-0.3,0.6-0.7,0.9-1
+ c0.3-2.6,2.3-4.4,3.5-6.5c0.4-0.7,1.2-1.4,2-0.9s0.6,1.4,0.2,2.2c-0.3,0.6-0.5,1.3-0.9,1.8C312.4,36.7,312.4,46.3,311.9,55.9z"/>
+<path style="fill:#F7E3E5;" d="M245.9,438.5c2-3.5-0.1-7-0.4-10.4c-0.5-6.1-1.7-12.1-2.4-18.1c-0.2-1.6-0.6-3.3,0.7-4.8
+ c1.5,11.9,3,23.9,4.5,35.8c-0.4-0.1-0.9-0.3-1.3-0.4l0,0C246.7,439.8,246.3,439.2,245.9,438.5L245.9,438.5z"/>
+<path style="fill:#F7E3E5;" d="M73,263c3.3,1.3,4.2,4.3,5.2,7.3c0.2,1.2,0.3,2.4,1.8,2.8l0,0c0,0.7,0.1,1.5,0.1,2.2
+ c-3-0.2-4.2-3.6-7-4.1C73,268.4,73,265.7,73,263z"/>
+<path style="fill:#F5CFD6;" d="M261.9,67.9c-0.6,4.6-5.2,3.3-7.7,5c-0.8,0.5-2.2,0.1-3.3,0C254,70.1,257.8,68.6,261.9,67.9z"/>
+<path style="fill:#110D0E;" d="M495.6,293.7c-2.7-1.7,0.1-2.6,0.7-3.6c1-1.6,1.9-3.4,3.9-4.1C498.7,288.6,497.2,291.1,495.6,293.7z"
+ />
+<path style="fill:#BDBCBC;" d="M247,440.5c0.4,0.1,0.9,0.3,1.3,0.4c1.1,1.3,0.8,2.7,0.5,4.1C246.2,444.4,247.2,442.2,247,440.5z"/>
+<path style="fill:#F7E3E5;" d="M466.1,197c0-0.6-0.1-1.3-0.1-1.9c0.1-1.1,0.2-2.2,0.3-4.5C468.5,193.7,467,195.3,466.1,197z"/>
+<path style="fill:#7A7A7A;" d="M474.4,231.9c-1.8-0.3-2.7-1.5-3.2-3C473,229.1,473.8,230.4,474.4,231.9z"/>
+<path style="fill:#F7E3E5;" d="M464,189.9c-1.5-1.4-0.7-3.3-0.8-5C464.6,186.4,463.8,188.3,464,189.9z"/>
+<path style="fill:#F7E3E5;" d="M464.9,195.1c-1.3-1.2-0.8-2.7-0.8-4.1C465.4,192.2,464.9,193.7,464.9,195.1z"/>
+<path style="fill:#F7E3E5;" d="M156,405c0.7,0.5,1.1,1.1,0.8,2c0,0.1-0.2,0.2-0.4,0.3C156.3,406.5,156.1,405.8,156,405L156,405z"/>
+<path style="fill:#F7E3E5;" d="M153.4,398.4c-0.1-0.3-0.1-0.4-0.2-0.6c0.1,0,0.2-0.1,0.4-0.1C153.6,397.9,153.5,398.1,153.4,398.4z"
+ />
+<path style="fill:#BDBCBC;" d="M66,252c0.9,0.4,1,1.2,1,2C66.2,253.6,65.9,252.9,66,252z"/>
+<path style="fill:#BDBCBC;" d="M65,250c0.9,0.4,1,1.2,1,2C65,251.7,64.9,250.9,65,250z"/>
+<path style="fill:#BDBCBC;" d="M64,248c0.8,0.4,1,1.2,1,2C64,249.7,64,248.9,64,248z"/>
+<path style="fill:#F7E3E5;" d="M154.4,401.3c0-0.1-0.1-0.3-0.1-0.4c0.1,0,0.3-0.1,0.4-0.1C154.9,401.1,154.8,401.3,154.4,401.3z"/>
+<path style="fill:#F7E3E5;" d="M156,405c-0.2-0.4-0.5-0.7-0.7-1.1c0,0,0.2-0.2,0.4-0.3C155.8,404.1,155.9,404.5,156,405L156,405z"/>
+<path style="fill:#F7E3E5;" d="M157.8,409.9c0,0.1-0.1,0.3-0.1,0.4c-0.1-0.1-0.3-0.3-0.4-0.4c0.1-0.1,0.2-0.2,0.3-0.3
+ C157.6,409.7,157.7,409.8,157.8,409.9z"/>
+<path style="fill:#F5CFD6;" d="M132,148c-0.4,0.8-1.1,1-2,1C130.4,148.2,131.1,147.9,132,148z"/>
+<path style="fill:#BDBCBC;" d="M67,254c0.3,0.4,0.7,0.8,1,1.1C67.6,254.8,67.3,254.4,67,254z"/>
+<path style="fill:#F5CFD6;" d="M130,149c-0.3,0.3-0.7,0.6-1,1C129.3,149.6,129.6,149.3,130,149z"/>
+<path style="fill:#E794A1;" d="M460.1,177c-0.4,0.8-0.7,0.9-1.1,0C459.3,177,459.7,177,460.1,177z"/>
+<path style="fill:#BDBCBC;" d="M62.7,247c0.4,0.3,0.9,0.7,1.3,1C63.6,247.7,63.1,247.3,62.7,247z"/>
+<path style="fill:#F5CFD6;" d="M133,147c-0.3,0.3-0.6,0.7-1,1C132.3,147.6,132.6,147.3,133,147z"/>
+<path style="fill:#BDBCBC;" d="M246,438.5c0.3,0.7,0.7,1.3,1,2C246.7,439.8,246.3,439.2,246,438.5z"/>
+<path style="fill:#F5CFD6;" d="M133.9,145.8c-0.3,0.4-0.6,0.8-1,1.2C133.3,146.6,133.6,146.2,133.9,145.8z"/>
+<path style="fill:#F7E3E5;" d="M313.9,31.9c-0.3,0.3-0.6,0.7-0.9,1C313.3,32.6,313.6,32.3,313.9,31.9z"/>
+<path style="fill:#FFFFFF;" d="M243.9,307.7c-30,2.5-59.7,1.7-89-5.6c-5.8-1.5-11.3-3.8-16.8-6L138,296c-2.5-3.6-5.8-6.1-9.9-7.6
+ c2-1.9,1.3-3.3-0.4-5.3c-4.4-4.9-10.1-8-15.4-11.5c-6.4-4.2-11.6-9.6-16.1-15.3c-5.5-6.9-10.7-14.2-14.4-22.5c-1.9-4.3-3-8.2,0.4-12
+ c1.5-1.8,0.4-5,3.5-5.7c0,6.7,0.8,13.2,3.1,19.5c3.1,8.3,9.2,14.2,15.3,19.9c7.8,7.3,15.8,14.4,24.4,22.2c-0.3-2.7-1.6-3.3-2.5-4.2
+ c-8.6-8.8-16.8-17.9-24.6-27.4c-11.2-13.6-12.3-17.7-8.4-34.4c1.5,7.6,4.2,13.6,7.8,19.1c0.1,1.5,0,3,2,3.2c0.1,0.9-0.2,2,0.9,2.4
+ c0.2,0.1,0.8-0.4,0.9-0.7c0.2-1.3-0.7-1.6-1.7-1.8c0.1-1.9-0.5-3.6-1.9-5c-2.9-8.5-4.4-17.1-2.5-26.1c3.4,3.4,7.7,4.9,12.1,6.2
+ c1.5,2.2,3.1,2.7,5,0.5c0,8.8,5.5,13.4,12.7,17c-0.9-3.6-2.3-6.9-3.7-10.3c-1.4-3.5-1.9-7.5-0.3-10.6c1.7-3.3,6.9-3.3,8.8-7.1
+ c0.1-0.3,1.8,0.3,2.7,0.5c1.6,0.3,3.2,0.7,4.8,1.1c0.1,0.7,0.1,1.6,1.2,1.5c0.1,0,0.3-0.2,0.3-0.3c0.1-1.1-0.8-1.1-1.5-1.2
+ c-2.8-3.3-5.5-6.6-8.3-9.8c-1.6-1.7-3.3-3.6-5.7-1c-0.3,0.3-0.6,0.5-0.9,0.8l0,0c-2.5-0.1-3.1,2.6-5,3.4c0.5-4.1-1.7-4.9-5.1-4.2
+ c-3.7,0.8-7.4,1.8-11.1,2.6c-1.6,0.4-3.5,0.5-4.4-1.3c-1-2,0.5-3.3,1.8-4.2c4.6-2.9,7.8-7.6,13.1-9.6c1.8-0.7,3.1-0.9,4.5,0.6
+ c1.3,1.4,1.5,2.9,0.6,4.6c-0.5,0.9-1.2,1.7-1.2,2.6c-0.1,1.5,1,2.5,2.3,3c1.5,0.5,2.1-0.6,2.4-1.8c3.2-11.6,14-10.7,22.5-13.7
+ c1.5-0.5,2,1,2.9,2c7.3,8.9,12.3,19.2,17.6,29.3c0.7,1.3,0.7,3.2,2.5,3.4c2,0.1,1.3-1.9,1.9-3c1-1.9,2-1.7,3.5-0.3
+ c2.8,2.5,3.7,6.2,5.8,9.2c6,8.5,10.7,17.8,15.1,27.2c5.6,12,15.9,19.8,24.6,29c0.6,0.6,1.3,1.3,2.1,0.6c0.8-0.6,0.5-1.5,0-2.3
+ c-7.6-12.4-13.7-25.7-21.6-37.9c-4-6.1-8.5-11.7-13.8-16.8c-10-9.6-16.4-21.9-23-33.8c-4.7-8.4-8-17.4-11.9-26.2
+ c-0.6-1.3-1.9-2.7-0.4-4.1c1.3-1.2,2.8-1.4,4.6-0.7c3.7,1.3,7,3.5,10.9,4.4c2,0.5,3.6,2.1,4,4.6c1.9,11.3,9.8,18.5,17.6,25.7
+ c14.8,13.4,31.7,23.8,48.8,34.1c12,7.3,24.6,13.2,37.1,19.4c5.5,2.7,11.2,5.3,16.6,8.4c-22.8-6-43.2-17.4-63.5-28.9
+ c7.7,7.6,17.8,11.7,25.5,19.5c-3.8-1.8-7.6-3.4-11.2-5.3c-4.8-2.5-9.5-5.4-14.4-7.9c-1.4-0.7-3-2-5-0.4c-1.9,1.4-3.3-0.5-4.7-1.6
+ c-6.7-5.1-13.3-10.3-19.9-15.5c-0.3,0.3-0.6,0.5-1,0.8c2.3,2.9,4.4,6,7,8.7c7.6,7.9,13.9,16.8,20.9,25.2
+ c10.8,13.1,18.1,28.3,25.6,43.3c2,4,0.2,5.6-2.7,6.8c-13.9,6-27.6,12.6-43.2,13.1c-0.2,0-0.5,0.3-1,0.7c14.5,1.2,28.1-1.8,41.6-6.3
+ c9.7-3.3,19.4-6.9,29.1-10.2c2.6-0.9,4.1,0.4,5,2.7c0.8,1.9,0.4,3.9,0.5,5.9C269.5,299,259,302,248.5,305
+ C247,305.6,244.7,305.4,243.9,307.7z"/>
+<path style="fill:#F5CFD6;" d="M285.1,348c-11.6-0.9-22.9,1.9-34.2,3.6c-6.6,1-11.1-1.2-13-7.3c7.1-1.9,14.2-3.8,21.2-5.9
+ c4.9-1.4,9.8-2.8,14.5-4.8c12.7-5.4,26.2-6.6,39.7-7.7c13-1,26-2.6,38.9-3.7c6.1-0.5,12.2-0.4,18.3-1.1c5.8-0.7,8.2-3.8,5.4-9
+ c-3.9-7.1-9.6-12.5-16.9-16.1c9.7-2,19.4-3.9,29-6.1c9.6-2.2,19.3-3.7,29-3.7c9.7,0.1,19.6-0.1,29.3,2c1.6,0.4,3.2,1,4.7,1.7
+ c1.2,0.5,2.6,1.3,2.5,2.8c0,1.6-1.7,1.8-2.9,2.2c-10,3.2-20.4,4.2-30.7,5.8c-9.6,1.5-19.4,2.1-29.2,4c5,1.4,10.1,2.8,15.1,4.1
+ c5.3,1.4,10.6,2.6,15.9,4.1c2.8,0.8,5.3,2,5.4,5.7c0.1,3.9-2.7,5.3-5.5,6.1c-6.2,1.8-12.5,3.2-18.8,4.7c-11,2.6-21.6,6.5-32,10.8
+ c-9.9,4.1-20.4,3.9-30.7,5.8c-8.1,1.4-16.3-0.4-24.2,1.9C305.6,346.4,295.3,347,285.1,348z"/>
+<path style="fill:#F5CFD6;" d="M449,171c-0.2,3.9-0.4,7.3,5.3,7.2c2.9,0,5.8,6.1,5.3,9.6c-0.5,3.1-1.8,6-1.5,9.3V197
+ c-1.5,0-2.1,0.8-2,2.2c-6.5,12.7-21.8,18.5-34.9,13.5c-13.3-5.1-26.6-10-39.9-15c-1.7-0.6-3.6-0.7-5.3-1c-0.4-0.5-0.7-1.5-1.1-1.5
+ c-11.1-0.5-21.4-5.1-32.3-6.3c-6.5-0.7-12.4-3.4-18.5-5.5c-1.1-0.4-2.1-1.1-2.1-2.5c1.7,0,3.3,0,5,0c1,0.5,2,1.2,3.1,1.4
+ c9,1.9,18,4.4,27.2,5.3c6.2,0.6,12.3,2.4,18.7,2.4c7.7,0,15.4,1.4,23.1,2.4c7.1,0.9,14.1,1.8,21.3,1.4c1-0.1,2.1,0,2.4-1.2
+ s-0.7-1.9-1.6-2.1c-2.6-0.6-4.8-2.1-7.3-2.9c-3.3-1.1-7.3-0.6-9.8-3.8c1.5-1.5,5.3-1.3,4.4-4.3c-0.8-2.7-4-1.5-6.2-1.5
+ c-11.7-0.1-23.5-0.1-35.2-0.1c-2.8-2.8-8.6-0.6-10-5.8c5,0.5,10.1,0.9,15.1,1.4c0-0.2,0.1-0.4,0.1-0.7c-6.4-1.6-12.8-3.2-19.3-4.8
+ c0.4-0.8,0.3-1-0.9-1.5c5.4-2.6,11.5-1.9,17.1-3.7c9.9,1.5,19.8,3.1,29.8,4.5c8.5,1.2,17.1,0.7,25.5,1.4
+ C432.6,169.6,441.2,166.7,449,171z"/>
+<path style="fill:#FFFFFF;" d="M327,181c-1.7,0-3.3,0-5,0c-22.5-5.8-44.2-14.6-67.4-18.2c-7.1-1.1-13-5.4-19.6-8.2
+ c-1.1-0.5-2.1-1.8-4.3-0.6c4.9,5.4,9.7,10.7,16.5,13c9.4,3.1,19.4,4.7,28.5,8.4c8.7,3.5,16.5,9.1,24.9,13.4
+ c9.5,4.9,17.7,11.3,25.8,18.3c-6.5-0.4-12-3.7-17.8-5.8c-9.8-3.6-18.4-9.7-27.9-14c-2.5-1.1-5-1.8-7.7-0.9
+ c-4.4,1.4-9.1-0.1-13.6,0.9c0.1,2.4,2.9,2,3,4.3c-6.9-1-12.6-4.4-18.1-7.8c-10.2-6.4-20-13.5-30.2-19.9c-3.1-2-4.9-5.3-8.2-6.9
+ c-0.3-0.3-0.7-0.7-1-1l0,0c-0.1-1.9-0.9-3.1-3-3l0,0c0.6-1.9-1-3-1.7-4.4c-4.4-8.1-8.3-16.3-4.7-25.8c4-1.8,6.8-5.8,11.2-7
+ c2.7-0.8,5.3-3.2,8.3-0.6c0,1.8-0.2,3.7-0.1,5.5c0.4,5.1,1,10.2,6,13.4c8.6,9.9,20.3,15,31.7,20.3c18.7,8.6,38.1,15.2,58.1,20.1
+ c5.1,1.3,10.3,2.1,15.6,2.6c2.9,0.3,1.1,1.3,0.8,2.3c1,1.2,2.5,0.6,3.7,1C329.8,181.5,328.3,180.8,327,181z"/>
+<path style="fill:#FFFFFF;" d="M289,305.2c1.3-0.1,2.6-0.2,3.9-0.3c3.9,2,7.9,3.9,11.8,5.9c1.5,0.8,3.3,1.6,2.8,3.6
+ c-0.4,1.7-2.2,2.2-3.8,2.8c-3.3,1.4-6.9,1.2-10.3,1.4c-14.3,1.2-28.5,3.7-42.8,5.3c-17.9,2-35.4,0.9-52.6-4.4
+ c-4.2-1.3-8.4-3.3-13.1-2.6c-1-3.2-3.4-3.1-6-2.2c2,0.7,4,1.5,6,2.2c9.8,4,19.2,9,30.8,11.9c-4.4,1.7-7.6,0.4-10.3-0.2
+ c-8-1.7-16-2.2-24-3.6c-7.6-1.3-14.4-4.8-21.8-6.7c-5.7-1.5-6.9-7.5-8.7-12.5c10.9,4.6,22.4,5.9,34.1,6.1
+ c25.1,0.5,50.2-0.7,75.2-3.7c9.2-1.1,18.5-2,27.7-3C288.3,305.7,288.7,305.6,289,305.2z"/>
+<path style="fill:#F5CFD6;" d="M243.9,307.7c0.9-2.3,3.1-2.2,5-2.7c10.5-3,21-6,31.1-10.1c4.7,1,8.6-1.8,12.8-3.1
+ c10.5-3.3,21.3-6,31.4-10.5c3.7-1.6,3.9-3.3,1-6c-3.4-3.1-7.4-5-11.7-6.3c-1.8-0.6-2.5-1.3-2.5-3c14.8,2.7,29.6,5.5,44.5,8.1
+ c14.2,2.5,28.4,4.8,43.9,7.4c-7.8,1.9-14.4,3.8-21,5.2c-18.5,3.9-36.9,7.8-55.5,11.3c-16.1,3-32.3,5.4-48.7,6.9
+ C264,306,254,307.7,243.9,307.7z"/>
+<path style="fill:#FFFFFF;" d="M223,107.4c-0.1-1.9,1-3,2.4-4.1c4.9-3.7,9.6-4,14.9-0.7c7.9,5,16.8,8,25.5,10.9
+ c4.7,1.5,8.2,4.4,10.5,7.8c6.7,10,16.6,14.5,27.1,18.9c8.3,3.4,17,5.7,25.9,9.5c-3.6,2.5-6.5,0.6-9.1,0.1
+ c-15.3-3.3-30.6-7.1-45.9-10.4c-8.6-1.9-15.8-6.3-23.2-10.7c-6.5-3.9-13-7.8-19.5-11.8c-1.4-0.8-2.8-0.9-4.3-0.9c0-2,0-4,0-6
+ c0.9-1.1,1-2.1-0.3-3C225.6,105.6,224.4,107.1,223,107.4z"/>
+<path style="fill:#F5CFD6;" d="M419,270c20.4,1.3,40.3-2.4,60.2-6.5c1.4-0.3,3-0.4,4.4-0.4c1.7,0,2.5,0.8,1.9,2.5
+ c-1.5,3.9-3.1,7.5-7.4,9.4c-13.2,5.9-26.7,8.1-41.1,5c-12.4-2.7-25.1-4.2-37.7-6.3c-0.4-0.1-0.8-0.5-1.2-0.8
+ c4.9-2.5,10-3.5,15.5-2.4C415.4,271,417.3,271.7,419,270z"/>
+<path style="fill:#F5CFD6;" d="M367.1,217.9c2.8,3.4,1,6.9,0,10.3c-0.6,2-1.9,1.2-3.2,1c-17.1-2.5-33.9-6.4-50.5-11
+ c-14.4-4-28.8-8-42.4-14.1c1.2-1.7,3.1-1.3,4.6-1c20.5,5.1,41.5,7,62.2,11.4c7.5,1.6,15.3,2.2,22.8,4.3
+ C362.5,219.4,365.1,219.9,367.1,217.9z"/>
+<path style="fill:#F5CFD6;" d="M391,253c13.4,0.6,26.7,2.7,40.2,2.1c9.7-0.4,17.3-3.9,22.5-12.3c0.6-1,1.1-2.2,2-2.8
+ c2.5-1.6,4.8-5.5,8-3.2c3.2,2.2,4,6.6,1.6,9.9c-6.4,8.6-14.8,14.7-25.7,16.2s-21.8,0.1-32.7-0.1c-3-3.9-7.9-4.7-12-6.8
+ C393.4,255.3,391.3,255.3,391,253z"/>
+<path style="fill:#E794A1;" d="M98.7,202.8c-1.9,9-0.4,17.6,2.5,26.1c-0.1,0.6-0.2,1.3-0.3,1.9c-3.7-5.5-6.4-11.5-7.8-19.1
+ c-3.9,16.7-2.8,20.8,8.4,34.4c7.8,9.5,16,18.6,24.6,27.4c0.9,0.9,2.1,1.5,2.5,4.2c-8.6-7.8-16.6-14.9-24.4-22.2
+ c-6.2-5.8-12.2-11.6-15.3-19.9c-2.4-6.4-3.1-12.9-3.1-19.5c0.9-7.8,3.6-14.8,8.8-20.7c0.9-1,1.7-2.9,3.5-1.7c1.4,1,2.2,2.4,1.8,4.3
+ C99.4,199.6,99.1,201.2,98.7,202.8z"/>
+<path style="fill:#E794A1;" d="M330.9,180.2c-1.2-0.4-2.7,0.2-3.7-1c13.3-0.4,26.6-0.8,39.8-1.2c11.7,0,23.5,0,35.2,0.1
+ c2.2,0,5.3-1.2,6.2,1.5c0.9,3-3,2.8-4.4,4.3c-1.3,0.1-2.6,0.2-4,0.2c-0.3,0-0.7,0-1,0c-5.3,0.7-10.6,0.9-15.8,0.6
+ C365.7,183.9,348.2,182.6,330.9,180.2z"/>
+<path style="fill:#E794A1;" d="M195.7,122.8c-3.7,9.5,0.3,17.7,4.7,25.8c0.8,1.4,2.3,2.5,1.7,4.4c-6.1-4.2-7.8-10.7-9.2-18.1
+ c-4.7,4.9-5.9,10.3-5.3,16.1c0.4,3.7,1.6,7.4,2.5,11.1c-2.2-0.9-3.1-2.7-3.1-5c-2.7-7.8-1.1-16.1-2.8-24c-0.5-2.5,0.5-4.9,1.8-7.1
+ c3.7-6.2,7.4-12.5,12.4-17.9c1.2,5.1,1.2,6-1.2,10.1C196.3,119.6,196,121.2,195.7,122.8z"/>
+<path style="fill:#E794A1;" d="M352.9,168.1c6.4,1.6,12.8,3.2,19.3,4.8c0,0.2-0.1,0.4-0.1,0.7c-5-0.5-10.1-0.9-15.1-1.4
+ c-16.3-2.7-32.8-4.1-48.9-8.3c-2.8-0.7-7.9-1.4-7.3-3.6c0.8-2.8,5.3-0.9,8.3-0.4c13.1,2,26,5,38.9,7.7
+ C349.6,167.9,351.3,167.9,352.9,168.1z"/>
+<path style="fill:#FFFFFF;" d="M186.9,157.1c0,2.3,0.9,4,3.1,5l-0.1-0.1c-0.2,1.4,0.4,2.6,1.2,3.7c0.6,2.1,1.3,4.2,4.1,4.3
+ c1.9,0.1,2.9,1.6,4.1,2.6c7.2,6.2,14.8,11.8,23.5,15.8c0.7,0.3,1.6,0.5,1.8,1.9c-2,0.4-3.8-0.4-5.3-1.3c-11.6-6.9-24-12.7-33.7-22.4
+ c-1-1-1.8-2.3-2.8-3.5c-2-2.3-2.8-4.1,1.5-4.2C185.5,159,185.9,157.6,186.9,157.1z"/>
+<path style="fill:#FFFFFF;" d="M111.9,299.9c10.4,4.7,20.7,9.4,31.1,14.1c0.3,0.3,0.7,0.6,1,0.9c0.3,0,0.6,0,1,0.1
+ c2.7,3.4,5.1,7.2,10.5,5.4c0.8-0.3,1.2,0.2,1.4,1c0.3,1.7-0.3,2.9-1.9,3.6c-8.1-3.8-16.2-7.4-23.6-12.8c-4.2-3.1-8.9-6-14.7-6.3
+ c-2.9-0.2-5.5-1.9-7.8-3.9C110.5,302.3,111,300.8,111.9,299.9z"/>
+<path style="fill:#E794A1;" d="M227.3,110c0,2,0,4,0,6c-0.1,3.2-0.9,4.8-4.8,3.5c-4.5-1.5-6.6,0.7-5.2,5.4c0.9,3.1,2.4,6.1,3.6,9.1
+ c-4.9-3.2-5.5-8.3-6-13.4c-0.2-1.8,0-3.6,0.1-5.5c1.9-3.4,5.6-4.9,8-7.8c1.3-0.2,2.5-1.7,4-0.4C227.1,108,227.2,109,227.3,110z"/>
+<path style="fill:#E794A1;" d="M115.9,209.5c-1.9,2.2-3.5,1.7-5-0.5c-0.4-5.1,2.9-8.2,6.1-11.4c1.4-1.4,2.7-2.8,4.1-4.3
+ c1.9-0.8,2.5-3.5,5-3.4c0.3,1.7-0.8,2.8-1.4,4.1C121.9,199.4,117.9,203.9,115.9,209.5z"/>
+<path style="fill:#E794A1;" d="M295,110c5.3,1,10.5,1.9,15.8,2.9c-1.4,1.3-3.5,1.8-3.9,4c-1.3,0.7-0.5,2.7-1.9,3.3
+ c-2.3-1.6-4.6-3.2-6.8-4.9C296.5,114,294.5,112.7,295,110z"/>
+<path style="fill:#E794A1;" d="M128.1,288.3c4.1,1.5,7.4,4.1,9.9,7.6C134,294.3,130,292.7,128.1,288.3z"/>
+<path style="fill:#E794A1;" d="M202,153c2.1-0.1,2.9,1.2,3,3C203.3,155.7,202.2,154.8,202,153z"/>
+<path style="fill:#E794A1;" d="M277.6,221.4c-1.4-0.4-2.8-0.7-4.2-2c2-0.6,3.4,0.5,4.7,1.4C278,221,277.8,221.2,277.6,221.4z"/>
+<path style="fill:#E794A1;" d="M191.1,165.7c-0.8-1.1-1.4-2.3-1.2-3.7C190.8,163.1,192.3,164,191.1,165.7z"/>
+<path style="fill:#F5CFD6;" d="M149,315c0.5,0.2,1.1,0.5,1.6,0.7c-0.1,0.2-0.3,0.4-0.4,0.6C149.8,315.9,149.4,315.4,149,315L149,315
+ z"/>
+<path style="fill:#F5CFD6;" d="M405,262.8c-1.1,0.2-2.2,0.2-3.1-0.7C403,262,404.1,261.8,405,262.8z"/>
+<path style="fill:#F5CFD6;" d="M367,162.1c0.8-0.1,1.6,0,2.1,0.8C368.2,163,367.5,162.9,367,162.1z"/>
+<path style="fill:#FFFFFF;" d="M331.9,150.8c-0.3,0.1-0.6,0.2-0.9,0.2C331.2,150.5,331.5,150.3,331.9,150.8z"/>
+<path style="fill:#F5CFD6;" d="M308,265.2c0.4,0.3,0.7,0.5,1.1,0.8C308.7,265.7,308.4,265.4,308,265.2z"/>
+<path style="fill:#E794A1;" d="M205,156c0.3,0.3,0.7,0.7,1,1C205.7,156.7,205.3,156.3,205,156z"/>
+<path style="fill:#FFFFFF;" d="M302.9,357c3-6.9,6.7-8,12.6-3.8c2.4,1.7,4.7,3.7,6.7,5.9c4.8,5.4,11.2,7.4,17.9,8.5
+ c5.4,0.9,8-1.5,8-7c0-3.9,1-7.4,3.1-10.7c3.2-2.5,5.9-6.9,10.5-2.1c3.4,4.3,6.6,8.7,10.1,12.9c1.5,1.8,3,4.2,6.2,3.1
+ c0.3,2.9-1.4,5.6-0.7,8.5c-0.4,1.1-0.9,2.2-1.2,3.3c-6.7,25.6-13.6,51.1-21.2,76.4c-0.6,0.3-0.8,0.7-0.6,1.3
+ c-0.1,0.2-0.3,0.5-0.3,0.8c-4.8,4.2-5.7,4-8-2.3c-0.3-0.9-0.8-1.8-1.2-2.7c-0.6-3.9-2.1-7.8-1.6-11.8c1.7-14,3.4-27.9,5.3-41.9
+ c0.5-3.7,0-6.9-1.5-10.1c-0.5-1.1-0.3-3-2.1-3c-2.1,0.1-1.8,2-2.1,3.4c-3,11.9-4.5,24.1-6.7,36.2c-4,22-5.8,44.4-11.1,66.3
+ c-4.5,6.5-5.3,6.6-12.9,1c-0.7-2.4-5.2-0.7-4.4-5.9c2.9-17.4,4.6-34.9,6.6-52.4c1.6-13.9,1.6-27.9,2.2-41.9c0.2-4.9,0.3-9.6-2.3-14
+ c-1.4-2.3-1.9-6.3-5.2-5.8c-2.8,0.5-2.4,4.2-3.1,6.7c-1.5-1.9-0.7-4.1-0.8-6.1C304.7,365.4,304.6,361.1,302.9,357z"/>
+<path style="fill:#110D0E;" d="M457.9,309.9c0.9,0.7,1.7,1.7,2.7,2c6,1.8,7.2,6.1,6.3,11.6c-0.7,4.8-2.9,6.3-7.9,5.8
+ c-7.6-0.7-15-2.7-22.5-4.1c0.1,0.4,0.1,0.8,0.2,1c1.7,2.6,4.9,5.3,2.6,8.3c-2.4,3.3-6.2,1-9.1-0.2c-5.2-2.1-9.8-5.5-15.8-5.4
+ c3.1-2,6.4,0.3,9.7-0.6c4.1-1.2,7.9-2.4,11.4-5.2c6.2-4.7,13-8.7,19.5-13C456.1,310.1,457,310,457.9,309.9z"/>
+<path style="fill:#110D0E;" d="M414.1,328.9c-5.9,3.1-5.3,9-6.1,14.2c-0.5,3.3,0.6,8.1-2.6,9.5c-3.2,1.4-5.2-3.3-7.5-5.4
+ c-3.8-3.6-8.8-4.9-12.9-7.9c2.7-0.4,5.5-1.2,8.2-1.2c5.4,0,10.6,0.7,13.8-5.5C408.2,330.2,411.1,328.8,414.1,328.9z"/>
+<path style="fill:#110D0E;" d="M378,363.7c-3.1,1.2-4.7-1.3-6.2-3.1c-3.5-4.2-6.8-8.6-10.1-12.9c1.1-0.6,2.4-1.8,3.4-1.6
+ c5.3,0.7,9.7-0.9,13.7-4.2c-1.4,2.6-1.1,5.3-0.8,8.1c0,2.3,0.1,4.6,0.1,6.9C378.2,359.2,379,361.5,378,363.7z"/>
+<path style="fill:#110D0E;" d="M477,295.8c2.4,3.6,6.7,6.3,5.4,11.6c-7.6,2.5-15.2,0.3-22.9,0.6c0.1-0.3,0.3-0.6,0.4-0.9
+ c5.6-3.3,11.1-6.8,16.1-11C476.4,296,476.7,295.9,477,295.8z"/>
+<path style="fill:#110D0E;" d="M482.9,280c3,2.1,5.1,5.1,7.1,8.1c2.5,3.9,0.9,6.5-3.6,6.3c-2.8-0.1-5.5-1-8.2-1.5
+ c-0.1-0.3-0.2-0.5-0.3-0.8C478,287.4,479,283.1,482.9,280z"/>
+<path style="fill:#F5CFD6;" d="M477.8,292.1c0.1,0.3,0.2,0.5,0.3,0.8c-0.4,1-0.8,1.9-1.2,2.9c-0.3,0.1-0.6,0.2-0.9,0.3
+ c-1-2.4-3.1-4-4.4-6.4C473.7,290.5,475.8,291.3,477.8,292.1z"/>
+<path style="fill:#F5CFD6;" d="M347.6,350.1c-4.1,1.9-8.3,1.1-12.5,0.6C339.2,349.4,343.5,350.5,347.6,350.1z"/>
+<path style="fill:#F5CFD6;" d="M457.9,309.9c-0.9,0.1-1.9,0.2-2.8,0.3c-0.3-1.3-2.4-1.1-2.3-3c1.8,0.3,3.5,0.6,5.2,0.9
+ C458,308.7,458,309.3,457.9,309.9z"/>
+<path style="fill:#F7E3E5;" d="M456,199.2c0-1.4,0.6-2.2,2-2.2C458,198.4,457.3,199,456,199.2z"/>
+<path style="fill:#F5CFD6;" d="M460,307c-0.1,0.3-0.3,0.6-0.4,0.9c-0.5,0-1,0.1-1.6,0.1C458.6,307.7,459.3,307.4,460,307z"/>
+<path style="fill:#F7E3E5;" d="M289,305.2c-0.3,0.4-0.7,0.5-1,0C288.3,305.2,288.7,305.2,289,305.2z"/>
+<path style="fill:#FFFFFF;" d="M243,387c0-7,0-14.1,0-21.1c0-1.6,0-3.3-1-4.7c2.9-2.3,4.3-0.9,6,1.8c3.8,6.3,8.2,12.1,16.7,11.8
+ c1.9,1.8,1.1,4.1,1.1,6.1c0.1,4.5-0.9,9.5,7.2,9.5c-6.7-0.7-6.4,2.3-5.5,6.4c0.9,4,0.7,8.2,1.2,12.3c2.5,20.8,5,41.7,8.2,62.4
+ c0.2,1.3,0.5,2.3,2,2.4c1.3,6,0.8,12.4,4.2,18c-3.8,6.2-6.7,6.4-12,1.4c-2.3-2.2-3.3-5.9-7-6.6c-2.2-20.1-4.8-40.2-6.6-60.3
+ c-1.1-11.9-4.5-23-9.7-33.6C246.8,390.6,245.9,387.8,243,387z"/>
+<path style="fill:#FFFFFF;" d="M280,363c0.3-1.1,0.6-2.2,1.6-2.8c4.3,8.1,6.9,9.6,13.3,7.9c0.2,26.1,1.2,52.1,4,79
+ c2.9-3.7,1.6-7,2.2-10.1c0.3,0,0.5,0,0.8,0c0.1,13.9-1.8,27.8-1.1,41.7c0.1,2.5-0.3,4.9-1,7.3c-3.5,5.1-8.8,6-14.4,6
+ c0.6-31.6,2-63.2,1.5-94.8c-0.1-6.1-1.9-12.1-6-17C280.4,374.4,282.2,368.6,280,363z"/>
+<path style="fill:#5F5F5F;" d="M299.9,486c0.8-2.4,1.2-4.8,1-7.3c-0.8-13.9,1.1-27.8,1.1-41.7c1.8-13.9,1.8-27.9,2.6-41.8
+ c0.4-6.4,0.9-12.9,1.3-19.3c0.6-2.5,0.3-6.3,3.1-6.7c3.3-0.5,3.8,3.4,5.2,5.8c2.6,4.3,2.5,9,2.3,14c-0.7,14-0.6,28-2.2,41.9
+ c-2,17.5-3.7,35-6.6,52.4c-0.9,5.1,3.7,3.5,4.4,5.9c-3.4-0.6-6.2-0.2-6.6,4.1c-0.1,0.6-0.5,1.3-1.3,1.1c-1-0.2-1.8-0.8-1.9-2
+ C301.9,490,301.7,487.7,299.9,486z"/>
+<path style="fill:#5F5F5F;" d="M324.9,488.1c5.2-21.8,7-44.2,11.1-66.3c2.2-12.1,3.7-24.3,6.7-36.2c0.3-1.4,0-3.3,2.1-3.4
+ c1.8,0,1.6,1.9,2.1,3c1.5,3.2,2.1,6.4,1.5,10.1c-2,13.9-3.6,27.9-5.3,41.9c-0.5,4,1,7.9,1.6,11.8c-2.1,0.1-1.1-2.5-2.3-2.9
+ c-2.9,11.6-3.1,23.6-6.5,35c-1.4,4.5-3.4,8-9.2,6.3C326.2,487.2,325.5,487.8,324.9,488.1z"/>
+<path style="fill:#5F5F5F;" d="M280.9,380.1c4.1,4.9,5.9,10.9,6,17c0.5,31.6-0.8,63.2-1.5,94.8c-0.8,0-1.5,0-2.3,0.1
+ c-3.4-5.5-2.9-11.9-4.2-18c0-17.9,1.2-35.9-0.8-53.7c-1-8.9-1.8-17.9-1-26.8C277.6,388.9,276.6,383.7,280.9,380.1z"/>
+<path style="fill:#110D0E;" d="M392.6,450.6c7.1-28.3,19.5-54.7,30.9-81.3c3.9-9,7.8-18,12.7-26.5c0.7-1.2,1.3-3.3,3.2-2.3
+ c1.5,0.8,0.2,2.5-0.3,3.6c-15.2,35.7-30.5,71.4-45.7,107.1C393,451,392.8,450.8,392.6,450.6z"/>
+<path style="fill:#110D0E;" d="M403.3,362.9c-6.5,32.8-17.8,64.3-27.7,96.7C372.7,444.3,395.1,376.5,403.3,362.9z"/>
+<path style="fill:#110D0E;" d="M354.8,451.9c7.6-25.3,14.6-50.8,21.2-76.4c0.3-1.1,0.8-2.2,1.2-3.3c1.5,10.2,0,20-3.1,29.8
+ c-7.2,23.1-14.5,46-22.7,68.8c-0.2,0.5-0.5,0.9-1.4,2.4c0.8-7.4,4.3-13,3.9-19.3c0.1-0.3,0.2-0.5,0.3-0.8
+ C354.9,452.9,355,452.5,354.8,451.9z"/>
+<path style="fill:#110D0E;" d="M448.3,352.3c-5.5,13.7-11,27.4-16.7,41c-6.1,14.7-12.4,29.3-18.7,44c-0.6,1.5-1.4,3-2.5,5.3
+ c-0.7-3.4,1-5.2,1.7-7.1c10.5-26.9,19.7-54.3,33.5-79.8c0.7-1.3,1.5-2.6,2.2-3.9C448,352,448.1,352.1,448.3,352.3z"/>
+<path style="fill:#BDBCBC;" d="M378.1,356.9c0-2.3-0.1-4.6-0.1-6.9C379.4,352.3,379.6,354.6,378.1,356.9z"/>
+<path style="fill:#110D0E;" d="M450,348c0.1,1.7-0.7,3-1.7,4.3c-0.1-0.1-0.3-0.3-0.4-0.4C448.2,350.4,448.5,348.8,450,348L450,348z"
+ />
+<path style="fill:#110D0E;" d="M393.3,451.2c-0.4,0.9-0.8,1.8-1.3,2.7v0.1c0.2-1.1,0.3-2.3,0.5-3.4C392.8,450.8,393,451,393.3,451.2
+ z"/>
+<path style="fill:#5F5F5F;" d="M406.6,450.6c0,0.1,0.1,0.3,0.1,0.4c-0.2,0-0.4,0.1-0.6,0.1c0-0.1,0-0.3,0.1-0.4
+ C406.3,450.6,406.5,450.6,406.6,450.6z"/>
+<path style="fill:#110D0E;" d="M451.6,343.8c0,0.1,0.1,0.3,0.1,0.4c-0.1,0.5-0.2,0.5-0.4,0.1c0-0.1,0-0.3,0.1-0.4
+ C451.4,343.9,451.5,343.9,451.6,343.8z"/>
+<path style="fill:#110D0E;" d="M450,348c0.1-0.5,0.2-0.9,0.2-1.4c0.2,0.1,0.4,0.2,0.5,0.4C450.5,347.3,450.3,347.7,450,348L450,348z
+ "/>
+<path style="fill:#110D0E;" d="M409.8,444c-0.2,0.2-0.4,0.3-0.6,0.4c0-0.3-0.1-0.6-0.1-0.9c0-0.1,0.2-0.3,0.3-0.4
+ C409.6,443.5,409.7,443.8,409.8,444z"/>
+<path style="fill:#5F5F5F;" d="M407.9,448.3c-0.1,0.1-0.3,0.2-0.4,0.3c-0.1-0.3-0.2-0.5-0.3-0.8c0-0.1,0.2-0.2,0.4-0.3
+ C407.7,447.7,407.8,448,407.9,448.3z"/>
+<path style="fill:#110D0E;" d="M392,454c-0.1,0.1-0.1,0.2-0.2,0.3C391.9,454.2,392,454.1,392,454C392.1,454,392,454,392,454z"/>
+<path style="fill:#F7E3E5;" d="M306.9,116.8c0.5-2.2,2.6-2.7,3.9-4c6.5,0.6,12.5,2.7,18,6.2c1.1,0.6,2.2,1.2,1.9,2.5
+ c-0.4,1.9-1.8,0.6-2.8,0.6c-4.2,0.1-8.4-1-12.6,1.3C311.6,125.6,307.9,122.4,306.9,116.8z"/>
+<path style="fill:#F7E3E5;" d="M343.1,91.8c-0.1,0-0.2-0.1-0.3-0.1c0.1-0.1,0.3-0.3,0.4-0.4c0.1,0.1,0.2,0.2,0.3,0.3
+ C343.3,91.6,343.2,91.7,343.1,91.8z"/>
+<path style="fill:#E794A1;" d="M111.9,299.9c-0.9,0.8-1.4,2.3-3.1,2c-3.5-0.7-6.7-2.1-9.7-4c-0.7-0.6-1.3-1.2-2-1.8
+ c-0.1-0.2-0.2-0.3-0.3-0.4c0.5-2.7,2.6-1.4,4.1-1.7C104.5,296.1,108.8,297,111.9,299.9z"/>
+<path style="fill:#F7E3E5;" d="M101,294c-1.5,0.4-3.6-1-4.1,1.7c-2.9,0-4-1.9-4.7-4.4c0.4,0.2,0.8,0.5,1.2,0.7
+ c0.1-0.4,0.5-0.9,0.3-1.2c-0.5-1-1.2-1.9-1.9-2.8c1.3-1.9,3.3-0.7,5.4-1.2c-3.4,2.3-1.6,3.3,0.4,3.8C99.7,291.2,101.3,291.5,101,294
+ z"/>
+<path style="fill:#E794A1;" d="M80.1,275.2c0-0.7-0.1-1.5-0.1-2.2c2.1,1.6,4.9,2.7,4,6.2c-1.1,0-0.7,0.9-0.8,1.5
+ C82.1,278.8,81.1,277,80.1,275.2z"/>
+<path style="fill:#110D0E;" d="M90,286c0,0.7,1.1,1.3,0.1,2c-2.3-1.2-3.3-3.5-4.8-5.4c0.3-0.2,0.5-0.5,0.8-0.7
+ c0.9,0.8,1.8,1.5,2.7,2.3l-0.1-0.1C89.2,284.8,89.6,285.4,90,286z"/>
+<path style="fill:#110D0E;" d="M91.9,288.1c0.6,0.9,1.3,1.8,1.9,2.8c0.1,0.2-0.2,0.8-0.3,1.2c-0.4-0.2-0.8-0.5-1.2-0.7
+ c-0.7-1.1-1.5-2.3-2.2-3.4C90.8,287,91.3,288.1,91.9,288.1z"/>
+<path style="fill:#F7E3E5;" d="M176,333c2.3-0.6,4.1,0.1,5.5,2C179.4,335.2,177.4,334.9,176,333z"/>
+<path style="fill:#FFFFFF;" d="M187.5,338c2.2-0.3,4.1,0.3,5.5,2C190.8,340.2,189.1,339.3,187.5,338z"/>
+<path style="fill:#F7E3E5;" d="M97.2,296.1c0.7,0.6,1.3,1.2,2,1.8C98,298,97,297.7,97.2,296.1z"/>
+<path style="fill:#FFFFFF;" d="M193,340c0.9,0,1.7,0,2,1C194.1,341.1,193.3,341,193,340z"/>
+<path style="fill:#F7E3E5;" d="M181.5,335c1.2-0.2,2.2,0.1,3,1C183.4,336.1,182.3,335.9,181.5,335z"/>
+<path style="fill:#110D0E;" d="M83.9,280.9c0.8-1,1.3,0.2,2,0.2c0,0.3,0.1,0.5,0.1,0.8c-0.3,0.2-0.5,0.5-0.8,0.7
+ C84.8,282.1,84.4,281.5,83.9,280.9z"/>
+<path style="fill:#110D0E;" d="M83.2,280.7c0.1-0.6-0.4-1.4,0.8-1.5c0,0.6,1.1,1.2,0.1,1.9C83.8,280.9,83.5,280.8,83.2,280.7z"/>
+<path style="fill:#BDBCBC;" d="M280.9,380.1c-4.3,3.6-3.4,8.8-3.8,13.4c-0.8,8.9,0,17.9,1,26.8c2.1,17.9,0.9,35.8,0.8,53.7
+ c-1.5-0.1-1.8-1.1-2-2.4c-3.2-20.8-5.7-41.6-8.2-62.4c-0.5-4.1-0.3-8.3-1.2-12.3c-0.9-4.1-1.3-7.1,5.5-6.4c-8.1,0-7.1-5-7.2-9.5
+ c0-2.1,0.7-4.4-1.1-6.1c6.4-2.2,11-6.8,15.2-11.8C282.2,368.6,280.4,374.4,280.9,380.1z"/>
+<path style="fill:#BDBCBC;" d="M305.8,375.9c-0.4,6.4-0.9,12.9-1.3,19.3c-0.9,0.3-1.4,0.8-1.4,1.7c-0.6,13.4-1.3,26.7-1.9,40.1
+ c-0.6,3,0.7,6.3-2.2,10.1c-2.8-26.9-3.7-52.9-4-79c3.9-2.8,5.6-7.1,7.9-11c1.7,4.1,1.7,8.5,2.1,12.8
+ C305.2,371.8,304.3,374,305.8,375.9z"/>
+<path style="fill:#F7E3E5;" d="M86.1,281.9c0-0.3-0.1-0.5-0.1-0.8c0.2-0.7,0.1-1.8,1.3-1.3c2.2,0.8,1.7,2.7,1.5,4.4
+ C87.9,283.5,87,282.7,86.1,281.9z"/>
+<path style="fill:#F7E3E5;" d="M90,286c-0.4-0.6-0.8-1.2-1.2-1.8C90,284.2,91.6,284.1,90,286z"/>
+<path style="fill:#E794A1;" d="M80,273c-1.5-0.3-1.6-1.6-1.8-2.8C79.4,270.7,80,271.7,80,273z"/>
+<path style="fill:#F7E3E5;" d="M144,315c-0.3-0.3-0.7-0.6-1-0.9C143.3,314.3,143.7,314.7,144,315z"/>
+<path style="fill:#110D0E;" d="M484.4,307.4c0.6-1.4,1.1-2.8,2.5-3.5c0.1,0.1,0.3,0.3,0.4,0.4c-0.7,1.3-1.4,2.6-2.1,3.9
+ C485,307.9,484.7,307.7,484.4,307.4z"/>
+<path style="fill:#110D0E;" d="M487.9,302.9c-0.2-1,0.1-1.6,1-2l0.2,0.2C489.1,302,488.9,302.7,487.9,302.9L487.9,302.9z"/>
+<path style="fill:#110D0E;" d="M488.9,300.9c0.2-0.2,0.3-0.5,0.5-0.7c0.5,0.5,0.3,0.8-0.3,0.9C489.2,301.2,488.9,300.9,488.9,300.9z
+ "/>
+<path style="fill:#110D0E;" d="M486.9,303.9c0.2-0.5,0.3-1.1,1.1-0.9l0.1,0.1c-0.2,0.4-0.5,0.9-0.7,1.3
+ C487.2,304.2,487,304,486.9,303.9z"/>
+<path style="fill:#F7E3E5;" d="M115.9,209.5c2-5.7,6.1-10.2,8.7-15.5c0.7-1.3,1.8-2.4,1.4-4.1l0,0c0.3-0.3,0.6-0.5,0.9-0.8
+ c2.4-2.6,4.2-0.8,5.7,1c2.9,3.2,5.6,6.5,8.3,9.8l0,0c-1.6-0.4-3.2-0.7-4.8-1.1c-0.9-0.2-2.6-0.7-2.7-0.5c-2,3.8-7.1,3.8-8.8,7.1
+ c-1.6,3.1-1.1,7.1,0.3,10.6c1.3,3.4,2.8,6.7,3.7,10.3C121.4,222.9,115.8,218.3,115.9,209.5z"/>
+<path style="fill:#F5CFD6;" d="M100.9,230.8c0.1-0.6,0.2-1.3,0.3-1.9c1.3,1.4,2,3.1,1.9,5L103,234
+ C100.9,233.9,101,232.3,100.9,230.8z"/>
+<path style="fill:#F5CFD6;" d="M103,234c1,0.2,1.9,0.5,1.7,1.8c-0.1,0.3-0.7,0.8-0.9,0.7C102.6,236.1,103,235,103,234L103,234z"/>
+<path style="fill:#F7E3E5;" d="M141,200c0.7,0.1,1.6,0.1,1.5,1.2c0,0.1-0.2,0.3-0.3,0.3C141.1,201.6,141.1,200.7,141,200L141,200z"
+ />
+<path style="fill:#E794A1;" d="M126.9,189.2c-0.3,0.3-0.6,0.5-0.9,0.8C126.3,189.8,126.6,189.5,126.9,189.2z"/>
+<path style="fill:#F7E3E5;" d="M400,184.2c1.3-0.1,2.6-0.2,4-0.2c2.5,3.2,6.5,2.7,9.8,3.8c2.5,0.8,4.7,2.3,7.3,2.9
+ c0.9,0.2,1.9,0.9,1.6,2.1s-1.4,1.2-2.4,1.2c-7.1,0.4-14.2-0.5-21.3-1.4c-7.7-1-15.4-2.3-23.1-2.4c-6.4,0-12.4-1.8-18.7-2.4
+ c-9.1-0.9-18.1-3.4-27.2-5.3c-1.1-0.2-2.1-0.9-3.1-1.4c1.3-0.2,2.8,0.4,3.9-0.9c17.3,2.5,34.8,3.8,52.3,4.7
+ c5.3,0.3,10.6,0.1,15.8-0.6C399.3,184.7,399.7,184.6,400,184.2z"/>
+<path style="fill:#F7E3E5;" d="M185,317c-2-0.7-4-1.5-6-2.2C181.6,314,184,313.8,185,317L185,317z"/>
+<path style="fill:#F7E3E5;" d="M227.3,110c-0.1-1-0.2-2-0.3-3C228.3,107.9,228.2,108.9,227.3,110z"/>
+<path style="fill:#F5CFD6;" d="M400,184.2c-0.3,0.4-0.7,0.5-1,0C399.3,184.2,399.7,184.2,400,184.2z"/>
+<path style="fill:#7A7A7A;" d="M354.8,451.9c0.2,0.6,0,1.1-0.6,1.3C354,452.5,354.3,452.1,354.8,451.9z"/>
+<path style="fill:#F7E3E5;" d="M301.2,437c0.6-13.4,1.3-26.7,1.9-40.1c0-1,0.6-1.5,1.4-1.7c-0.8,13.9-0.8,27.9-2.6,41.8
+ C301.7,437,301.4,437,301.2,437z"/>
+</svg>
diff --git a/main/app/sprinkles/core/assets/userfrosting/js/AdminLTE-custom.js b/main/app/sprinkles/core/assets/userfrosting/js/AdminLTE-custom.js new file mode 100755 index 0000000..177c845 --- /dev/null +++ b/main/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 <https://github.com/userfrosting> + * @license MIT <http://opensource.org/licenses/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/main/app/sprinkles/core/assets/userfrosting/js/AdminLTE.js b/main/app/sprinkles/core/assets/userfrosting/js/AdminLTE.js new file mode 100755 index 0000000..54b6055 --- /dev/null +++ b/main/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 <http://www.almsaeedstudio.com> + * @Email <abdullah@almsaeedstudio.com> + * @version 2.3.6 + * @license MIT <http://opensource.org/licenses/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 = $('<div class="overlay"><div class="fa fa-refresh fa-spin"></div></div>'); + + 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/main/app/sprinkles/core/assets/userfrosting/js/attrchange.js b/main/app/sprinkles/core/assets/userfrosting/js/attrchange.js new file mode 100755 index 0000000..00878d3 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/js/fortress-jqueryvalidation-methods.js b/main/app/sprinkles/core/assets/userfrosting/js/fortress-jqueryvalidation-methods.js new file mode 100755 index 0000000..b008cf2 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/js/handlebars-helpers.js b/main/app/sprinkles/core/assets/userfrosting/js/handlebars-helpers.js new file mode 100755 index 0000000..96f47bb --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/js/query-string.js b/main/app/sprinkles/core/assets/userfrosting/js/query-string.js new file mode 100755 index 0000000..5e0d780 --- /dev/null +++ b/main/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 <code>"foo=bar&person[age]=3"</code> + * @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/main/app/sprinkles/core/assets/userfrosting/js/tablesorter/widget-sort2Hash.js b/main/app/sprinkles/core/assets/userfrosting/js/tablesorter/widget-sort2Hash.js new file mode 100755 index 0000000..1be9c85 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js new file mode 100755 index 0000000..77f35c7 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-alerts.js @@ -0,0 +1,289 @@ +/** + * 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 <https://alexanderweissman.com> + */ +;(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 = '<ul>'; + + // 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('<li class=' + this.settings.alertMessageClass + '>{{ message }}</li>'); + for (i = 0; i < this.alerts.length; i++) { + alertMessage += aggTemplate(this.alerts[i]); + } + + alertMessage += '</ul>'; + + // 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/main/app/sprinkles/core/assets/userfrosting/js/uf-captcha.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-captcha.js new file mode 100755 index 0000000..ed3ecea --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/js/uf-collection.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-collection.js new file mode 100755 index 0000000..a2afc6e --- /dev/null +++ b/main/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 <https://alexanderweissman.com> + */ +;(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/main/app/sprinkles/core/assets/userfrosting/js/uf-copy.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-copy.js new file mode 100755 index 0000000..a47f6b8 --- /dev/null +++ b/main/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/main/app/sprinkles/core/assets/userfrosting/js/uf-form.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-form.js new file mode 100755 index 0000000..15952ab --- /dev/null +++ b/main/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 <form> element, and contain a <button type=submit> element for submission. + * + * Forms are then set to submit via AJAX when the submit button is clicked. + * + * === USAGE === + * + * uf-form can be initialized on a form element as follows: + * + * $('#myForm').ufForm(options); + * + * `options` is an object containing any of the following parameters: + * @param {JSON} validators An object containing two keys, "rules" and "messages", which specify the jQueryvalidation rules to use. + * @param {Object} msgTarget a jQuery selector specifying the element where any error messages should be inserted. Defaults to looking for a container with class .js-form-alerts inside this form. + * @param {Callback} beforeSubmitCallback a callback function to execute immediately after form validation, before the form is submitted. + * @param {bool} binaryCheckboxes specify whether to submit checkboxes as binary values 0 and 1, instead of omitting unchecked checkboxes from submission. + * + * == EVENTS == + * + * ufForm triggers the following events: + * + * `submitSuccess.ufForm`: triggered when the form is successfully submitted, after re-enabling the submit button. + * `submitError.ufForm`: triggered when the form submission (not validation) fails, after re-enabling the submit button + * and displaying any error messages. + * + * UserFrosting https://www.userfrosting.com + * @author Alexander Weissman <https://alexanderweissman.com> + * + * @todo Implement proper fallback for when `set` function isn't supported by FormData. + */ +;(function($, window, document, undefined) { + 'use strict'; + + // Define plugin name and defaults. + var pluginName = 'ufForm', + defaults = { + validators: { + 'rules' : {}, + 'messages': {} + }, + submittingText : "<i class='fa fa-spinner fa-spin'></i>", + beforeSubmitCallback: null, + binaryCheckboxes : true, // submit checked/unchecked checkboxes as 0/1 values + keyupDelay : 0, + DEBUG: false + }; + + // Constructor + function Plugin (element, options) { + this.element = element[0]; + this.$element = $(this.element); + var lateDefaults = { + encType : (typeof this.$element.attr('enctype') !== 'undefined') ? this.$element.attr('enctype') : '', + msgTarget: this.$element.find('.js-form-alerts:first') + }; + this.settings = $.extend(true, {}, defaults, lateDefaults, options); + this._defaults = $.extend(true, {}, defaults, lateDefaults); + this._name = pluginName; + this._debugAjax = (typeof site !== 'undefined') && site.debug.ajax; + + // Detect changes to element attributes + this.$element.attrchange({ + callback: function (event) { + this.element = event.target; + }.bind(this) + }); + + // Setup validator + this.validator = this.$element.validate({ + rules : this.settings.validators.rules, + messages : this.settings.validators.messages, + submitHandler: $.proxy(this._submitHandler, this), + onkeyup : $.proxy(this._onKeyUp, this) + }); + + return this; + } + + // Functions + + /** + * Handles the form submission after successful client-side validation. + */ + Plugin.prototype._submitHandler = function(form, event) { + // Execute any "before submit" callback + if (this.settings.beforeSubmitCallback) { + this.settings.beforeSubmitCallback(); + } + + var $form = $(form); + + // Set "loading" text for submit button, if it exists, and disable button + var submitButton = $form.find('button[type=submit]'); + if (submitButton) { + var submitButtonText = submitButton.html(); + submitButton.prop('disabled', true); + submitButton.html(this.settings.submittingText); + } + + // Get basic request parameters. + var reqParams = { + converters: { + // Override jQuery's strict JSON parsing + 'text json': function(result) { + try { + // First try to use native browser parsing + if (typeof JSON === 'object' && typeof JSON.parse === 'function') { + return JSON.parse(result); + } else { + return $.parseJSON(result); + } + } catch (e) { + // statements to handle any exceptions + console.warn('Could not parse expected JSON response.'); + return {}; + } + } + }, + + dataType: this._debugAjax ? 'html' : 'json', + type: this.$element.attr('method'), + url: this.$element.attr('action') + }; + + // Get the form encoding type from the users HTML, and chose an encoding form. + if (this.settings.encType.toLowerCase() === 'multipart/form-data') { + reqParams.data = this._multipartData($form); + // add additional params to fix jquery errors + reqParams.cache = false; + reqParams.contentType = false; + reqParams.processData = false; + } else { + reqParams.data = this._urlencodeData($form); + } + + // Submit the form via AJAX + $.ajax(reqParams).then( + // Submission successful + $.proxy(function(data, textStatus, jqXHR) { + // Restore button text and re-enable submit button + if (submitButton) { + submitButton.prop('disabled', false ); + submitButton.html(submitButtonText); + } + + this.$element.trigger('submitSuccess.ufForm', [data, textStatus, jqXHR]); + return jqXHR; + }, this), + // Submission failed + $.proxy(function(jqXHR, textStatus, errorThrown) { + // Restore button text and re-enable submit button + if (submitButton) { + submitButton.prop('disabled', false ); + submitButton.html(submitButtonText); + } + // Error messages + if (this._debugAjax && jqXHR.responseText) { + this.$element.trigger('submitError.ufForm', [jqXHR, textStatus, errorThrown]); + 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'); + this.settings.msgTarget.on('render.ufAlerts', $.proxy(function () { + this.$element.trigger('submitError.ufForm', [jqXHR, textStatus, errorThrown]); + }, this)); + } + return jqXHR; + }, this) + ); + }; + + /** + * Helper function for encoding data as urlencoded + */ + Plugin.prototype._urlencodeData = function(form) { + // Serialize and post to the backend script in ajax mode + var serializedData; + if (this.settings.binaryCheckboxes) { + serializedData = form.find(':input').not(':checkbox').serialize(); + // Get unchecked checkbox values, set them to 0 + form.find('input[type=checkbox]:enabled').each(function() { + if ($(this).is(':checked')) { + serializedData += '&' + encodeURIComponent(this.name) + '=1'; + } else { + serializedData += '&' + encodeURIComponent(this.name) + '=0'; + } + }); + } + else { + serializedData = form.find(':input').serialize(); + } + + return serializedData; + }; + + /** + * Helper function for encoding data as multipart/form-data + */ + Plugin.prototype._multipartData = function(form) { + // Use FormData to wrap form contents. + // https://developer.mozilla.org/en/docs/Web/API/FormData + var formData = new FormData(form[0]); + // Serialize and post to the backend script in ajax mode + if (this.settings.binaryCheckboxes) { + // Get unchecked checkbox values, set them to 0. + var checkboxes = form.find('input[type=checkbox]:enabled'); + // Feature detection. Several browsers don't support `set` + if (typeof formData.set !== 'function') { + this.settings.msgTarget.ufAlerts('push', 'danger', "Your browser is missing a required feature. This form will still attempt to submit, but if it fails, you'll need to use Chrome for desktop or FireFox for desktop."); + } else { + checkboxes.each(function() { + if ($(this).is(':checked')) { + // this replaces checkbox value with 1 (as we're using binaryCheckboxes). + formData.set(this.name, 1); + // this explicitly adds unchecked boxes. + } else { + formData.set(this.name, 0); + } + }); + } + } + + return formData; + }; + + Plugin.prototype._onKeyUp = function(element, event) { + var validator = this.validator; + // See http://stackoverflow.com/questions/41363409/jquery-validate-add-delay-to-keyup-validation + setTimeout(function() { + // Avoid revalidate the field when pressing one of the following keys + // Shift => 16 + // Ctrl => 17 + // Alt => 18 + // Caps lock => 20 + // End => 35 + // Home => 36 + // Left arrow => 37 + // Up arrow => 38 + // Right arrow => 39 + // Down arrow => 40 + // Insert => 45 + // Num lock => 144 + // AltGr key => 225 + var excludedKeys = [ + 16, 17, 18, 20, 35, 36, 37, + 38, 39, 40, 45, 144, 225 + ]; + + if ( event.which === 9 && validator.elementValue( element ) === '' || $.inArray( event.keyCode, excludedKeys ) !== -1 ) { + return; + } else if ( element.name in validator.submitted || element.name in validator.invalid ) { + validator.element( element ); + } + }, this.settings.keyupDelay); + }; + + // 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/main/app/sprinkles/core/assets/userfrosting/js/uf-init.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-init.js new file mode 100755 index 0000000..2d447dd --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-init.js @@ -0,0 +1,26 @@ +/** + * Contains code that should be initialized in all UF pages. + */ + +$(document).ready(function() { + + // Override Bootstrap's tendency to steal focus from child elements in modals (such as select2). + // See https://github.com/select2/select2/issues/1436#issuecomment-21028474 + $.fn.modal.Constructor.prototype.enforceFocus = function() {}; + + // Link all copy buttons + $.uf.copy('.js-copy-trigger'); + + // Display page alerts + if ($("#alerts-page").length) { + $("#alerts-page").ufAlerts(); + $("#alerts-page").ufAlerts('fetch').ufAlerts('render'); + } + + // Set any JS variables that might be missing from config.js.twig + if (typeof site.uf_table === 'undefined') { + site['uf_table'] = { + use_loading_transition: true + }; + } +}); diff --git a/main/app/sprinkles/core/assets/userfrosting/js/uf-jqueryvalidation-config.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-jqueryvalidation-config.js new file mode 100755 index 0000000..3969ad6 --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-jqueryvalidation-config.js @@ -0,0 +1,49 @@ +/** + * Set jQuery.validate settings for bootstrap integration + */ +jQuery.validator.setDefaults({ + highlight: function(element) { + var formGroup = jQuery(element).closest('.form-group'); + formGroup.addClass('has-error has-feedback'); + formGroup.removeClass('has-success'); + formGroup.find('.form-control-feedback').remove(); + formGroup.find('.form-control-icon').show(); + + // Hide any help block text + formGroup.find('.help-block').hide(); + }, + unhighlight: function(element) { + var formGroup = jQuery(element).closest('.form-group'); + + formGroup.removeClass('has-error'); + + // Completely remove the error block, rather than just clearing the text (jqueryvalidation's default action) + formGroup.find('.error-block').remove(); + + // Re-show any help block text + formGroup.find('.help-block').show(); + + // Reshow any non-feedback icons if there is an error + if (formGroup.hasClass('has-error')) { + formGroup.find('.form-control-icon').show(); + } + }, + errorElement: 'p', + errorClass: 'error-block', + errorPlacement: function(error, element) { + if(element.parent('.input-group').length) { + error.insertAfter(element.parent()); + } else { + error.insertAfter(element); + } + }, + success: function(element) { + var formGroup = jQuery(element).closest('.form-group'); + formGroup.addClass('has-success has-feedback'); + formGroup.find('.form-control-feedback').remove(); + // Hide any non-feedback icons + formGroup.find('.form-control-icon').hide(); + // Add a new check mark + jQuery(element).after('<i class="fa fa-check form-control-feedback" aria-hidden="true"></i>'); + } +}); diff --git a/main/app/sprinkles/core/assets/userfrosting/js/uf-modal.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-modal.js new file mode 100755 index 0000000..b84a59a --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-modal.js @@ -0,0 +1,192 @@ +/** + * ufModal plugin. Handles modal windows that dynamically their fetch content from a specified URL. + * + * + * UserFrosting https://www.userfrosting.com + * @author Alexander Weissman https://alexanderweissman.com + */ +(function( $ ) +{ + /** + * The plugin namespace, ie for $('.selector').ufModal(options) + * + * Also the id for storing the object state via $('.selector').data() + */ + var PLUGIN_NS = 'ufModal'; + + var Plugin = function ( target, options ) + { + + this.$T = $(target); + + /** #### OPTIONS #### */ + this.options= $.extend( + true, // deep extend + { + sourceUrl : "", + ajaxParams: {}, + msgTarget : null, + DEBUG: false + }, + options + ); + + this.modal = null; + + this._init( target ); + + return this; + }; + + /** #### INITIALISER #### */ + Plugin.prototype._init = function ( target ) + { + var base = this; + var $el = $(target); + + // Delete any existing modals attached to the element (should have been deleted already anyway) + if ($el.find(".modal").length) { + $el.find(".modal").remove(); + } + + // Fetch and render the form + $.ajax({ + type: "GET", + url: base.options.sourceUrl, + data: base.options.ajaxParams, + cache: false + }) + .then( + // Fetch successful + function (data) { + // Append the form as a modal dialog to the body + base.modal = $(data); + $el.append(base.modal); + + base.modal.modal('show'); + + // Bind modal to be deleted when closed + base.modal.on("hidden.bs.modal", function () { + base.destroy(); + }); + + base.$T.trigger('renderSuccess.ufModal'); + return data; + }, + // Fetch failed + function (data) { + // Error messages + if ((typeof site !== "undefined") && site.debug.ajax && data.responseText) { + base.$T.trigger('renderError.ufModal'); + document.write(data.responseText); + document.close(); + } else { + if (base.options.DEBUG) { + console.log("Error (" + data.status + "): " + data.responseText ); + } + // Display errors on failure + // TODO: ufAlerts widget should have a 'destroy' method + if (!base.options.msgTarget.data('ufAlerts')) { + base.options.msgTarget.ufAlerts(); + } else { + base.options.msgTarget.ufAlerts('clear'); + } + + base.options.msgTarget.ufAlerts('fetch').ufAlerts('render'); + base.options.msgTarget.on("render.ufAlerts", function () { + base.$T.trigger('renderError.ufModal'); + }); + } + + base.destroy(); + + return data; + } + ); + }; + + Plugin.prototype.destroy = function () { + var base = this; + var $el = base.$T; + + // Delete the plugin object + base.delete; + + // Remove the modal from the selector + if (base.modal) { + base.modal.remove(); + } + + // Unbind any modal events bound to the selector + $el.off('.ufModal'); + + // Remove plugin name from selector's data-* attribute + $el.removeData(PLUGIN_NS); + }; + + Plugin.prototype.getModal = function () { + return this.modal; + }; + + /** + * EZ Logging/Warning (technically private but saving an '_' is worth it imo) + */ + Plugin.prototype.DLOG = function () + { + if (!this.DEBUG) return; + for (var i in arguments) { + console.log( PLUGIN_NS + ': ', arguments[i] ); + } + } + Plugin.prototype.DWARN = function () + { + this.DEBUG && console.warn( arguments ); + } + + +/*################################################################################### + * JQUERY HOOK + ###################################################################################*/ + + /** + * Generic jQuery plugin instantiation method call logic + * + * Method options are stored via jQuery's data() method in the relevant element(s) + * Notice, myActionMethod mustn't start with an underscore (_) as this is used to + * indicate private methods on the PLUGIN class. + */ + $.fn[ PLUGIN_NS ] = function( methodOrOptions ) + { + if (!$(this).length) { + return $(this); + } + var instance = $(this).data(PLUGIN_NS); + + // CASE: action method (public method on PLUGIN class) + if ( instance + && methodOrOptions.indexOf('_') != 0 + && instance[ methodOrOptions ] + && typeof( instance[ methodOrOptions ] ) == 'function' ) { + + return instance[ methodOrOptions ]( Array.prototype.slice.call( arguments, 1 ) ); + + + // CASE: argument is options object or empty = initialise + } else if ( typeof methodOrOptions === 'object' || ! methodOrOptions ) { + + instance = new Plugin( $(this), methodOrOptions ); // ok to overwrite if this is a re-init + $(this).data( PLUGIN_NS, instance ); + return $(this); + + // CASE: method called before init + } else if ( !instance ) { + console.warn( 'Plugin must be initialised before using method: ' + methodOrOptions ); + + // CASE: invalid method + } else if ( methodOrOptions.indexOf('_') == 0 ) { + console.warn( 'Method ' + methodOrOptions + ' is private!' ); + } else { + console.warn( 'Method ' + methodOrOptions + ' does not exist.' ); + } + }; +})(jQuery);
\ No newline at end of file diff --git a/main/app/sprinkles/core/assets/userfrosting/js/uf-table.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-table.js new file mode 100755 index 0000000..77aa30a --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-table.js @@ -0,0 +1,704 @@ +/** + * uf-table plugin. Sets up a Tablesorter table with sorting, pagination, and search, and fetches data from a JSON API. + * + * This plugin depends on query-string.js, which is used to convert a query string into a JSON object. + * + * jQuery plugin template adapted from https://gist.github.com/Air-Craft/1300890 + * + * === USAGE === + * + * Create a container element, and within it place your table, paging controls, and Handlebars templates for rendering the cells. + * + * - Your table should have a unique id, and your paging controls should be wrapped in an element with the `.js-uf-table-pager` class. + * - Create a button with the `.js-uf-table-download` class, and it will be automatically bound to trigger an AJAX request for downloading the table (CSV, etc). + * + <div id="widget-users"> + <table id="table-users" class="tablesorter table table-bordered table-hover table-striped" data-sortlist="[[0, 0]]"> + <thead> + <tr> + <th class="sorter-metatext" data-column-name="name" data-column-template="#user-table-column-info">User <i class="fa fa-sort"></i></th> + <th class="sorter-metanum" data-column-name="last_activity" data-column-template="#user-table-column-last-activity">Last Activity <i class="fa fa-sort"></i></th> + </tr> + </thead> + <tbody> + </tbody> + </table> + + <script id="user-table-column-info" type="text/x-handlebars-template"> + <td data-text="{{row.last_name}}"> + <strong> + <a href="{{site.uri.public}}/users/u/{{row.user_name}}">{{row.first_name}} {{row.last_name}} ({{row.user_name}})</a> + </strong> + <div> + <i class="fa fa-envelope"></i> <a href="mailto:{{row.email}}">{{row.email}}</a> + </div> + </td> + </script> + + <script id="user-table-column-last-activity" type="text/x-handlebars-template"> + {{#if row.last_activity_at }} + <td data-num="{{dateFormat row.last_activity_at format='x'}}"> + {{dateFormat row.last_activity_at format="dddd"}}<br>{{dateFormat row.last_activity_at format="MMM Do, YYYY h:mm a"}} + <br> + <i>{{row.last_activity.description}}</i> + </td> + {{ else }} + <td data-num="0"> + <i>Unknown</i> + </td> + {{/if }} + </script> + + <div class="pager pager-lg tablesorter-pager js-uf-table-pager"> + <span class="pager-control first" title="First page"><i class="fa fa-angle-double-left"></i></span> + <span class="pager-control prev" title="Previous page"><i class="fa fa-angle-left"></i></span> + <span class="pagedisplay"></span> + <span class="pager-control next" title="Next page"><i class="fa fa-angle-right"></i></span> + <span class="pager-control last" title= "Last page"><i class="fa fa-angle-double-right"></i></span> + <br><br> + Jump to Page: <select class="gotoPage"></select> • Show: + <select class="pagesize"> + <option value="5">5</option> + <option value="10">10</option> + </select> + </div> + + <button class="btn btn-sm btn-default js-uf-table-download">Download CSV</button> + </div> + * + * 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 <https://alexanderweissman.com> + */ +;(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 : '<label><input type="checkbox"> <span>{name}</span></label>', + 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('<tr>'); + // 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 += '</tr>'; + } + + // 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/main/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js b/main/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js new file mode 100755 index 0000000..444b4ac --- /dev/null +++ b/main/app/sprinkles/core/assets/userfrosting/js/uf-tablesorter-parsers.js @@ -0,0 +1,53 @@ +// Parser for sorting integers, timestamps, etc based on metadata from <td> 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'
+});
|