[med-svn] [r-cran-shinydashboard] 01/02: New upstream version 0.6.1

Andreas Tille tille at debian.org
Tue Oct 10 21:00:24 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository r-cran-shinydashboard.

commit d8f1c73a8176ffd04671cb13116c0e9c1a1f6c73
Author: Andreas Tille <tille at debian.org>
Date:   Tue Oct 10 22:59:34 2017 +0200

    New upstream version 0.6.1
---
 DESCRIPTION                                       |   28 +
 LICENSE                                           |  125 +
 MD5                                               |   66 +
 NAMESPACE                                         |   32 +
 NEWS.md                                           |  116 +
 R/boxes.R                                         |  406 ++
 R/dashboardBody.R                                 |   17 +
 R/dashboardHeader.R                               |  314 ++
 R/dashboardPage.R                                 |   73 +
 R/dashboardSidebar.R                              |  487 ++
 R/deps.R                                          |   39 +
 R/menuOutput.R                                    |  159 +
 R/shinydashboard-package.r                        |    6 +
 R/tabs.R                                          |   83 +
 R/utils.R                                         |  221 +
 R/valueBoxOutput.R                                |   82 +
 README.md                                         |   16 +
 inst/AdminLTE/AdminLTE.css                        | 5005 +++++++++++++++++++++
 inst/AdminLTE/AdminLTE.min.css                    |    7 +
 inst/AdminLTE/_all-skins.css                      | 1770 ++++++++
 inst/AdminLTE/_all-skins.min.css                  |    1 +
 inst/AdminLTE/app.js                              |  793 ++++
 inst/AdminLTE/app.js.map                          |    1 +
 inst/AdminLTE/app.min.js                          |    2 +
 inst/AdminLTE/app.min.js.map                      |    1 +
 inst/AdminLTE/fonts/Source_Sans_Pro_300.ttf       |  Bin 0 -> 35368 bytes
 inst/AdminLTE/fonts/Source_Sans_Pro_300italic.ttf |  Bin 0 -> 33996 bytes
 inst/AdminLTE/fonts/Source_Sans_Pro_400.ttf       |  Bin 0 -> 35064 bytes
 inst/AdminLTE/fonts/Source_Sans_Pro_400italic.ttf |  Bin 0 -> 33864 bytes
 inst/AdminLTE/fonts/Source_Sans_Pro_600.ttf       |  Bin 0 -> 34808 bytes
 inst/AdminLTE/fonts/Source_Sans_Pro_600italic.ttf |  Bin 0 -> 33592 bytes
 inst/AdminLTE/fonts/Source_Sans_Pro_700.ttf       |  Bin 0 -> 34908 bytes
 inst/shinydashboard.css                           |   70 +
 inst/shinydashboard.js                            |  322 ++
 inst/shinydashboard.js.map                        |    1 +
 inst/shinydashboard.min.js                        |    4 +
 inst/shinydashboard.min.js.map                    |    1 +
 man/box.Rd                                        |  173 +
 man/dashboardBody.Rd                              |   18 +
 man/dashboardHeader.Rd                            |  102 +
 man/dashboardPage.Rd                              |   45 +
 man/dashboardSidebar.Rd                           |   74 +
 man/dropdownMenu.Rd                               |   44 +
 man/dropdownMenuOutput.Rd                         |   23 +
 man/infoBox.Rd                                    |   47 +
 man/menuItemOutput.Rd                             |   23 +
 man/menuOutput.Rd                                 |   30 +
 man/messageItem.Rd                                |   32 +
 man/notificationItem.Rd                           |   28 +
 man/renderDropdownMenu.Rd                         |   20 +
 man/renderMenu.Rd                                 |  104 +
 man/renderValueBox.Rd                             |   64 +
 man/shinydashboard.Rd                             |   10 +
 man/sidebarMenu.Rd                                |   95 +
 man/sidebarMenuOutput.Rd                          |   23 +
 man/sidebarSearchForm.Rd                          |   28 +
 man/sidebarUserPanel.Rd                           |   26 +
 man/tabBox.Rd                                     |   89 +
 man/tabItem.Rd                                    |   21 +
 man/tabItems.Rd                                   |   19 +
 man/tagAssert.Rd                                  |   24 +
 man/taskItem.Rd                                   |   27 +
 man/updateTabItems.Rd                             |   60 +
 man/validColors.Rd                                |   30 +
 man/validStatuses.Rd                              |   21 +
 man/valueBox.Rd                                   |   38 +
 man/valueBoxOutput.Rd                             |   28 +
 67 files changed, 11614 insertions(+)

diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 0000000..b0c8347
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,28 @@
+Package: shinydashboard
+Title: Create Dashboards with 'Shiny'
+Version: 0.6.1
+Authors at R: c(
+    person("Winston", "Chang", role = c("aut", "cre"), email = "winston at rstudio.com"),
+    person("Barbara", "Borges Ribeiro", role = "aut", email = "barbara at rstudio.com"),
+    person(family = "RStudio", role = "cph"),
+    person(family = "Almasaeed Studio", role = c("ctb", "cph"), comment = "AdminLTE theme for Bootstrap"),
+    person(family = "Adobe Systems Incorporated", role = c("ctb", "cph"), comment = "Source Sans Pro font")
+    )
+Description: Create dashboards with 'Shiny'. This package provides
+    a theme on top of 'Shiny', making it easy to create attractive dashboards.
+URL: http://rstudio.github.io/shinydashboard/
+Depends: R (>= 3.0)
+License: GPL-2 | file LICENSE
+Imports: utils, shiny (>= 1.0.0), htmltools (>= 0.2.6)
+BugReports: https://github.com/rstudio/shinydashboard
+RoxygenNote: 6.0.1
+NeedsCompilation: no
+Packaged: 2017-06-14 17:18:24 UTC; barbaraborges
+Author: Winston Chang [aut, cre],
+  Barbara Borges Ribeiro [aut],
+  RStudio [cph],
+  Almasaeed Studio [ctb, cph] (AdminLTE theme for Bootstrap),
+  Adobe Systems Incorporated [ctb, cph] (Source Sans Pro font)
+Maintainer: Winston Chang <winston at rstudio.com>
+Repository: CRAN
+Date/Publication: 2017-06-14 23:37:34 UTC
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..9251ce4
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,125 @@
+The shinydashboard package as a whole is distributed under GPL-2 (GNU GENERAL
+PUBLIC LICENSE version 2).
+
+The shinydashboard package inludes other GPL-2 compatible software components.
+The following is a list of these components (full copies of the license
+agreements used by these components are included below):
+
+- AdminLTE, https://github.com/almasaeed2010/AdminLTE
+- Google Web Fonts, https://www.google.com/fonts/attribution
+
+
+AdminLTE
+----------------------------------------------------------------------
+
+The MIT License (MIT)
+
+Copyright (c) 2013 almasaeed2010
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+Source Sans Pro Font
+----------------------------------------------------------------------
+
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting — in part or in whole — any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/MD5 b/MD5
new file mode 100644
index 0000000..5740f1f
--- /dev/null
+++ b/MD5
@@ -0,0 +1,66 @@
+57d0382e19f666648e6ef8ad7232cc71 *DESCRIPTION
+d8eaa11f2d7c4e0258486389013752bc *LICENSE
+7b13e6353f630a4c48c686b647499740 *NAMESPACE
+9d946ae7618aef6ff255d7a593b8730e *NEWS.md
+ae7df0830983f1875480b034166802e5 *R/boxes.R
+58fdd0dc699149e29df8b3d771587339 *R/dashboardBody.R
+1a7ab967b3934e943027d9760a7eb268 *R/dashboardHeader.R
+817e836016742b74c77b7d0215cb47e1 *R/dashboardPage.R
+e3471eaad31958f085ab4edbf3ac6b0c *R/dashboardSidebar.R
+cb891d9053b4a362498493a182c2803d *R/deps.R
+e86f2a08d970d384a09e5679a318eac3 *R/menuOutput.R
+ebc1be5aa29851745caae82ebb9fb079 *R/shinydashboard-package.r
+06dfe5299d316dff12aa0922c420f74f *R/tabs.R
+981edce26cbd0fc2b2ec9ac37e70c09c *R/utils.R
+9f4eeb3824ce81195dcbec6dae879953 *R/valueBoxOutput.R
+1d098e8b2656eed5b053bfb94fd04a27 *README.md
+3a4b5a55318954feac6af22b80fecba9 *inst/AdminLTE/AdminLTE.css
+e5ea9c4e413ecfea964dc64db7ad0e96 *inst/AdminLTE/AdminLTE.min.css
+65e2c158a4f5b6b21a19c132aa7dc1c0 *inst/AdminLTE/_all-skins.css
+12c46f89ff41528f2b582452c4afdd97 *inst/AdminLTE/_all-skins.min.css
+1682e10d10f326db6820ac192570a106 *inst/AdminLTE/app.js
+13a1126fea61fcff2d49cebafa87b879 *inst/AdminLTE/app.js.map
+6414f8d1446eb1e295f7afd7283393d0 *inst/AdminLTE/app.min.js
+40bce2772171502d7ed3f73ac23c5924 *inst/AdminLTE/app.min.js.map
+6a9d4d28a117a8364376de2f17ee5ff9 *inst/AdminLTE/fonts/Source_Sans_Pro_300.ttf
+aa250dd5d8932a8497ac5cbf13d9274e *inst/AdminLTE/fonts/Source_Sans_Pro_300italic.ttf
+f2d83436dcf3f53375518292e917643c *inst/AdminLTE/fonts/Source_Sans_Pro_400.ttf
+b5a02317c3d2de0275cfd1efef086f6f *inst/AdminLTE/fonts/Source_Sans_Pro_400italic.ttf
+39d8befcdcde91747d1b75ab6cadffbd *inst/AdminLTE/fonts/Source_Sans_Pro_600.ttf
+e7dc82fa8534c925644f9af433214d20 *inst/AdminLTE/fonts/Source_Sans_Pro_600italic.ttf
+206f41ff7cdb7df5dbfeda33c847b793 *inst/AdminLTE/fonts/Source_Sans_Pro_700.ttf
+02c24fb3f5504d1bfc8f050d0392571b *inst/shinydashboard.css
+fe5211d2e9ac7cca4f7eccdfccb5d3c8 *inst/shinydashboard.js
+99a317ddfdacd13efb7debf79d711b04 *inst/shinydashboard.js.map
+d3b4b8ff39569a5a29f213651bead0f3 *inst/shinydashboard.min.js
+1044c5f8a67f299792d17d336808f601 *inst/shinydashboard.min.js.map
+ecdb22b85accfb4a1e13b81be547ef5c *man/box.Rd
+e03b63c24d7af853adcd8ebf34cc8e69 *man/dashboardBody.Rd
+01c05320aa21ed88f4eae4477f006339 *man/dashboardHeader.Rd
+96028ce63360b162a5c6119a0d6046b9 *man/dashboardPage.Rd
+b1ceeae29b1bd2a142322a13fa95eee7 *man/dashboardSidebar.Rd
+f4d42e732868a68e8296f5ee9190dff8 *man/dropdownMenu.Rd
+b8a5e0dbf87a159e2aba3c2e3a43859e *man/dropdownMenuOutput.Rd
+37ce9fbf7c44b7a1583a0391109505f2 *man/infoBox.Rd
+1b35c4931f18cec8ae6fa46ec49be2df *man/menuItemOutput.Rd
+ce8e208fd60d1e2edcfbd138301bc6f5 *man/menuOutput.Rd
+f0df3322a1409d2da597a4951eb97703 *man/messageItem.Rd
+a4594ca98d7b72ca257bf46d6ee4bf24 *man/notificationItem.Rd
+60bb888325f6afebeb16772c86667188 *man/renderDropdownMenu.Rd
+7eca92a0c918652eeac7168ef11bba28 *man/renderMenu.Rd
+afbedaf6a9b0f8446acce30f4386a50e *man/renderValueBox.Rd
+c58fe33da411a5b20744a15cd6f247f8 *man/shinydashboard.Rd
+733b5b30ae7b1d8e63ba4dae845bd95f *man/sidebarMenu.Rd
+1d8c55cecf78c6fcec7350a94790e162 *man/sidebarMenuOutput.Rd
+1e7b589c034cc4f53d7e8bcac4f8e73a *man/sidebarSearchForm.Rd
+6ed90f5244f69aae3a7c047182bd0938 *man/sidebarUserPanel.Rd
+f4ad91a99a1c723b682b4eccb6dcbcec *man/tabBox.Rd
+e08b37333e02ea38d93ec96540ea5f7e *man/tabItem.Rd
+4dd79530fc12d0bd3c342977d3763d37 *man/tabItems.Rd
+fc76753b62042a3acf118676837d3b12 *man/tagAssert.Rd
+102cb79aa0aae5e2a90af681ec245d5e *man/taskItem.Rd
+560033206d7e27114f58b76064f81956 *man/updateTabItems.Rd
+c3bfa2203719351c903c3a73de376fba *man/validColors.Rd
+856fce151386abd64e4fcdb18dba8af9 *man/validStatuses.Rd
+f4cc33ccf71dc8b3c91f02c00938e917 *man/valueBox.Rd
+a67067685a9fe987271a47098ce2cc11 *man/valueBoxOutput.Rd
diff --git a/NAMESPACE b/NAMESPACE
new file mode 100644
index 0000000..d3773d3
--- /dev/null
+++ b/NAMESPACE
@@ -0,0 +1,32 @@
+# Generated by roxygen2: do not edit by hand
+
+export(box)
+export(dashboardBody)
+export(dashboardHeader)
+export(dashboardPage)
+export(dashboardSidebar)
+export(dropdownMenu)
+export(dropdownMenuOutput)
+export(infoBox)
+export(infoBoxOutput)
+export(menuItem)
+export(menuItemOutput)
+export(menuSubItem)
+export(messageItem)
+export(notificationItem)
+export(renderDropdownMenu)
+export(renderInfoBox)
+export(renderMenu)
+export(renderValueBox)
+export(sidebarMenu)
+export(sidebarMenuOutput)
+export(sidebarSearchForm)
+export(sidebarUserPanel)
+export(tabBox)
+export(tabItem)
+export(tabItems)
+export(taskItem)
+export(updateTabItems)
+export(valueBox)
+export(valueBoxOutput)
+import(htmltools)
diff --git a/NEWS.md b/NEWS.md
new file mode 100644
index 0000000..18acc05
--- /dev/null
+++ b/NEWS.md
@@ -0,0 +1,116 @@
+shinydashboard 0.6.1.9000
+=========================
+
+## Full changelog
+
+### New features
+
+### Minor new features and improvements
+
+### Bug fixes
+
+### Library updates
+
+shinydashboard 0.6.1
+====================
+
+This is a hotfix release of shinydashboard, meant to fix a few edge cases that have surfaced since the last release.
+
+## Full changelog
+
+* Fixed [#214](https://github.com/rstudio/shinydashboard/issues/214): make sure that the `data-value` attribute of `.sidebarMenuSelectedTabItem` is always set in the body of the `ensureActivatedTab()` function. ([#216](https://github.com/rstudio/shinydashboard/pull/216))
+
+* Fixed [#217](https://github.com/rstudio/shinydashboard/issues/217): correct `input$sidebarCollapsed` value for edge cases by attaching the change event to the end of the sidebar CSS transitions (instead of when the toggle button is clicked). Also make sure that `input$sidebarCollapsed` is set to `FALSE` when the app starts up with the sidebar already collapsed. ([#222](https://github.com/rstudio/shinydashboard/pull/222))
+
+shinydashboard 0.6.0
+====================
+
+This release of shinydashboard was aimed at both fixing bugs and also bringing the package up to speed with users' requests and Shiny itself (especially fully bringing [bookmarkable state](https://shiny.rstudio.com/articles/bookmarking-state.html) to shinydashboard's sidebar). In addition to the changes listed below, we also added a [new "Behavior" section to the shinydashboard website](https://rstudio.github.io/shinydashboard/behavior.html) to explain this release's two biggest new features.
+
+## Full changelog
+
+### New features
+
+* Address [#179](https://github.com/rstudio/shinydashboard/issues/179) support for bookmarking the expanded/collapsed state of the whole sidebar. (commit [e71c93f](https://github.com/rstudio/shinydashboard/commit/e71c93fa7a71f229e725efd4a7867e431cd57679))
+
+* Added Shiny input to keep track of which sidebar `menuItem` is expanded (if any), which makes bookmarking the exact state of the sidebar trivial. (commit [6901b90](https://github.com/rstudio/shinydashboard/commit/6901b90b8c866b89d02514cfc01fdfab88175602))
+
+### Minor new features and improvements
+
+* Addressed [#165](https://github.com/rstudio/shinydashboard/issues/165): added a new optional argument, called `headerText` to the `dropdownMenu()` function. If provided by the user, this text (instead of the default) will be shown on the header of the menu (only visible when the menu is expanded). See `?dropdownMenu` for more details. [#207](https://github.com/rstudio/shinydashboard/pull/207)
+
+* Split JS files. (commit [ea91503](https://github.com/rstudio/shinydashboard/commit/ea915038ae2126f48c15e3aac41782a22b16c506)). More updates to Gruntfile and structure. (commit [4e80616](https://github.com/rstudio/shinydashboard/commit/4e80616c5b3aa0dc73022dc815288b5ba7c35be0))
+
+* Better shown/hidden mechanic for Shiny inputs inside collapsible `menuItem`s. (commit [6901b90](https://github.com/rstudio/shinydashboard/commit/6901b90b8c866b89d02514cfc01fdfab88175602))
+
+* Added hack on adminLTE/app.js in order to make the `slideUp`/`slideDown` css transitions look reasonable when its content is initially empty (use case is for hidden Shiny outputs that are not rendered until the first time the `menuItem` is expanded and reveal them -- i.e. first time that `trigger("shown")` is called). (commit [25725a6](https://github.com/rstudio/shinydashboard/commit/25725a67ce3dd841786dd82b0e46624c6a7d4722))
+
+* Added manual tests for bookmarking and the shown/hidden events that happen on the sidebar. (commit [9e3e55d](https://github.com/rstudio/shinydashboard/commit/9e3e55de8cc63d4bdd179251cd53eeb845441d3d))
+
+### Bug fixes
+
+* Fixed [#71](https://github.com/rstudio/shinydashboard/issues/71) and [#87](https://github.com/rstudio/shinydashboard/issues/87): detect and enforce selected tab for dynamic sidebar menus by calling `ensureActivatedTab()` for these. (commit [9b88a79](https://github.com/rstudio/shinydashboard/commit/9b88a790df058432165ca3b483b5bbfe1d267326))
+
+* Fixed [#127](https://github.com/rstudio/shinydashboard/issues/127) and [#177](https://github.com/rstudio/shinydashboard/issues/177): previously, if `dashboardSidebar()` was called with an explicit `width` parameter, mobile rendering would look weird (the sidebar wouldn't completely disappear when it was collapsed, and content in the dashboard body would be hidden under the still-visible sidebar). ([#204](https://github.com/rstudio/shinydashboard/pull/204))
+
+* Fixed [#79](https://github.com/rstudio/shinydashboard/issues/79): Re-enable slight css transition when the sidebar is expanded/collapsed. ([#205](https://github.com/rstudio/shinydashboard/pull/205)).
+
+* Fixed [#89](https://github.com/rstudio/shinydashboard/issues/89): We claimed that `dashboardPage()` would try to extract the page's title from `dashboardHeader()` (if the title is not provided directly to `dashboardPage()`); however, we were selecting the wrong child of the header tag object ([#203](https://github.com/rstudio/shinydashboard/pull/203))
+	
+* Fixed [#129](https://github.com/rstudio/shinydashboard/issues/129): Trigger shown/hidden event for Shiny outputs in the sidebar. ([#194](https://github.com/rstudio/shinydashboard/pull/194))
+	
+* Fixed [#73](https://github.com/rstudio/shinydashboard/issues/73): add `collapsed` argument to `dashboardSidebar()`, which allows it to start off collapsed. ([#186](https://github.com/rstudio/shinydashboard/pull/186))
+
+* Fixed [#62](https://github.com/rstudio/shinydashboard/issues/62): make images resize when the sidebar collapses/expands. [#185](https://github.com/rstudio/shinydashboard/pull/185)
+
+* Fixed [#176](https://github.com/rstudio/shinydashboard/issues/176) (making buttons look good on the sidebar) by giving Shiny action buttons and links some margin space. ([#182](https://github.com/rstudio/shinydashboard/pull/182))
+
+### Library updates
+
+* Update documentation to newest version of roxygen. (commit [#541d3c1](https://github.com/rstudio/shinydashboard/commit/541d3c13467446c8e89b178d95b0984729559059))
+
+* Addressed [#178](https://github.com/rstudio/shinydashboard/issues/178): switch from `npm` to `yarn`. Also upgraded all yarn packages to the `latest` tag (all major changes). [#184](https://github.com/rstudio/shinydashboard/pull/184)
+
+* Updated to AdminLTE 2.3.11. ([#181](https://github.com/rstudio/shinydashboard/pull/181))
+
+shinydashboard 0.5.3
+=========================
+
+* Fixed ([#160](https://github.com/rstudio/shinydashboard/issues/160): Using a dynamically-created `sidebarMenu` without an `id` argument would cause the app to not start, when used with Shiny 0.14.
+
+shinydashboard 0.5.2
+====================
+
+* Added ability to bookmark and restore tabs, when used with Shiny 0.14 and above. ([#152](https://github.com/rstudio/shinydashboard/issues/152), [#157](https://github.com/rstudio/shinydashboard/pull/157))
+
+* Fixed issue with R CMD check and Shiny version 0.14.
+
+* Updated to AdminLTE 2.3.2 (1ee281b).
+
+shinydashboard 0.5.1
+====================
+
+* Logout panels from Shiny Server Pro were previously not visible, but now they are.
+
+* If a `sidebarUserPanel` doesn't have an image, space for the image is no longer allocated.
+
+* `tabNames` are now validated so that illegal characters result in an error early. (#66)
+
+* `sidebarUserPanel` now displays properly. (#70)
+
+* `radioButtons` did not wrap, but now they do. (#60)
+
+shinydashboard 0.5.0
+====================
+
+* Updated to AdminLTE 2.1.2 (406de4e). Please note that some CSS selectors have changed, so if you are using custom CSS, it may require modification. The documentation at http://rstudio.github.io/shinydashboard/appearance.html has some updated examples.
+
+* shinydashboard now respects the `shiny.minified` option.
+
+* Collapse buttons on boxes trigger `shown` and `hidden` events. Previously they did not, which resulted in dynamic content not working for boxes that started collapsed. (#17, #42)
+
+* Dynamic menuSubItems now work in the sidebar. (#54)
+
+* Arbitrary content may now be used in a `sidebarMenu()`, not just `menuItem`s. (#44)
+
+* Added options to set the width of `dashboardHeader()` and `dashboardSidebar()`. (#43, #45, #54)
diff --git a/R/boxes.R b/R/boxes.R
new file mode 100644
index 0000000..4f287ec
--- /dev/null
+++ b/R/boxes.R
@@ -0,0 +1,406 @@
+#' Create a value box for the main body of a dashboard.
+#'
+#' A value box displays a value (usually a number) in large text, with a smaller
+#' subtitle beneath, and a large icon on the right side. Value boxes are meant
+#' to be placed in the main body of a dashboard.
+#'
+#' @inheritParams box
+#' @param value The value to display in the box. Usually a number or short text.
+#' @param subtitle Subtitle text.
+#' @param icon An icon tag, created by \code{\link[shiny]{icon}}.
+#' @param color A color for the box. Valid colors are listed in
+#'   \link{validColors}.
+#' @param href An optional URL to link to.
+#'
+#' @family boxes
+#' @seealso \code{\link{box}} for usage examples.
+#'
+#' @export
+valueBox <- function(value, subtitle, icon = NULL, color = "aqua", width = 4,
+  href = NULL)
+{
+  validateColor(color)
+  if (!is.null(icon)) tagAssert(icon, type = "i")
+
+  boxContent <- div(class = paste0("small-box bg-", color),
+    div(class = "inner",
+      h3(value),
+      p(subtitle)
+    ),
+    if (!is.null(icon)) div(class = "icon-large", icon)
+  )
+
+  if (!is.null(href))
+    boxContent <- a(href = href, boxContent)
+
+  div(class = if (!is.null(width)) paste0("col-sm-", width),
+    boxContent
+  )
+}
+
+
+#' Create an info box for the main body of a dashboard.
+#'
+#' An info box displays a large icon on the left side, and a title, value
+#' (usually a number), and an optional smaller subtitle on the right side. Info
+#' boxes are meant to be placed in the main body of a dashboard.
+#'
+#' @inheritParams box
+#' @param title Title text.
+#' @param value The value to display in the box. Usually a number or short text.
+#' @param subtitle Subtitle text (optional).
+#' @param icon An icon tag, created by \code{\link[shiny]{icon}}.
+#' @param color A color for the box. Valid colors are listed in
+#'   \link{validColors}.
+#' @param fill If \code{FALSE} (the default), use a white background for the
+#'   content, and the \code{color} argument for the background of the icon. If
+#'   \code{TRUE}, use the \code{color} argument for the background of the
+#'   content; the icon will use the same color with a slightly darkened
+#'   background.
+#' @param href An optional URL to link to.
+#'
+#' @family boxes
+#' @seealso \code{\link{box}} for usage examples.
+#'
+#' @export
+infoBox <- function(title, value = NULL, subtitle = NULL,
+  icon = shiny::icon("bar-chart"), color = "aqua", width = 4, href = NULL,
+  fill = FALSE) {
+
+  validateColor(color)
+  tagAssert(icon, type = "i")
+
+  colorClass <- paste0("bg-", color)
+
+  boxContent <- div(
+    class = "info-box",
+    class = if (fill) colorClass,
+    span(
+      class = "info-box-icon",
+      class = if (!fill) colorClass,
+      icon
+    ),
+    div(class = "info-box-content",
+      span(class = "info-box-text", title),
+      if (!is.null(value)) span(class = "info-box-number", value),
+      if (!is.null(subtitle)) p(subtitle)
+    )
+  )
+
+  if (!is.null(href))
+    boxContent <- a(href = href, boxContent)
+
+  div(class = if (!is.null(width)) paste0("col-sm-", width),
+    boxContent
+  )
+}
+
+
+#' Create a box for the main body of a dashboard
+#'
+#' Boxes can be used to hold content in the main body of a dashboard.
+#'
+#' @param title Optional title.
+#' @param footer Optional footer text.
+#' @param status The status of the item This determines the item's background
+#'   color. Valid statuses are listed in \link{validStatuses}.
+#' @param solidHeader Should the header be shown with a solid color background?
+#' @param background If NULL (the default), the background of the box will be
+#'   white. Otherwise, a color string. Valid colors are listed in
+#'   \link{validColors}.
+#' @param width The width of the box, using the Bootstrap grid system. This is
+#'   used for row-based layouts. The overall width of a region is 12, so the
+#'   default valueBox width of 4 occupies 1/3 of that width. For column-based
+#'   layouts, use \code{NULL} for the width; the width is set by the column that
+#'   contains the box.
+#' @param height The height of a box, in pixels or other CSS unit. By default
+#'   the height scales automatically with the content.
+#' @param collapsible If TRUE, display a button in the upper right that allows
+#'   the user to collapse the box.
+#' @param collapsed If TRUE, start collapsed. This must be used with
+#'   \code{collapsible=TRUE}.
+#' @param ... Contents of the box.
+#'
+#' @family boxes
+#'
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#' library(shiny)
+#'
+#' # A dashboard body with a row of infoBoxes and valueBoxes, and two rows of boxes
+#' body <- dashboardBody(
+#'
+#'   # infoBoxes
+#'   fluidRow(
+#'     infoBox(
+#'       "Orders", uiOutput("orderNum2"), "Subtitle", icon = icon("credit-card")
+#'     ),
+#'     infoBox(
+#'       "Approval Rating", "60%", icon = icon("line-chart"), color = "green",
+#'       fill = TRUE
+#'     ),
+#'     infoBox(
+#'       "Progress", uiOutput("progress2"), icon = icon("users"), color = "purple"
+#'     )
+#'   ),
+#'
+#'   # valueBoxes
+#'   fluidRow(
+#'     valueBox(
+#'       uiOutput("orderNum"), "New Orders", icon = icon("credit-card"),
+#'       href = "http://google.com"
+#'     ),
+#'     valueBox(
+#'       tagList("60", tags$sup(style="font-size: 20px", "%")),
+#'        "Approval Rating", icon = icon("line-chart"), color = "green"
+#'     ),
+#'     valueBox(
+#'       htmlOutput("progress"), "Progress", icon = icon("users"), color = "purple"
+#'     )
+#'   ),
+#'
+#'   # Boxes
+#'   fluidRow(
+#'     box(status = "primary",
+#'       sliderInput("orders", "Orders", min = 1, max = 2000, value = 650),
+#'       selectInput("progress", "Progress",
+#'         choices = c("0%" = 0, "20%" = 20, "40%" = 40, "60%" = 60, "80%" = 80,
+#'                     "100%" = 100)
+#'       )
+#'     ),
+#'     box(title = "Histogram box title",
+#'       status = "warning", solidHeader = TRUE, collapsible = TRUE,
+#'       plotOutput("plot", height = 250)
+#'     )
+#'   ),
+#'
+#'   # Boxes with solid color, using `background`
+#'   fluidRow(
+#'     # Box with textOutput
+#'     box(
+#'       title = "Status summary",
+#'       background = "green",
+#'       width = 4,
+#'       textOutput("status")
+#'     ),
+#'
+#'     # Box with HTML output, when finer control over appearance is needed
+#'     box(
+#'       title = "Status summary 2",
+#'       width = 4,
+#'       background = "red",
+#'       uiOutput("status2")
+#'     ),
+#'
+#'     box(
+#'       width = 4,
+#'       background = "light-blue",
+#'       p("This is content. The background color is set to light-blue")
+#'     )
+#'   )
+#' )
+#'
+#' server <- function(input, output) {
+#'   output$orderNum <- renderText({
+#'     prettyNum(input$orders, big.mark=",")
+#'   })
+#'
+#'   output$orderNum2 <- renderText({
+#'     prettyNum(input$orders, big.mark=",")
+#'   })
+#'
+#'   output$progress <- renderUI({
+#'     tagList(input$progress, tags$sup(style="font-size: 20px", "%"))
+#'   })
+#'
+#'   output$progress2 <- renderUI({
+#'     paste0(input$progress, "%")
+#'   })
+#'
+#'   output$status <- renderText({
+#'     paste0("There are ", input$orders,
+#'       " orders, and so the current progress is ", input$progress, "%.")
+#'   })
+#'
+#'   output$status2 <- renderUI({
+#'     iconName <- switch(input$progress,
+#'       "100" = "ok",
+#'       "0" = "remove",
+#'       "road"
+#'     )
+#'     p("Current status is: ", icon(iconName, lib = "glyphicon"))
+#'   })
+#'
+#'
+#'   output$plot <- renderPlot({
+#'     hist(rnorm(input$orders))
+#'   })
+#' }
+#'
+#' shinyApp(
+#'   ui = dashboardPage(
+#'     dashboardHeader(),
+#'     dashboardSidebar(),
+#'     body
+#'   ),
+#'   server = server
+#' )
+#' }
+#' @export
+box <- function(..., title = NULL, footer = NULL, status = NULL,
+                solidHeader = FALSE, background = NULL, width = 6,
+                height = NULL, collapsible = FALSE, collapsed = FALSE) {
+
+  boxClass <- "box"
+  if (solidHeader || !is.null(background)) {
+    boxClass <- paste(boxClass, "box-solid")
+  }
+  if (!is.null(status)) {
+    validateStatus(status)
+    boxClass <- paste0(boxClass, " box-", status)
+  }
+  if (collapsible && collapsed) {
+    boxClass <- paste(boxClass, "collapsed-box")
+  }
+  if (!is.null(background)) {
+    validateColor(background)
+    boxClass <- paste0(boxClass, " bg-", background)
+  }
+
+  style <- NULL
+  if (!is.null(height)) {
+    style <- paste0("height: ", validateCssUnit(height))
+  }
+
+  titleTag <- NULL
+  if (!is.null(title)) {
+    titleTag <- h3(class = "box-title", title)
+  }
+
+  collapseTag <- NULL
+  if (collapsible) {
+    buttonStatus <- status %OR% "default"
+
+    collapseIcon <- if (collapsed) "plus" else "minus"
+
+    collapseTag <- div(class = "box-tools pull-right",
+      tags$button(class = paste0("btn btn-box-tool"),
+        `data-widget` = "collapse",
+        shiny::icon(collapseIcon)
+      )
+    )
+  }
+
+  headerTag <- NULL
+  if (!is.null(titleTag) || !is.null(collapseTag)) {
+    headerTag <- div(class = "box-header",
+      titleTag,
+      collapseTag
+    )
+  }
+
+  div(class = if (!is.null(width)) paste0("col-sm-", width),
+    div(class = boxClass,
+      style = if (!is.null(style)) style,
+      headerTag,
+      div(class = "box-body", ...),
+      if (!is.null(footer)) div(class = "box-footer", footer)
+    )
+  )
+}
+
+#' Create a tabbed box
+#'
+#' @inheritParams shiny::tabsetPanel
+#' @inheritParams box
+#' @param title Title for the tabBox.
+#' @param side Which side of the box the tabs should be on (\code{"left"} or
+#'   \code{"right"}). When \code{side="right"}, the order of tabs will be
+#'   reversed.
+#'
+#' @family boxes
+#'
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#' library(shiny)
+#'
+#' body <- dashboardBody(
+#'   fluidRow(
+#'     tabBox(
+#'       title = "First tabBox",
+#'       # The id lets us use input$tabset1 on the server to find the current tab
+#'       id = "tabset1", height = "250px",
+#'       tabPanel("Tab1", "First tab content"),
+#'       tabPanel("Tab2", "Tab content 2")
+#'     ),
+#'     tabBox(
+#'       side = "right", height = "250px",
+#'       selected = "Tab3",
+#'       tabPanel("Tab1", "Tab content 1"),
+#'       tabPanel("Tab2", "Tab content 2"),
+#'       tabPanel("Tab3", "Note that when side=right, the tab order is reversed.")
+#'     )
+#'   ),
+#'   fluidRow(
+#'     tabBox(
+#'       # Title can include an icon
+#'       title = tagList(shiny::icon("gear"), "tabBox status"),
+#'       tabPanel("Tab1",
+#'         "Currently selected tab from first box:",
+#'         verbatimTextOutput("tabset1Selected")
+#'       ),
+#'       tabPanel("Tab2", "Tab content 2")
+#'     )
+#'   )
+#' )
+#'
+#' shinyApp(
+#'   ui = dashboardPage(dashboardHeader(title = "tabBoxes"), dashboardSidebar(), body),
+#'   server = function(input, output) {
+#'     # The currently selected tab from the first box
+#'     output$tabset1Selected <- renderText({
+#'       input$tabset1
+#'     })
+#'   }
+#' )
+#' }
+#' @export
+tabBox <- function(..., id = NULL, selected = NULL, title = NULL,
+                   width = 6, height = NULL, side = c("left", "right"))
+{
+  side <- match.arg(side)
+
+  # The content is basically a tabsetPanel with some custom modifications
+  content <- shiny::tabsetPanel(..., id = id, selected = selected)
+  content$attribs$class <- "nav-tabs-custom"
+
+  # Set height
+  if (!is.null(height)) {
+    content <- tagAppendAttributes(content,
+      style = paste0("height: ", validateCssUnit(height))
+    )
+  }
+
+  # Move tabs to right side if needed
+  if (side == "right") {
+    content$children[[1]] <- tagAppendAttributes(content$children[[1]],
+      class = "pull-right"
+    )
+  }
+
+  # Add title
+  if (!is.null(title)) {
+    if (side == "left")
+      titleClass <- "pull-right"
+    else
+      titleClass <- "pull-left"
+
+    content$children[[1]] <- htmltools::tagAppendChild(content$children[[1]],
+      tags$li(class = paste("header", titleClass), title)
+    )
+  }
+
+  div(class = paste0("col-sm-", width), content)
+}
diff --git a/R/dashboardBody.R b/R/dashboardBody.R
new file mode 100644
index 0000000..c57edd2
--- /dev/null
+++ b/R/dashboardBody.R
@@ -0,0 +1,17 @@
+#' The main body of a dashboard page.
+#'
+#' The main body typically contains \code{\link{box}}es. Another common use
+#' pattern is for the main body to contain \code{\link{tabItems}}.
+#'
+#' @param ... Items to put in the dashboard body.
+#'
+#' @seealso \code{\link{tabItems}}, \code{\link{box}}, \code{\link{valueBox}}.
+#'
+#' @export
+dashboardBody <- function(...) {
+  div(class = "content-wrapper",
+    tags$section(class = "content",
+      ...
+    )
+  )
+}
diff --git a/R/dashboardHeader.R b/R/dashboardHeader.R
new file mode 100644
index 0000000..80dbbbb
--- /dev/null
+++ b/R/dashboardHeader.R
@@ -0,0 +1,314 @@
+#' Create a header for a dashboard page
+#'
+#' A dashboard header can be left blank, or it can include dropdown menu items
+#' on the right side.
+#'
+#' @param title An optional title to show in the header bar.. By default, this
+#'   will also be used as the title shown in the browser's title bar. If you
+#'   want that to be different from the text in the dashboard header bar, set
+#'   the \code{title} in \code{\link{dashboardPage}}.
+#' @param titleWidth The width of the title area. This must either be a number
+#'   which specifies the width in pixels, or a string that specifies the width
+#'   in CSS units.
+#' @param disable If \code{TRUE}, don't display the header bar.
+#' @param ... Items to put in the header. Should be \code{\link{dropdownMenu}}s.
+#' @param .list An optional list containing items to put in the header. Same as
+#'   the \code{...} arguments, but in list format. This can be useful when
+#'   working with programmatically generated items.
+#'
+#' @seealso \code{\link{dropdownMenu}}
+#'
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#' library(shiny)
+#'
+#' # A dashboard header with 3 dropdown menus
+#' header <- dashboardHeader(
+#'   title = "Dashboard Demo",
+#'
+#'   # Dropdown menu for messages
+#'   dropdownMenu(type = "messages", badgeStatus = "success",
+#'     messageItem("Support Team",
+#'       "This is the content of a message.",
+#'       time = "5 mins"
+#'     ),
+#'     messageItem("Support Team",
+#'       "This is the content of another message.",
+#'       time = "2 hours"
+#'     ),
+#'     messageItem("New User",
+#'       "Can I get some help?",
+#'       time = "Today"
+#'     )
+#'   ),
+#'
+#'   # Dropdown menu for notifications
+#'   dropdownMenu(type = "notifications", badgeStatus = "warning",
+#'     notificationItem(icon = icon("users"), status = "info",
+#'       "5 new members joined today"
+#'     ),
+#'     notificationItem(icon = icon("warning"), status = "danger",
+#'       "Resource usage near limit."
+#'     ),
+#'     notificationItem(icon = icon("shopping-cart", lib = "glyphicon"),
+#'       status = "success", "25 sales made"
+#'     ),
+#'     notificationItem(icon = icon("user", lib = "glyphicon"),
+#'       status = "danger", "You changed your username"
+#'     )
+#'   ),
+#'
+#'   # Dropdown menu for tasks, with progress bar
+#'   dropdownMenu(type = "tasks", badgeStatus = "danger",
+#'     taskItem(value = 20, color = "aqua",
+#'       "Refactor code"
+#'     ),
+#'     taskItem(value = 40, color = "green",
+#'       "Design new layout"
+#'     ),
+#'     taskItem(value = 60, color = "yellow",
+#'       "Another task"
+#'     ),
+#'     taskItem(value = 80, color = "red",
+#'       "Write documentation"
+#'     )
+#'   )
+#' )
+#'
+#' shinyApp(
+#'   ui = dashboardPage(
+#'     header,
+#'     dashboardSidebar(),
+#'     dashboardBody()
+#'   ),
+#'   server = function(input, output) { }
+#' )
+#' }
+#' @export
+dashboardHeader <- function(..., title = NULL, titleWidth = NULL, disable = FALSE, .list = NULL) {
+  items <- c(list(...), .list)
+  lapply(items, tagAssert, type = "li", class = "dropdown")
+
+  titleWidth <- validateCssUnit(titleWidth)
+
+  # Set up custom CSS for custom width.
+  custom_css <- NULL
+  if (!is.null(titleWidth)) {
+    # This CSS is derived from the header-related instances of '230px' (the
+    # default sidebar width) from inst/AdminLTE/AdminLTE.css. One change is that
+    # instead making changes to the global settings, we've put them in a media
+    # query (min-width: 768px), so that it won't override other media queries
+    # (like max-width: 767px) that work for narrower screens.
+    custom_css <- tags$head(tags$style(HTML(gsub("_WIDTH_", titleWidth, fixed = TRUE, '
+      @media (min-width: 768px) {
+        .main-header > .navbar {
+          margin-left: _WIDTH_;
+        }
+        .main-header .logo {
+          width: _WIDTH_;
+        }
+      }
+    '))))
+  }
+
+  tags$header(class = "main-header",
+    custom_css,
+    style = if (disable) "display: none;",
+    span(class = "logo", title),
+    tags$nav(class = "navbar navbar-static-top", role = "navigation",
+      # Embed hidden icon so that we get the font-awesome dependency
+      span(shiny::icon("bars"), style = "display:none;"),
+      # Sidebar toggle button
+      a(href="#", class="sidebar-toggle", `data-toggle`="offcanvas",
+        role="button",
+        span(class="sr-only", "Toggle navigation")
+      ),
+      div(class = "navbar-custom-menu",
+        tags$ul(class = "nav navbar-nav",
+          items
+        )
+      )
+    )
+  )
+}
+
+
+#' Create a dropdown menu to place in a dashboard header
+#'
+#' @param type The type of menu. Should be one of "messages", "notifications",
+#'   "tasks".
+#' @param badgeStatus The status of the badge which displays the number of items
+#'   in the menu. This determines the badge's color. Valid statuses are listed
+#'   in \link{validStatuses}. A value of \code{NULL} means to not display a
+#'   badge.
+#' @param ... Items to put in the menu. Typically, message menus should contain
+#'   \code{\link{messageItem}}s, notification menus should contain
+#'   \code{\link{notificationItem}}s, and task menus should contain
+#'   \code{\link{taskItem}}s.
+#' @param icon An icon to display in the header. By default, the icon is
+#'   automatically selected depending on \code{type}, but it can be overriden
+#'   with this argument.
+#' @param headerText An optional text argument used for the header of the
+#'   dropdown menu (this is only visible when the menu is expanded). If none is
+#'   provided by the user, the default is "You have \code{x} messages," where
+#'   \code{x} is the number of items in the menu (if the \code{type} is
+#'   specified to be "notifications" or "tasks," the default text shows "You
+#'   have \code{x} notifications" or  "You have \code{x} tasks," respectively).
+#' @param .list An optional list containing items to put in the menu Same as the
+#'   \code{...} arguments, but in list format. This can be useful when working
+#'   with programmatically generated items.
+#'
+#' @seealso \code{\link{dashboardHeader}} for example usage.
+#'
+#' @export
+dropdownMenu <- function(...,
+  type = c("messages", "notifications", "tasks"),
+  badgeStatus = "primary", icon = NULL, headerText = NULL,
+  .list = NULL)
+{
+  type <- match.arg(type)
+  if (!is.null(badgeStatus)) validateStatus(badgeStatus)
+  items <- c(list(...), .list)
+
+  # Make sure the items are li tags
+  lapply(items, tagAssert, type = "li")
+
+  dropdownClass <- paste0("dropdown ", type, "-menu")
+
+  if (is.null(icon)) {
+    icon <- switch(type,
+      messages = shiny::icon("envelope"),
+      notifications = shiny::icon("warning"),
+      tasks = shiny::icon("tasks")
+    )
+  }
+
+  numItems <- length(items)
+  if (is.null(badgeStatus)) {
+    badge <- NULL
+  } else {
+    badge <- span(class = paste0("label label-", badgeStatus), numItems)
+  }
+
+  if (is.null(headerText)) {
+    headerText <- paste("You have", numItems, type)
+  }
+
+  tags$li(class = dropdownClass,
+    a(href = "#", class = "dropdown-toggle", `data-toggle` = "dropdown",
+      icon,
+      badge
+    ),
+    tags$ul(class = "dropdown-menu",
+      tags$li(class = "header", headerText),
+      tags$li(
+        tags$ul(class = "menu",
+          items
+        )
+      )
+      # TODO: This would need to be added to the outer ul
+      # tags$li(class = "footer", a(href="#", "View all"))
+    )
+  )
+
+}
+
+
+
+#' Create a message item to place in a dropdown message menu
+#'
+#' @param from Who the message is from.
+#' @param message Text of the message.
+#' @param icon An icon tag, created by \code{\link[shiny]{icon}}.
+#' @param time String representing the time the message was sent. Any string may
+#'   be used. For example, it could be a relative date/time like "5 minutes",
+#'   "today", or "12:30pm yesterday", or an absolute time, like "2014-12-01 13:45".
+#'   If NULL, no time will be displayed.
+#' @param href An optional URL to link to.
+#'
+#' @family menu items
+#' @seealso \code{\link{dashboardHeader}} for example usage.
+#' @export
+messageItem <- function(from, message, icon = shiny::icon("user"), time = NULL,
+  href = NULL)
+{
+  tagAssert(icon, type = "i")
+  if (is.null(href)) href <- "#"
+
+  tags$li(
+    a(href = href,
+      icon,
+      h4(
+        from,
+        if (!is.null(time)) tags$small(shiny::icon("clock-o"), time)
+      ),
+      p(message)
+    )
+  )
+}
+
+
+#' Create a notification item to place in a dropdown notification menu
+#'
+#' @param text The notification text.
+#' @param icon An icon tag, created by \code{\link[shiny]{icon}}.
+#' @param status The status of the item This determines the item's background
+#'   color. Valid statuses are listed in \link{validStatuses}.
+#' @param href An optional URL to link to.
+#'
+#' @family menu items
+#' @seealso \code{\link{dashboardHeader}} for example usage.
+#' @export
+notificationItem <- function(text, icon = shiny::icon("warning"),
+  status = "success", href = NULL)
+{
+  tagAssert(icon, type = "i")
+  validateStatus(status)
+  if (is.null(href)) href <- "#"
+
+  # Add the status as another HTML class to the icon
+  icon <- tagAppendAttributes(icon, class = paste0("text-", status))
+
+  tags$li(
+    a(href = href, icon, text)
+  )
+}
+
+
+#' Create a task item to place in a dropdown task menu
+#'
+#' @param text The task text.
+#' @param value A percent value to use for the bar.
+#' @param color A color for the bar. Valid colors are listed in
+#'   \link{validColors}.
+#' @param href An optional URL to link to.
+#'
+#' @family menu items
+#' @seealso \code{\link{dashboardHeader}} for example usage.
+#' @export
+taskItem <- function(text, value = 0, color = "aqua", href = NULL) {
+  validateColor(color)
+  if (is.null(href)) href <- "#"
+
+  tags$li(
+    a(href = href,
+      h3(text,
+        tags$small(class = "pull-right", paste0(value, "%"))
+      ),
+      div(class = "progress xs",
+        div(
+          class = paste0("progress-bar progress-bar-", color),
+          style = paste0("width: ", value, "%"),
+          role = "progressbar",
+          `aria-valuenow` = value,
+          `aria-valuemin` = "0",
+          `aria-valuemax` = "100",
+          span(class = "sr-only", paste0(value, "% complete"))
+        )
+      )
+    )
+  )
+}
+
+
diff --git a/R/dashboardPage.R b/R/dashboardPage.R
new file mode 100644
index 0000000..e35c9ec
--- /dev/null
+++ b/R/dashboardPage.R
@@ -0,0 +1,73 @@
+#' Dashboard page
+#'
+#' This creates a dashboard page for use in a Shiny app.
+#'
+#' @param header A header created by \code{dashboardHeader}.
+#' @param sidebar A sidebar created by \code{dashboardSidebar}.
+#' @param body A body created by \code{dashboardBody}.
+#' @param title A title to display in the browser's title bar. If no value is
+#'   provided, it will try to extract the title from the \code{dashboardHeader}.
+#' @param skin A color theme. One of \code{"blue"}, \code{"black"},
+#'   \code{"purple"}, \code{"green"}, \code{"red"}, or \code{"yellow"}.
+#'
+#' @seealso \code{\link{dashboardHeader}}, \code{\link{dashboardSidebar}},
+#'   \code{\link{dashboardBody}}.
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#' # Basic dashboard page template
+#' library(shiny)
+#' shinyApp(
+#'   ui = dashboardPage(
+#'     dashboardHeader(),
+#'     dashboardSidebar(),
+#'     dashboardBody(),
+#'     title = "Dashboard example"
+#'   ),
+#'   server = function(input, output) { }
+#' )
+#' }
+#' @export
+dashboardPage <- function(header, sidebar, body, title = NULL,
+  skin = c("blue", "black", "purple", "green", "red", "yellow")) {
+
+  tagAssert(header, type = "header", class = "main-header")
+  tagAssert(sidebar, type = "aside", class = "main-sidebar")
+  tagAssert(body, type = "div", class = "content-wrapper")
+  skin <- match.arg(skin)
+
+  extractTitle <- function(header) {
+    x <- header$children[[2]]
+    if (x$name == "span" &&
+        !is.null(x$attribs$class) &&
+        x$attribs$class == "logo" &&
+        length(x$children) != 0)
+    {
+      x$children[[1]]
+    } else {
+      ""
+    }
+  }
+
+  title <- title %OR% extractTitle(header)
+
+  content <- div(class = "wrapper",
+    header,
+    sidebar,
+    body
+  )
+
+  # if the sidebar has the attribute `data-collapsed = "true"`, it means that
+  # the user set the `collapsed` argument of `dashboardSidebar` to TRUE
+  collapsed <- findAttribute(sidebar, "data-collapsed", "true")
+
+  addDeps(
+    tags$body(
+      # the "sidebar-collapse" class on the body means that the sidebar should
+      # the collapsed (AdminLTE code)
+      class = paste0("skin-", skin, if (collapsed) " sidebar-collapse"),
+      style = "min-height: 611px;",
+      shiny::bootstrapPage(content, title = title)
+    )
+  )
+}
diff --git a/R/dashboardSidebar.R b/R/dashboardSidebar.R
new file mode 100644
index 0000000..1f6be3f
--- /dev/null
+++ b/R/dashboardSidebar.R
@@ -0,0 +1,487 @@
+#' Create a dashboard sidebar.
+#'
+#' A dashboard sidebar typically contains a \code{\link{sidebarMenu}}, although
+#' it may also contain a \code{\link{sidebarSearchForm}}, or other Shiny inputs.
+#'
+#' @param ... Items to put in the sidebar.
+#' @param disable If \code{TRUE}, the sidebar will be disabled.
+#' @param width The width of the sidebar. This must either be a number which
+#'   specifies the width in pixels, or a string that specifies the width in CSS
+#'   units.
+#' @param collapsed If \code{TRUE}, the sidebar will be collapsed on app startup.
+#'
+#' @seealso \code{\link{sidebarMenu}}
+#'
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#' header <- dashboardHeader()
+#'
+#' sidebar <- dashboardSidebar(
+#'   sidebarUserPanel("User Name",
+#'     subtitle = a(href = "#", icon("circle", class = "text-success"), "Online"),
+#'     # Image file should be in www/ subdir
+#'     image = "userimage.png"
+#'   ),
+#'   sidebarSearchForm(label = "Enter a number", "searchText", "searchButton"),
+#'   sidebarMenu(
+#'     # Setting id makes input$tabs give the tabName of currently-selected tab
+#'     id = "tabs",
+#'     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
+#'     menuItem("Widgets", icon = icon("th"), tabName = "widgets", badgeLabel = "new",
+#'              badgeColor = "green"),
+#'     menuItem("Charts", icon = icon("bar-chart-o"),
+#'       menuSubItem("Sub-item 1", tabName = "subitem1"),
+#'       menuSubItem("Sub-item 2", tabName = "subitem2")
+#'     )
+#'   )
+#' )
+#'
+#' body <- dashboardBody(
+#'   tabItems(
+#'     tabItem("dashboard",
+#'       div(p("Dashboard tab content"))
+#'     ),
+#'     tabItem("widgets",
+#'       "Widgets tab content"
+#'     ),
+#'     tabItem("subitem1",
+#'       "Sub-item 1 tab content"
+#'     ),
+#'     tabItem("subitem2",
+#'       "Sub-item 2 tab content"
+#'     )
+#'   )
+#' )
+#'
+#' shinyApp(
+#'   ui = dashboardPage(header, sidebar, body),
+#'   server = function(input, output) { }
+#' )
+#' }
+#' @export
+dashboardSidebar <- function(..., disable = FALSE, width = NULL, collapsed = FALSE) {
+  width <- validateCssUnit(width)
+
+  # Set up custom CSS for custom width
+  custom_css <- NULL
+  if (!is.null(width)) {
+    # This CSS is derived from the sidebar-related instances of '230px' (the
+    # default sidebar width) from inst/AdminLTE/AdminLTE.css. One difference is
+    # that instead making changes to the global settings, we've put them in a
+    # media query (min-width: 768px), so that it won't override other media
+    # queries (like max-width: 767px) that work for narrower screens.
+    custom_css <- tags$head(tags$style(HTML(gsub("_WIDTH_", width, fixed = TRUE, '
+      .main-sidebar, .left-side {
+        width: _WIDTH_;
+      }
+      @media (min-width: 768px) {
+        .content-wrapper,
+        .right-side,
+        .main-footer {
+          margin-left: _WIDTH_;
+        }
+        .main-sidebar,
+        .left-side {
+          width: _WIDTH_;
+        }
+      }
+      @media (max-width: 767px) {
+        .sidebar-open .content-wrapper,
+        .sidebar-open .right-side,
+        .sidebar-open .main-footer {
+          -webkit-transform: translate(_WIDTH_, 0);
+          -ms-transform: translate(_WIDTH_, 0);
+          -o-transform: translate(_WIDTH_, 0);
+          transform: translate(_WIDTH_, 0);
+        }
+      }
+      @media (max-width: 767px) {
+        .main-sidebar,
+        .left-side {
+          -webkit-transform: translate(-_WIDTH_, 0);
+          -ms-transform: translate(-_WIDTH_, 0);
+          -o-transform: translate(-_WIDTH_, 0);
+          transform: translate(-_WIDTH_, 0);
+        }
+      }
+      @media (min-width: 768px) {
+        .sidebar-collapse .main-sidebar,
+        .sidebar-collapse .left-side {
+          -webkit-transform: translate(-_WIDTH_, 0);
+          -ms-transform: translate(-_WIDTH_, 0);
+          -o-transform: translate(-_WIDTH_, 0);
+          transform: translate(-_WIDTH_, 0);
+        }
+      }
+    '))))
+  }
+
+  # If we're restoring a bookmarked app, this holds the value of whether or not the
+  # sidebar was collapsed. If this is not the case, the default is whatever the user
+  # specified in the `collapsed` argument.
+  dataValue <- shiny::restoreInput(id = "sidebarCollapsed", default = collapsed)
+  if (disable) dataValue <- TRUE # this is a workaround to fix #209
+  dataValueString <- if (dataValue) "true" else "false"
+
+  # The expanded/collapsed state of the sidebar is actually set by adding a
+  # class to the body (not to the sidebar). However, it makes sense for the
+  # `collapsed` argument to belong in this function. So this information is
+  # just passed through (as the `data-collapsed` attribute) to the
+  # `dashboardPage()` function
+  tags$aside(
+    class = "main-sidebar", `data-collapsed` = dataValueString, custom_css,
+    tags$section(
+      class = "sidebar",
+      `data-disable` = if (disable) 1 else NULL,
+      list(...)
+    )
+  )
+}
+
+#' A panel displaying user information in a sidebar
+#'
+#' @param name Name of the user.
+#' @param subtitle Text or HTML to be shown below the name.
+#' @param image A filename or URL to use for an image of the person. If it is a
+#'   local file, the image should be contained under the www/ subdirectory of
+#'   the application.
+#'
+#' @family sidebar items
+#'
+#' @seealso \code{\link{dashboardSidebar}} for example usage.
+#'
+#' @export
+sidebarUserPanel <- function(name, subtitle = NULL, image = NULL) {
+  div(class = "user-panel",
+    if (!is.null(image)) {
+      div(class = "pull-left image",
+        img(src = image, class = "img-circle", alt = "User Image")
+      )
+    },
+    div(class = "pull-left info",
+      # If no image, move text to the left: by overriding default left:55px
+      style = if (is.null(image)) "left: 4px",
+      p(name),
+      subtitle
+    )
+  )
+}
+
+#' Create a search form to place in a sidebar
+#'
+#' A search form consists of a text input field and a search button.
+#'
+#' @param textId Shiny input ID for the text input box.
+#' @param buttonId Shiny input ID for the search button (which functions like an
+#'   \code{\link[shiny]{actionButton}}).
+#' @param label Text label to display inside the search box.
+#' @param icon An icon tag, created by \code{\link[shiny]{icon}}.
+#'
+#' @family sidebar items
+#'
+#' @seealso \code{\link{dashboardSidebar}} for example usage.
+#'
+#' @export
+sidebarSearchForm <- function(textId, buttonId, label = "Search...",
+                              icon = shiny::icon("search")) {
+  tags$form(class = "sidebar-form",
+    div(class = "input-group",
+      tags$input(id = textId, type = "text", class = "form-control",
+        placeholder = label
+      ),
+      span(class = "input-group-btn",
+        tags$button(id = buttonId, type = "button",
+          class = "btn btn-flat action-button",
+          icon
+        )
+      )
+    )
+  )
+}
+
+#' Create a dashboard sidebar menu and menu items.
+#'
+#' A \code{dashboardSidebar} can contain a \code{sidebarMenu}. A
+#' \code{sidebarMenu} contains \code{menuItem}s, and they can in turn contain
+#' \code{menuSubItem}s.
+#'
+#' Menu items (and similarly, sub-items) should have a value for either
+#' \code{href} or \code{tabName}; otherwise the item would do nothing. If it has
+#' a value for \code{href}, then the item will simply be a link to that value.
+#'
+#' If a \code{menuItem} has a non-NULL \code{tabName}, then the \code{menuItem}
+#' will behave like a tab -- in other words, clicking on the \code{menuItem}
+#' will bring a corresponding \code{tabItem} to the front, similar to a
+#' \code{\link[shiny]{tabPanel}}. One important difference between a
+#' \code{menuItem} and a \code{tabPanel} is that, for a \code{menuItem}, you
+#' must also supply a corresponding \code{tabItem} with the same value for
+#' \code{tabName}, whereas for a \code{tabPanel}, no \code{tabName} is needed.
+#' (This is because the structure of a \code{tabPanel} is such that the tab name
+#' can be automatically generated.) Sub-items are also able to activate
+#' \code{tabItem}s.
+#'
+#' Menu items (but not sub-items) also may have an optional badge. A badge is a
+#' colored oval containing text.
+#'
+#' @param text Text to show for the menu item.
+#' @param id For \code{sidebarMenu}, if \code{id} is present, this id will be
+#'   used for a Shiny input value, and it will report which tab is selected. For
+#'   example, if \code{id="tabs"}, then \code{input$tabs} will be the
+#'   \code{tabName} of the currently-selected tab. If you want to be able to
+#'   bookmark and restore the selected tab, an \code{id} is required.
+#' @param icon An icon tag, created by \code{\link[shiny]{icon}}. If
+#'   \code{NULL}, don't display an icon.
+#' @param badgeLabel A label for an optional badge. Usually a number or a short
+#'   word like "new".
+#' @param badgeColor A color for the badge. Valid colors are listed in
+#'   \link{validColors}.
+#' @param href An link address. Not compatible with \code{tabName}.
+#' @param tabName The name of a tab that this menu item will activate. Not
+#'   compatible with \code{href}.
+#' @param newtab If \code{href} is supplied, should the link open in a new
+#'   browser tab?
+#' @param selected If \code{TRUE}, this \code{menuItem} or \code{menuSubItem}
+#'   will start selected. If no item have \code{selected=TRUE}, then the first
+#'   \code{menuItem} will start selected.
+#' @param expandedName A unique name given to each \code{menuItem} that serves
+#'   to indicate which one (if any) is currently expanded. (This is only applicable
+#'   to \code{menuItem}s that have children and it is mostly only useful for
+#'   bookmarking state.)
+#' @param startExpanded Should this \code{menuItem} be expanded on app startup?
+#'   (This is only applicable to \code{menuItem}s that have children, and only
+#'   one of these can be expanded at any given time).
+#' @param ... For menu items, this may consist of \code{\link{menuSubItem}}s.
+#' @param .list An optional list containing items to put in the menu Same as the
+#'   \code{...} arguments, but in list format. This can be useful when working
+#'   with programmatically generated items.
+#'
+#' @family sidebar items
+#'
+#' @seealso \code{\link{dashboardSidebar}} for example usage. For
+#'   dynamically-generated sidebar menus, see \code{\link{renderMenu}} and
+#'   \code{\link{sidebarMenuOutput}}.
+#'
+#' @export
+sidebarMenu <- function(..., id = NULL, .list = NULL) {
+  items <- c(list(...), .list)
+
+  # Restore a selected tab from bookmarked state. Bookmarking was added in Shiny
+  # 0.14.
+  if (utils::packageVersion("shiny") >= "0.14" && !is.null(id)) {
+    selectedTabName <- shiny::restoreInput(id = id, default = NULL)
+    if (!is.null(selectedTabName)) {
+      # Find the menuItem or menuSubItem with a `tabname` that matches
+      # `selectedTab`. Then set `data-start-selected` to 1 for that tab and 0
+      # for all others.
+
+      # Given a menuItem and a logical value for `selected`, set the
+      # data-start-selected attribute to the appropriate value (1 or 0).
+      selectItem <- function(item, selected) {
+
+        # in the cases that the children of menuItems are NOT menuSubItems
+        if (is.atomic(item) || length(item$children) == 0) {
+          return(item)
+        }
+
+        if (selected) value <- 1
+        else          value <- NULL
+
+        # Try to find the child <a data-toggle="tab"> tag and then set
+        # data-start-selected="1". The []<- assignment is to preserve
+        # attributes.
+        item$children[] <- lapply(item$children, function(child) {
+
+          # Find the appropriate <a> child
+          if (tagMatches(child, name = "a", `data-toggle` = "tab")) {
+            child$attribs[["data-start-selected"]] <- value
+          }
+
+          child
+        })
+
+        item
+      }
+
+      # Given a menuItem and a tabName (string), return TRUE if the menuItem has
+      # that tabName, FALSE otherwise.
+      itemHasTabName <- function(item, tabName) {
+        # Must be a <li> tag
+        if (!tagMatches(item, name = "li")) {
+          return(FALSE)
+        }
+
+        # Look for an <a> child with data-value=tabName
+        found <- FALSE
+        lapply(item$children, function(child) {
+          if (tagMatches(child, name = "a", `data-value` = tabName)) {
+            found <<- TRUE
+          }
+        })
+
+        found
+      }
+
+      # Actually do the work of marking selected tabs and unselected ones.
+      items <- lapply(items, function(item) {
+        if (tagMatches(item, name = "li", class = "treeview")) {
+          # Search in menuSubItems
+          item$children[] <- lapply(item$children[], function(subItem) {
+
+            if (tagMatches(subItem, name = "ul", class = "treeview-menu")) {
+              subItem$children[] <- lapply(subItem$children, function(subSubItem) {
+                selected <- itemHasTabName(subSubItem, selectedTabName)
+                selectItem(subSubItem, selected)
+              })
+            }
+            subItem
+          })
+
+        } else {
+          # Regular menuItems
+          selected <- itemHasTabName(item, selectedTabName)
+          item <- selectItem(item, selected)
+        }
+
+        item
+      })
+    }
+    # This is a 0 height div, whose only purpose is to hold the tabName of the currently
+    # selected menuItem in its `data-value` attribute. This is the DOM element that is
+    # bound to tabItemInputBinding in the JS side.
+    items[[length(items) + 1]] <- div(id = id,
+      class = "sidebarMenuSelectedTabItem", `data-value` = selectedTabName %OR% "null")
+  }
+
+  # Use do.call so that we don't add an extra list layer to the children of the
+  # ul tag. This makes it a little easier to traverse the tree to search for
+  # selected items to restore.
+  do.call(tags$ul, c(class = "sidebar-menu", items))
+}
+
+#' @rdname sidebarMenu
+#' @export
+menuItem <- function(text, ..., icon = NULL, badgeLabel = NULL, badgeColor = "green",
+                     tabName = NULL, href = NULL, newtab = TRUE, selected = NULL,
+                     expandedName = as.character(gsub("[[:space:]]", "", text)),
+                     startExpanded = FALSE) {
+  subItems <- list(...)
+
+  if (!is.null(icon)) tagAssert(icon, type = "i")
+  if (!is.null(href) + !is.null(tabName) + (length(subItems) > 0) != 1 ) {
+    stop("Must have either href, tabName, or sub-items (contained in ...).")
+  }
+
+  if (!is.null(badgeLabel) && length(subItems) != 0) {
+    stop("Can't have both badge and subItems")
+  }
+  validateColor(badgeColor)
+
+  # If there's a tabName, set up the correct href and <a> target
+  isTabItem <- FALSE
+  target <- NULL
+  if (!is.null(tabName)) {
+    validateTabName(tabName)
+    isTabItem <- TRUE
+    href <- paste0("#shiny-tab-", tabName)
+  } else if (is.null(href)) {
+    href <- "#"
+  } else {
+    # If supplied href, set up <a> tag's target
+    if (newtab)
+      target <- "_blank"
+  }
+
+  # Generate badge if needed
+  if (!is.null(badgeLabel)) {
+    badgeTag <- tags$small(
+      class = paste0("badge pull-right bg-", badgeColor),
+      badgeLabel
+    )
+  } else {
+    badgeTag <- NULL
+  }
+
+  # If no subitems, return a pretty simple tag object
+  if (length(subItems) == 0) {
+    return(
+      tags$li(
+        a(href = href,
+          `data-toggle` = if (isTabItem) "tab",
+          `data-value` = if (!is.null(tabName)) tabName,
+          `data-start-selected` = if (isTRUE(selected)) 1 else NULL,
+          target = target,
+          icon,
+          span(text),
+          badgeTag
+        )
+      )
+    )
+  }
+
+  # If we're restoring a bookmarked app, this holds the value of what menuItem (if any)
+  # was expanded (this has be to stored separately from the selected menuItem, since
+  # these actually independent in AdminLTE). If no menuItem was expanded, `dataExpanded`
+  # is NULL. However, we want to this input to get passed on (and not dropped), so we
+  # do `%OR% ""` to assure this.
+  default <- if (startExpanded) expandedName else ""
+  dataExpanded <- shiny::restoreInput(id = "sidebarItemExpanded", default) %OR% ""
+
+  # If `dataExpanded` is not the empty string, we need to check that it is eqaul to the
+  # this menuItem's `expandedName``
+  isExpanded <- nzchar(dataExpanded) && (dataExpanded == expandedName)
+
+  tags$li(class = "treeview",
+    a(href = href,
+      icon,
+      span(text),
+      shiny::icon("angle-left", class = "pull-right")
+    ),
+    # Use do.call so that we don't add an extra list layer to the children of the
+    # ul tag. This makes it a little easier to traverse the tree to search for
+    # selected items to restore.
+    do.call(tags$ul, c(
+      class = paste0("treeview-menu", if (isExpanded) " menu-open" else ""),
+      style = paste0("display: ",     if (isExpanded) "block;" else "none;"),
+      `data-expanded` = expandedName,
+      subItems))
+  )
+}
+
+#' @rdname sidebarMenu
+#' @export
+menuSubItem <- function(text, tabName = NULL, href = NULL, newtab = TRUE,
+  icon = shiny::icon("angle-double-right"), selected = NULL)
+{
+
+  if (!is.null(href) && !is.null(tabName)) {
+    stop("Can't specify both href and tabName")
+  }
+
+  # If there's a tabName, set up the correct href
+  isTabItem <- FALSE
+  target <- NULL
+  if (!is.null(tabName)) {
+    validateTabName(tabName)
+    isTabItem <- TRUE
+    href <- paste0("#shiny-tab-", tabName)
+  } else if (is.null(href)) {
+    href <- "#"
+  } else {
+    # If supplied href, set up <a> tag's target
+    if (newtab)
+      target <- "_blank"
+  }
+
+
+  tags$li(
+    a(href = href,
+      `data-toggle` = if (isTabItem) "tab",
+      `data-value` = if (!is.null(tabName)) tabName,
+      `data-start-selected` = if (isTRUE(selected)) 1 else NULL,
+      target = target,
+      icon,
+      text
+    )
+  )
+}
diff --git a/R/deps.R b/R/deps.R
new file mode 100644
index 0000000..8376d43
--- /dev/null
+++ b/R/deps.R
@@ -0,0 +1,39 @@
+# Add an html dependency, without overwriting existing ones
+appendDependencies <- function(x, value) {
+  if (inherits(value, "html_dependency"))
+    value <- list(value)
+
+  old <- attr(x, "html_dependencies", TRUE)
+
+  htmlDependencies(x) <- c(old, value)
+  x
+}
+
+# Add dashboard dependencies to a tag object
+addDeps <- function(x) {
+  if (getOption("shiny.minified", TRUE)) {
+    adminLTE_js <- "app.min.js"
+    shinydashboard_js <- "shinydashboard.min.js"
+    adminLTE_css <- c("AdminLTE.min.css", "_all-skins.min.css")
+  } else {
+    adminLTE_js <- "app.js"
+    shinydashboard_js <- "shinydashboard.js"
+    adminLTE_css <- c("AdminLTE.css", "_all-skins.css")
+  }
+
+  dashboardDeps <- list(
+    htmlDependency("AdminLTE", "2.0.6",
+      c(file = system.file("AdminLTE", package = "shinydashboard")),
+      script = adminLTE_js,
+      stylesheet = adminLTE_css
+    ),
+    htmlDependency("shinydashboard",
+      as.character(utils::packageVersion("shinydashboard")),
+      c(file = system.file(package = "shinydashboard")),
+      script = shinydashboard_js,
+      stylesheet = "shinydashboard.css"
+    )
+  )
+
+  appendDependencies(x, dashboardDeps)
+}
diff --git a/R/menuOutput.R b/R/menuOutput.R
new file mode 100644
index 0000000..ceea76d
--- /dev/null
+++ b/R/menuOutput.R
@@ -0,0 +1,159 @@
+#' Create a dynamic menu output for shinydashboard (client side)
+#'
+#' This can be used as a placeholder for dynamically-generated
+#' \code{\link{dropdownMenu}}, \code{\link{notificationItem}},
+#' \code{\link{messageItem}}, \code{\link{taskItem}} \code{\link{sidebarMenu}},
+#' or \code{\link{menuItem}}. If called directly, you must make sure to supply
+#' the correct type of tag. It is simpler to use the wrapper functions if
+#' present; for example, \code{\link{dropdownMenuOutput}} and
+#' \code{\link{sidebarMenuOutput}}.
+#'
+#' @param outputId Output variable name.
+#' @param tag A tag function, like \code{tags$li} or \code{tags$ul}.
+#'
+#' @family menu outputs
+#' @seealso \code{\link{renderMenu}} for the corresponding server side function
+#'   and examples.
+menuOutput <- function(outputId, tag = tags$li) {
+  tag(id = outputId, class = "shinydashboard-menu-output")
+}
+
+
+#' Create a dropdown menu output (client side)
+#'
+#' This is the UI-side function for creating a dynamic dropdown menu.
+#'
+#' @inheritParams menuOutput
+#' @family menu outputs
+#' @seealso \code{\link{renderMenu}} for the corresponding server-side function
+#'   and examples, and \code{\link{dropdownMenu}} for the corresponding function
+#'   for generating static menus.
+#' @export
+dropdownMenuOutput <- function(outputId) {
+  menuOutput(outputId = outputId, tag = tags$li)
+}
+
+
+#' Create a sidebar menu output (client side)
+#'
+#' This is the UI-side function for creating a dynamic sidebar menu.
+#'
+#' @inheritParams menuOutput
+#' @family menu outputs
+#' @seealso \code{\link{renderMenu}} for the corresponding server-side function
+#'   and examples, and \code{\link{sidebarMenu}} for the corresponding function
+#'   for generating static sidebar menus.
+#' @export
+sidebarMenuOutput <- function(outputId) {
+  menuOutput(outputId = outputId, tag = tags$ul)
+}
+
+#' Create a sidebar menu item output (client side)
+#'
+#' This is the UI-side function for creating a dynamic sidebar menu item.
+#'
+#' @inheritParams menuOutput
+#' @family menu outputs
+#' @seealso \code{\link{renderMenu}} for the corresponding server-side function
+#'   and examples, and \code{\link{menuItem}} for the corresponding function
+#'   for generating static sidebar menus.
+#' @export
+menuItemOutput <- function(outputId) {
+  menuOutput(outputId = outputId, tag = tags$li)
+}
+
+
+#' Create dynamic menu output (server side)
+#'
+#' @inheritParams shiny::renderUI
+#'
+#' @seealso \code{\link{menuOutput}} for the corresponding client side function
+#'   and examples.
+#' @family menu outputs
+#' @export
+#' @examples
+#' ## Only run these examples in interactive R sessions
+#'
+#' if (interactive()) {
+#' library(shiny)
+#' # ========== Dynamic sidebarMenu ==========
+#' ui <- dashboardPage(
+#'   dashboardHeader(title = "Dynamic sidebar"),
+#'   dashboardSidebar(
+#'     sidebarMenuOutput("menu")
+#'   ),
+#'   dashboardBody()
+#' )
+#'
+#' server <- function(input, output) {
+#'   output$menu <- renderMenu({
+#'     sidebarMenu(
+#'       menuItem("Menu item", icon = icon("calendar"))
+#'     )
+#'   })
+#' }
+#'
+#' shinyApp(ui, server)
+#'
+#' # ========== Dynamic dropdownMenu ==========
+#' # Example message data in a data frame
+#' messageData <- data.frame(
+#'   from = c("Admininstrator", "New User", "Support"),
+#'   message = c(
+#'     "Sales are steady this month.",
+#'     "How do I register?",
+#'     "The new server is ready."
+#'   ),
+#'   stringsAsFactors = FALSE
+#' )
+#'
+#' ui <- dashboardPage(
+#'   dashboardHeader(
+#'     title = "Dynamic menus",
+#'     dropdownMenuOutput("messageMenu")
+#'   ),
+#'   dashboardSidebar(),
+#'   dashboardBody(
+#'     fluidRow(
+#'       box(
+#'         title = "Controls",
+#'         sliderInput("slider", "Number of observations:", 1, 100, 50)
+#'       )
+#'     )
+#'   )
+#' )
+#'
+#' server <- function(input, output) {
+#'   output$messageMenu <- renderMenu({
+#'     # Code to generate each of the messageItems here, in a list. messageData
+#'     # is a data frame with two columns, 'from' and 'message'.
+#'     # Also add on slider value to the message content, so that messages update.
+#'     msgs <- apply(messageData, 1, function(row) {
+#'       messageItem(
+#'         from = row[["from"]],
+#'         message = paste(row[["message"]], input$slider)
+#'       )
+#'     })
+#'
+#'     dropdownMenu(type = "messages", .list = msgs)
+#'   })
+#' }
+#'
+#' shinyApp(ui, server)
+#' }
+renderMenu <- shiny::renderUI
+
+# R CMD check thinks that shiny::renderUI has an undeclared global variable
+# called "func".
+globalVariables("func")
+
+#' Create a dropdown menu output (server side; deprecated)
+#'
+#' This is the server-side function for creating a dynamic dropdown menu.
+#'
+#' @inheritParams shiny::renderUI
+#' @export
+renderDropdownMenu <- function(expr, env = parent.frame(), quoted = FALSE) {
+  .Deprecated("renderMenu")
+   shiny::renderUI(expr, env, quoted, func = FALSE)
+}
diff --git a/R/shinydashboard-package.r b/R/shinydashboard-package.r
new file mode 100644
index 0000000..c8dc35c
--- /dev/null
+++ b/R/shinydashboard-package.r
@@ -0,0 +1,6 @@
+#' shinydashboard
+#'
+#' @name shinydashboard
+#' @import htmltools
+#' @docType package
+NULL
diff --git a/R/tabs.R b/R/tabs.R
new file mode 100644
index 0000000..bdfbd94
--- /dev/null
+++ b/R/tabs.R
@@ -0,0 +1,83 @@
+#' A container for tab items
+#'
+#' @param ... Items to put in the container. Each item should be a
+#'   \code{\link{tabItem}}.
+#'
+#' @seealso \code{\link{menuItem}}, \code{\link{menuSubItem}},
+#'   \code{\link{tabItem}}. See \code{\link{sidebarMenu}} for a usage example.
+#' @export
+tabItems <- function(...) {
+  lapply(list(...), tagAssert, class = "tab-pane")
+
+  div(class = "tab-content", ...)
+}
+
+#' One tab to put inside a tab items container
+#'
+#' @param tabName The name of a tab. This must correspond to the \code{tabName}
+#'   of a \code{\link{menuItem}} or \code{\link{menuSubItem}}.
+#' @param ... Contents of the tab.
+#'
+#' @seealso \code{\link{menuItem}}, \code{\link{menuSubItem}},
+#'   \code{\link{tabItems}}. See \code{\link{sidebarMenu}} for a usage example.
+#' @export
+tabItem <- function(tabName = NULL, ...) {
+  if (is.null(tabName))
+    stop("Need tabName")
+
+  validateTabName(tabName)
+
+  div(
+    role = "tabpanel",
+    class = "tab-pane",
+    id = paste0("shiny-tab-", tabName),
+    ...
+  )
+}
+
+#' Change the selected tab on the client
+#'
+#' This function controls the active tab of \code{\link{tabItems}} from the
+#' server. It behaves just like \code{\link[shiny]{updateTabsetPanel}}.
+#'
+#' @inheritParams shiny::updateTabsetPanel
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#'
+#' ui <- dashboardPage(
+#'   dashboardHeader(title = "Simple tabs"),
+#'   dashboardSidebar(
+#'     sidebarMenu(
+#'       id = "tabs",
+#'       menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
+#'       menuItem("Widgets", tabName = "widgets", icon = icon("th"))
+#'     ),
+#'     actionButton('switchtab', 'Switch tab')
+#'   ),
+#'   dashboardBody(
+#'     tabItems(
+#'       tabItem(tabName = "dashboard",
+#'         h2("Dashboard tab content")
+#'       ),
+#'       tabItem(tabName = "widgets",
+#'         h2("Widgets tab content")
+#'       )
+#'     )
+#'   )
+#' )
+#'
+#' server <- function(input, output, session) {
+#'   observeEvent(input$switchtab, {
+#'     newtab <- switch(input$tabs,
+#'       "dashboard" = "widgets",
+#'       "widgets" = "dashboard"
+#'     )
+#'     updateTabItems(session, "tabs", newtab)
+#'   })
+#' }
+#'
+#' shinyApp(ui, server)
+#' }
+#' @export
+updateTabItems <- shiny::updateTabsetPanel
diff --git a/R/utils.R b/R/utils.R
new file mode 100644
index 0000000..5f7563a
--- /dev/null
+++ b/R/utils.R
@@ -0,0 +1,221 @@
+#' Assert that a tag has specified properties
+#' @param tag A tag object.
+#' @param type The type of a tag, like "div", "a", "span".
+#' @param class An HTML class.
+#' @param allowUI If TRUE (the default), allow dynamic outputs generated by
+#'   \code{\link[shiny]{uiOutput}} or \code{\link[shiny]{htmlOutput}}. When a
+#'   dynamic output is provided, \code{tagAssert} won't try to validate the the
+#'   contents.
+#' @keywords internal
+tagAssert <- function(tag, type = NULL, class = NULL, allowUI = TRUE) {
+  if (!inherits(tag, "shiny.tag")) {
+    print(tag)
+    stop("Expected an object with class 'shiny.tag'.")
+  }
+
+  # Skip dynamic output elements
+  if (allowUI &&
+      (hasCssClass(tag, "shiny-html-output") ||
+       hasCssClass(tag, "shinydashboard-menu-output"))) {
+    return()
+  }
+
+  if (!is.null(type) && tag$name != type) {
+    stop("Expected tag to be of type ", type)
+  }
+
+  if (!is.null(class)) {
+    if (is.null(tag$attribs$class)) {
+      stop("Expected tag to have class '", class, "'")
+
+    } else {
+      tagClasses <- strsplit(tag$attribs$class, " ")[[1]]
+      if (!(class %in% tagClasses)) {
+        stop("Expected tag to have class '", class, "'")
+      }
+    }
+  }
+}
+
+# Given the name of an icon, like "fa-dashboard" or "glyphicon-user",
+# return CSS classnames, like "fa fa-dashboard" or "glyphicon glyphicon-user".
+getIconClass <- function(icon) {
+  iconGroup <- sub("^((glyphicon)|(fa))-.*", "\\1", icon)
+  paste(iconGroup, icon)
+}
+
+
+# Returns TRUE if a color is a valid color defined in AdminLTE, throws error
+# otherwise.
+validateColor <- function(color) {
+  if (color %in% validColors) {
+    return(TRUE)
+  }
+
+  stop("Invalid color: ", color, ". Valid colors are: ",
+       paste(validColors, collapse = ", "), ".")
+}
+
+#' Valid colors
+#'
+#' These are valid colors for various dashboard components. Valid colors are
+#' listed below.
+#'
+#' \itemize{
+#'   \item \code{red}
+#'   \item \code{yellow}
+#'   \item \code{aqua}
+#'   \item \code{blue}
+#'   \item \code{light-blue}
+#'   \item \code{green}
+#'   \item \code{navy}
+#'   \item \code{teal}
+#'   \item \code{olive}
+#'   \item \code{lime}
+#'   \item \code{orange}
+#'   \item \code{fuchsia}
+#'   \item \code{purple}
+#'   \item \code{maroon}
+#'   \item \code{black}
+#' }
+#'
+#' @usage NULL
+#' @format NULL
+#'
+#' @keywords internal
+validColors <- c("red", "yellow", "aqua", "blue", "light-blue", "green",
+                 "navy", "teal", "olive", "lime", "orange", "fuchsia",
+                 "purple", "maroon", "black")
+
+
+# Returns TRUE if a status is valid; throws error otherwise.
+validateStatus <- function(status) {
+
+  if (status %in% validStatuses) {
+    return(TRUE)
+  }
+
+  stop("Invalid status: ", status, ". Valid statuses are: ",
+       paste(validStatuses, collapse = ", "), ".")
+}
+
+
+#' Valid statuses
+#'
+#' These status strings correspond to colors as defined in Bootstrap's CSS.
+#' Although the colors can vary depending on the particular CSS selector, they
+#' generally appear as follows:
+#'
+#' \itemize{
+#'   \item \code{primary} Blue (sometimes dark blue)
+#'   \item \code{success} Green
+#'   \item \code{info} Blue
+#'   \item \code{warning} Orange
+#'   \item \code{danger} Red
+#' }
+#'
+#' @usage NULL
+#' @format NULL
+#'
+#' @keywords internal
+validStatuses <- c("primary", "success", "info", "warning", "danger")
+
+
+"%OR%" <- function(a, b) if (!is.null(a)) a else b
+
+# Return TRUE if a shiny.tag object has a CSS class, FALSE otherwise.
+hasCssClass <- function(tag, class) {
+  if (is.null(tag$attribs) || is.null(tag$attribs$class))
+    return(FALSE)
+
+  classes <- strsplit(tag$attribs$class, " +")[[1]]
+  return(class %in% classes)
+}
+
+
+# Make sure a tab name is valid (there's no "." in it).
+validateTabName <- function(name) {
+  if (grepl(".", name, fixed = TRUE)) {
+    stop("tabName must not have a '.' in it.")
+  }
+}
+
+
+# This is like a==b, except that if a or b is NULL or an empty vector, it won't
+# return logical(0). If a AND b are NULL/length-0, this will return TRUE; if
+# just one of them is NULL/length-0, this will FALSE. This is for use in
+# conditionals where `if(logical(0))` would cause an error. Similar to using
+# identical(a,b), but less stringent about types: `equals(1, 1L)` is TRUE, but
+# `identical(1, 1L)` is FALSE.
+equals <- function(a, b) {
+  alen <- length(a)
+  blen <- length(b)
+  if (alen==0 && blen==0) {
+    return(TRUE)
+  }
+  if (alen > 1 || blen > 1) {
+    stop("Can only compare objects of length 0 or 1")
+  }
+  if (alen==0 || blen==0) {
+    return(FALSE)
+  }
+
+  a == b
+}
+
+
+# Return TRUE if a tag object matches a specific id, and/or tag name, and/or
+# class, and or other arbitrary tag attributes. Put the args after ... so that
+# caller must use named arguments.
+tagMatches <- function(item, ..., id = NULL, name = NULL, class = NULL) {
+  dots <- list(...)
+  if (!inherits(item, "shiny.tag")) {
+    return(FALSE)
+  }
+  if (!is.null(id) && !equals(item$attribs$id, id)) {
+    return(FALSE)
+  }
+  if (!is.null(name) && !equals(item$name, name)) {
+    return(FALSE)
+  }
+  if (!is.null(class)) {
+    if (is.null(item$attribs$class)) {
+      return(FALSE)
+    }
+    classes <- strsplit(item$attribs$class, " ")[[1]]
+    if (! class %in% classes) {
+      return(FALSE)
+    }
+  }
+
+  for (i in seq_along(dots)) {
+    arg     <- dots[[i]]
+    argName <- names(dots)[[i]]
+    if (!equals(item$attribs[[argName]], arg)) {
+      return(FALSE)
+    }
+  }
+
+  TRUE
+}
+
+# This function takes a DOM element/tag object and reccurs within it until
+# it finds a child which has an attribute called `attr` and with value `val`
+# (and returns TRUE). If it finds an element with an attribute called `attr`
+# whose value is NOT `val`, it returns FALSE. If it exhausts all children
+# and it doesn't find an element with an attribute called `attr`, it also
+# returns FALSE
+findAttribute <- function(x, attr, val) {
+  if (is.atomic(x)) return(FALSE) # exhausted this branch of the tree
+
+  if (!is.null(x$attribs[[attr]])) { # found attribute called `attr`
+    if (identical(x$attribs[[attr]], val)) return(TRUE)
+    else return(FALSE)
+  }
+
+  if (length(x$children) > 0) { # recursion
+    return(any(unlist(lapply(x$children, findAttribute, attr, val))))
+  }
+
+  return(FALSE) # found no attribute called `attr`
+}
diff --git a/R/valueBoxOutput.R b/R/valueBoxOutput.R
new file mode 100644
index 0000000..34a159a
--- /dev/null
+++ b/R/valueBoxOutput.R
@@ -0,0 +1,82 @@
+#' Create an info or value box output (client side)
+#'
+#' This is the UI-side function for creating a dynamic \code{\link{valueBox}} or
+#' \code{\link{infoBox}}.
+#'
+#' @inheritParams valueBox
+#' @param outputId Output variable name.
+#' @seealso \code{\link{renderValueBox}} for the corresponding server-side
+#'   function and examples.
+#' @export
+valueBoxOutput <- function(outputId, width = 4) {
+  shiny::uiOutput(outputId, class = paste0("col-sm-", width))
+}
+
+#' @rdname valueBoxOutput
+#' @export
+infoBoxOutput <- valueBoxOutput
+
+
+#' Create an info or value box output (server side)
+#'
+#' This is the server-side function for creating a dynamic
+#' \code{\link{valueBox}} or \code{\link{infoBox}}.
+#'
+#' @inheritParams shiny::renderUI
+#' @seealso \code{\link{valueBoxOutput}} for the corresponding UI-side function.
+#'
+#' @examples
+#' ## Only run this example in interactive R sessions
+#' if (interactive()) {
+#' library(shiny)
+#'
+#' ui <- dashboardPage(
+#'   dashboardHeader(title = "Dynamic boxes"),
+#'   dashboardSidebar(),
+#'   dashboardBody(
+#'     fluidRow(
+#'       box(width = 2, actionButton("count", "Count")),
+#'       infoBoxOutput("ibox"),
+#'       valueBoxOutput("vbox")
+#'     )
+#'   )
+#' )
+#'
+#' server <- function(input, output) {
+#'   output$ibox <- renderInfoBox({
+#'     infoBox(
+#'       "Title",
+#'       input$count,
+#'       icon = icon("credit-card")
+#'     )
+#'   })
+#'   output$vbox <- renderValueBox({
+#'     valueBox(
+#'       "Title",
+#'       input$count,
+#'       icon = icon("credit-card")
+#'     )
+#'   })
+#' }
+#'
+#' shinyApp(ui, server)
+#' }
+#' @export
+renderValueBox <- function(expr, env = parent.frame(), quoted = FALSE) {
+  # Convert the expression to a function
+  vbox_fun <- shiny::exprToFunction(expr, env, quoted)
+
+  # Wrap that function in another function which strips off the outer div and
+  # send it to renderUI.
+  shiny::renderUI({
+    vbox <- vbox_fun()
+    tagAssert(vbox, type = "div")
+
+    # Strip off outer div, since it's already present in output
+    vbox$children[[1]]
+  })
+}
+
+#' @rdname renderValueBox
+#' @export
+renderInfoBox <- renderValueBox
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1ffcf59
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+Shiny Dashboard
+===============
+
+*Travis:* [![Travis-CI Build Status](https://travis-ci.org/rstudio/shinydashboard.svg?branch=master)](https://travis-ci.org/rstudio/shinydashboard)
+
+*AppVeyor:* [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/rstudio/shinydashboard?branch=master&svg=true)](https://ci.appveyor.com/project/rstudio/shinydashboard)
+
+## Installation
+
+To install from CRAN:
+
+```R
+install.packages("shinydashboard")
+```
+
+See the documentation at http://rstudio.github.io/shinydashboard/
diff --git a/inst/AdminLTE/AdminLTE.css b/inst/AdminLTE/AdminLTE.css
new file mode 100755
index 0000000..66881c3
--- /dev/null
+++ b/inst/AdminLTE/AdminLTE.css
@@ -0,0 +1,5005 @@
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: normal;
+  font-weight: 300;
+  src:
+    local('Source Sans Pro Light'),
+    local('SourceSansPro-Light'),
+    url('fonts/Source_Sans_Pro_300.ttf') format('truetype');
+}
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: normal;
+  font-weight: 400;
+  src:
+    local('Source Sans Pro'),
+    local('SourceSansPro-Regular'),
+    url('fonts/Source_Sans_Pro_400.ttf') format('truetype');
+}
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: normal;
+  font-weight: 600;
+  src:
+    local('Source Sans Pro Semibold'),
+    local('SourceSansPro-Semibold'),
+    url('fonts/Source_Sans_Pro_600.ttf') format('truetype');
+}
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: normal;
+  font-weight: 700;
+  src:
+    local('Source Sans Pro Bold'),
+    local('SourceSansPro-Bold'),
+    url('fonts/Source_Sans_Pro_700.ttf') format('truetype');
+}
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: italic;
+  font-weight: 300;
+  src:
+    local('Source Sans Pro Light Italic'),
+    local('SourceSansPro-LightIt'),
+    url('fonts/Source_Sans_Pro_300italic.ttf') format('truetype');
+}
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: italic;
+  font-weight: 400;
+  src:
+    local('Source Sans Pro Italic'),
+    local('SourceSansPro-It'),
+    url('fonts/Source_Sans_Pro_400italic.ttf') format('truetype');
+}
+ at font-face {
+  font-family: 'Source Sans Pro';
+  font-style: italic;
+  font-weight: 600;
+  src:
+    local('Source Sans Pro Semibold Italic'),
+    local('SourceSansPro-SemiboldIt'),
+    url('fonts/Source_Sans_Pro_600italic.ttf') format('truetype');
+}
+
+/*!
+ *   AdminLTE v2.3.11
+ *   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 {
+  height: 100%;
+}
+.layout-boxed html,
+.layout-boxed body {
+  height: 100%;
+}
+body {
+  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  font-weight: 400;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+/* Layout */
+.wrapper {
+  height: 100%;
+  position: relative;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.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;
+}
+ at media (max-width: 767px) {
+  .content-wrapper,
+  .right-side,
+  .main-footer {
+    margin-left: 0;
+  }
+}
+ at media (min-width: 768px) {
+  .sidebar-collapse .content-wrapper,
+  .sidebar-collapse .right-side,
+  .sidebar-collapse .main-footer {
+    margin-left: 0;
+  }
+}
+ at 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;
+}
+ at 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;
+}
+ at media (max-width: 991px) {
+  .main-header .navbar-custom-menu a,
+  .main-header .navbar-right a {
+    color: inherit;
+    background: transparent;
+  }
+}
+ at 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';
+}
+ at 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;
+}
+ at 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;
+  }
+}
+ at 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;
+  }
+}
+ at 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;
+}
+ at media (max-width: 767px) {
+  .main-sidebar,
+  .left-side {
+    padding-top: 100px;
+  }
+}
+ at 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);
+  }
+}
+ at 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);
+  }
+}
+ at 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 > a > .fa-angle-left {
+  position: absolute;
+  top: 50%;
+  right: 10px;
+  margin-top: -8px;
+}
+.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
+ */
+ at 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 {
+    position: relative!important;
+    float: right;
+    width: auto!important;
+    left: 180px !important;
+    top: -22px !important;
+    z-index: 900;
+  }
+  .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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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);
+  }
+}
+ at -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;
+}
+ at 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;
+}
+ at 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;
+}
+.box-header > .box-tools .dropdown-menu > li > a {
+  color: #444!important;
+}
+.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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at media (max-width: 991px) {
+  .error-page {
+    width: 100%;
+  }
+}
+.error-page > .headline {
+  float: left;
+  font-size: 100px;
+  font-weight: 300;
+}
+ at media (max-width: 991px) {
+  .error-page > .headline {
+    float: none;
+    text-align: center;
+  }
+}
+.error-page > .error-content {
+  margin-left: 190px;
+  display: block;
+}
+ at media (max-width: 991px) {
+  .error-page > .error-content {
+    margin-left: 0;
+  }
+}
+.error-page > .error-content > h3 {
+  font-weight: 300;
+  font-size: 25px;
+}
+ at 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
+ * -----------
+ */
+ at 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/inst/AdminLTE/AdminLTE.min.css b/inst/AdminLTE/AdminLTE.min.css
new file mode 100644
index 0000000..f1056e5
--- /dev/null
+++ b/inst/AdminLTE/AdminLTE.min.css
@@ -0,0 +1,7 @@
+ at font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:300;src:local('Source Sans Pro Light'),local('SourceSansPro-Light'),url(fonts/Source_Sans_Pro_300.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:400;src:local('Source Sans Pro'),local('SourceSansPro-Regular'),url(fonts/Source_Sans_Pro_400.ttf) format('truetype')}@font-face{font-family:'Source Sans Pro';font-style:normal;font-weight:600;src:local('Source Sans Pro Semibold [...]
+ *   AdminLTE v2.3.11
+ *   Author: Almsaeed Studio
+ *	 Website: Almsaeed Studio <http://almsaeedstudio.com>
+ *   License: Open source - MIT
+ *           Please visit http://opensource.org/licenses/MIT for more information
+!*/body,html{height:100%}.layout-boxed body,.layout-boxed html{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:after,.wrapper:before{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,.5);position:relative}.layout-bo [...]
\ No newline at end of file
diff --git a/inst/AdminLTE/_all-skins.css b/inst/AdminLTE/_all-skins.css
new file mode 100755
index 0000000..53577c4
--- /dev/null
+++ b/inst/AdminLTE/_all-skins.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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at 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;
+}
+ at media (min-width: 768px) {
+  .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {
+    border-left: 1px solid #d2d6de;
+  }
+}
diff --git a/inst/AdminLTE/_all-skins.min.css b/inst/AdminLTE/_all-skins.min.css
new file mode 100644
index 0000000..ec31488
--- /dev/null
+++ b/inst/AdminLTE/_all-skins.min.css
@@ -0,0 +1 @@
+.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav>.active>a,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav>li>a:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.sk [...]
\ No newline at end of file
diff --git a/inst/AdminLTE/app.js b/inst/AdminLTE/app.js
new file mode 100644
index 0000000..4df0117
--- /dev/null
+++ b/inst/AdminLTE/app.js
@@ -0,0 +1,793 @@
+//---------------------------------------------------------------------
+// Source file: ../srcjs/AdminLTE/app.js
+
+/*! 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 at almsaeedstudio.com>
+ * @version 2.3.11
+ * @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 Tree views
+  enableControlTreeView: true,
+  //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
+  if (o.enableControlTreeView) {
+    $.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,
+      container: 'body'
+    });
+  }
+
+  //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();
+      $('body, html, .wrapper').css('height', 'auto');
+      $(window, ".wrapper").resize(function () {
+        _this.fix();
+        _this.fixSidebar();
+      });
+    },
+    fix: function () {
+      // Remove overflow from .wrapper if layout-boxed exists
+      $(".layout-boxed > .wrapper").css('overflow', 'hidden');
+      //Get window height and the wrapper height
+      var footer_height = $('.main-footer').outerHeight() || 0;
+      var neg = $('.main-header').outerHeight() + footer_height;
+      var window_height = $(window).height();
+      var sidebar_height = $(".sidebar").height() || 0;
+      //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 - footer_height);
+      } 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");
+
+          // shiny-mod (see README-shiny-mods.md)
+          var shinyOutput = checkElement.find('.shiny-bound-output');
+          if (shinyOutput.length !== 0 && shinyOutput.first().html().length === 0) {
+            shinyOutput.first().html('<br/>');
+          }
+
+          //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");
+          box.trigger("hidden.bs.collapse");
+        });
+      } else {
+        //Convert plus into minus
+        element.children(":first")
+          .removeClass(_this.icons.open)
+          .addClass(_this.icons.collapse);
+
+        // Technically, it should be 'show' which is triggered here, and
+        // 'shown' which is triggered later. However, this works better because
+        // of the slow expansion transition -- the box would fully expand, and
+        // only then trigger 'shown', which then results in an update of the
+        // content. This would allow users to see the old content during the
+        // expansion.
+        box.trigger("shown.bs.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));
+
+//# sourceMappingURL=app.js.map
\ No newline at end of file
diff --git a/inst/AdminLTE/app.js.map b/inst/AdminLTE/app.js.map
new file mode 100644
index 0000000..eecfaa7
--- /dev/null
+++ b/inst/AdminLTE/app.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../srcjs/AdminLTE/app.js"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC;AACA,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnB,CAAC,CAAC,CAAC,gBAAgB;AACnB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;AACtD,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM;AAC3D,CAAC,CAAC [...]
\ No newline at end of file
diff --git a/inst/AdminLTE/app.min.js b/inst/AdminLTE/app.min.js
new file mode 100644
index 0000000..377d604
--- /dev/null
+++ b/inst/AdminLTE/app.min.js
@@ -0,0 +1,2 @@
+function _init(){"use strict";$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$("body, html, .wrapper").css("height","auto"),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){$(".layout-boxed > .wrapper").css("overflow","hidden");var a=$(".main-footer").outerHeight()||0,b=$(".main-header").outerHeight()+a,c=$(window).height(),d=$(".sidebar").height()||0;if($("body").hasClass("fixed"))$(".content-wrapper, .right-side").css("min-height [...]
+//# sourceMappingURL=app.min.js.map
\ No newline at end of file
diff --git a/inst/AdminLTE/app.min.js.map b/inst/AdminLTE/app.min.js.map
new file mode 100644
index 0000000..93c78bb
--- /dev/null
+++ b/inst/AdminLTE/app.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../../srcjs/AdminLTE/app.js"],"names":["_init","$","AdminLTE","layout","activate","_this","this","fix","fixSidebar","css","window","resize","footer_height","outerHeight","neg","window_height","height","sidebar_height","hasClass","postSetWidth","controlSidebar","options","controlSidebarOptions","selector","fn","slimScroll","console","error","sidebarSlimScroll","destroy","color","size","pushMenu","toggleBtn","screenSizes","document","on","e","preventDefault","width [...]
\ No newline at end of file
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_300.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_300.ttf
new file mode 100644
index 0000000..5d8a996
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_300.ttf differ
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_300italic.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_300italic.ttf
new file mode 100644
index 0000000..f28c3c1
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_300italic.ttf differ
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_400.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_400.ttf
new file mode 100644
index 0000000..950ff8b
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_400.ttf differ
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_400italic.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_400italic.ttf
new file mode 100644
index 0000000..0cf2e43
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_400italic.ttf differ
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_600.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_600.ttf
new file mode 100644
index 0000000..c81e192
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_600.ttf differ
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_600italic.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_600italic.ttf
new file mode 100644
index 0000000..dc909fa
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_600italic.ttf differ
diff --git a/inst/AdminLTE/fonts/Source_Sans_Pro_700.ttf b/inst/AdminLTE/fonts/Source_Sans_Pro_700.ttf
new file mode 100644
index 0000000..cfe7065
Binary files /dev/null and b/inst/AdminLTE/fonts/Source_Sans_Pro_700.ttf differ
diff --git a/inst/shinydashboard.css b/inst/shinydashboard.css
new file mode 100644
index 0000000..1bee045
--- /dev/null
+++ b/inst/shinydashboard.css
@@ -0,0 +1,70 @@
+/* A replacement for .small-box .icon, where the icon is smaller and doesn't
+   change size when moused over. */
+.small-box .icon-large {
+  position: absolute;
+  top: auto;
+  bottom: 5px;
+  right: 5px;
+  font-size: 70px;
+  color: rgba(0, 0, 0, 0.15);
+}
+
+/* So that selectize dropdowns are visible if they go off the bottom. */
+.content {
+  overflow: visible;
+}
+
+.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > .glyphicon,
+.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > .fa,
+.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > .ion {
+  float: left;
+  font-size: 30px;
+  width: 50px;
+  text-align: center;
+  margin-right: 5px;
+  color: #000;
+}
+
+/* Sidebar user panel needs a minimum height when there's no image. */
+section.sidebar .user-panel {
+  min-height: 65px;
+}
+
+/* Inputs in the sidebar */
+section.sidebar .shiny-input-container {
+  /* Proper spacing around inputs. */
+  padding: 12px 15px 0px 15px;
+  /* Wrap content (important for inline inputs). */
+  white-space: normal;
+}
+
+/* Make action buttons/links look good on the sidebar panel */
+section.sidebar .shiny-bound-input.action-button,
+section.sidebar .shiny-bound-input.action-link {
+  margin: 6px 5px 6px 15px;
+  display: block;
+}
+
+/* Shiny inputs in boxes should span full width. */
+div.box-body .shiny-input-container {
+  width: auto;
+}
+
+/* Sidebar is dark, so make text light by default. */
+.sidebar {
+  color: #fff;
+}
+/* Slider min and max in sidebar. */
+.sidebar .irs-min, .sidebar .irs-max {
+  color: #aaa;
+}
+
+/* Don't highlight text when info box is in <a> tag */
+a > .info-box {
+  color: #333;
+}
+
+/*  Shiny Server Pro logout panel needs to be raised above menu bar */
+.shiny-server-account {
+  z-index: 2000;
+}
diff --git a/inst/shinydashboard.js b/inst/shinydashboard.js
new file mode 100644
index 0000000..27bd8ab
--- /dev/null
+++ b/inst/shinydashboard.js
@@ -0,0 +1,322 @@
+//---------------------------------------------------------------------
+// Source file: ../srcjs/_start.js
+
+$(function() {
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/tabs.js
+
+// This function handles a special case in the AdminLTE sidebar: when there
+// is a sidebar-menu with items, and one of those items has sub-items, and
+// they are used for tab navigation. Normally, if one of the items is
+// selected and then a sub-item is clicked, both the item and sub-item will
+// retain the "active" class, so they will both be highlighted. This happens
+// because they're not designed to be used together for tab panels. This
+// code ensures that only one item will have the "active" class.
+var deactivateOtherTabs = function() {
+  // Find all tab links under sidebar-menu even if they don't have a
+  // tabName (which is why the second selector is necessary)
+  var $tablinks = $(".sidebar-menu a[data-toggle='tab']," +
+    ".sidebar-menu li.treeview > a");
+
+  // If any other items are active, deactivate them
+  $tablinks.not($(this)).parent("li").removeClass("active");
+
+  // Trigger event for the tabItemInputBinding
+  var $obj = $('.sidebarMenuSelectedTabItem');
+  var inputBinding = $obj.data('shiny-input-binding');
+  if (typeof inputBinding !== 'undefined') {
+    inputBinding.setValue($obj, $(this).attr('data-value'));
+    $obj.trigger('change');
+  }
+};
+
+$(document).on('shown.bs.tab', '.sidebar-menu a[data-toggle="tab"]',
+               deactivateOtherTabs);
+
+// When document is ready, if there is a sidebar menu with no activated tabs,
+// activate the one specified by `data-start-selected`, or if that's not
+// present, the first one.
+var ensureActivatedTab = function() {
+  var $tablinks = $(".sidebar-menu a[data-toggle='tab']");
+
+  // If there's a `data-start-selected` attribute and we can find a tab with
+  // that name, activate it.
+  var $startTab = $tablinks.filter("[data-start-selected='1']");
+  if ($startTab.length === 0) {
+    // If no tab starts selected, use the first one, if present
+    $startTab = $tablinks.first();
+  }
+
+  // If there are no tabs, $startTab.length will be 0.
+  if ($startTab.length !== 0) {
+    $startTab.tab("show");
+
+    // This is indirectly setting the value of the Shiny input by setting
+    // an attribute on the html element it is bound to. We cannot use the
+    // inputBinding's setValue() method here because this is called too
+    // early (before Shiny has fully initialized)
+    $(".sidebarMenuSelectedTabItem").attr("data-value",
+      $startTab.attr("data-value"));
+  }
+};
+
+ensureActivatedTab();
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/sidebar.js
+
+// Optionally disable sidebar (set through the `disable` argument
+// to the `dashboardSidebar` function)
+if ($("section.sidebar").data("disable")) {
+  $("body").addClass("sidebar-collapse");
+  $(".navbar > .sidebar-toggle").hide();
+}
+
+// Get the correct value for `input$sidebarCollapsed`, depending on
+// whether or not the left offset on the sidebar is negative (hidden
+// - so `input$sidebarCollapsed` should be TRUE) or 0 (shown - so
+// `input$sidebarCollapsed` should be FALSE). That we know of,
+// `$(".main-sidebar").is(":visible")` is always true, so there is
+// no need to check for that.
+var sidebarCollapsedValue = function() {
+  if ($(".main-sidebar").offset().left < 0) return(true);
+  else return(false);
+};
+
+// Whenever the sidebar changes from collapsed to expanded and vice versa,
+// call this function, so that we can trigger the resize event on the rest
+// of the window and also update the value for the sidebar's input binding.
+var sidebarChange = function() {
+  // 1) Trigger the resize event (so images are responsive and resize)
+  $(window).trigger("resize");
+
+  // 2) Update the value for the sidebar's input binding
+  var $obj = $('.main-sidebar.shiny-bound-input');
+  var inputBinding = $obj.data('shiny-input-binding');
+  inputBinding.setValue($obj, sidebarCollapsedValue());
+  $obj.trigger('change');
+};
+
+// Whenever the sidebar finishes a transition (which it does every time it
+// changes from collapsed to expanded and vice versa), call sidebarChange()
+$(".main-sidebar").on(
+  'webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend',
+    sidebarChange);
+
+// This fixes an edge case: when the app starts up with the sidebar already
+// collapsed (either because the screen is small or because
+// `dashboardSidebar(disable = TRUE`), make sure that `input$sidebarCollapsed`
+// is set to `FALSE`. Whenever this is the case, `$(".main-sidebar").offset().left`
+// is negative. That we know of, `$(".main-sidebar").is(":visible")` is always
+// true, so there is no need to check for that.
+if ($(".main-sidebar").offset().left < 0) {
+  // This is indirectly setting the value of the Shiny input by setting
+  // an attribute on the html element it is bound to. We cannot use the
+  // inputBinding's setValue() method here because this is called too
+  // early (before Shiny has fully initialized)
+  $(".main-sidebar").attr("data-collapsed", "true");
+}
+
+// Whenever we expand a menuItem (to be expandable, it must have children),
+// update the value for the expandedItem's input binding (this is the
+// tabName of the fist subMenuItem inside the menuItem that is currently
+// expanded)
+$(document).on("click", ".treeview > a", function() {
+  var $menu = $(this).next();
+  // If this menuItem was already open, then clicking on it again,
+  // should trigger the "hidden" event, so Shiny doesn't worry about
+  // it while it's hidden (and vice versa).
+  if ($menu.hasClass("menu-open")) $menu.trigger("hidden");
+  else if ($menu.hasClass("treeview-menu")) $menu.trigger("shown");
+
+  // need to set timeout to account for the slideUp/slideDown animation
+  var $obj = $('section.sidebar.shiny-bound-input');
+  setTimeout(function() { $obj.trigger('change'); }, 600);
+});
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/output_binding_menu.js
+
+/* global Shiny */
+
+// menuOutputBinding
+// ------------------------------------------------------------------
+// Based on Shiny.htmlOutputBinding, but instead of putting the result in a
+// wrapper div, it replaces the origin DOM element with the new DOM elements,
+// copying over the ID and class.
+var menuOutputBinding = new Shiny.OutputBinding();
+$.extend(menuOutputBinding, {
+  find: function(scope) {
+    return $(scope).find('.shinydashboard-menu-output');
+  },
+  onValueError: function(el, err) {
+    Shiny.unbindAll(el);
+    this.renderError(el, err);
+  },
+  renderValue: function(el, data) {
+    Shiny.unbindAll(el);
+
+    var html;
+    var dependencies = [];
+    if (data === null) {
+      return;
+    } else if (typeof(data) === 'string') {
+      html = data;
+    } else if (typeof(data) === 'object') {
+      html = data.html;
+      dependencies = data.deps;
+    }
+
+    var $html = $($.parseHTML(html));
+
+    // Convert the inner contents to HTML, and pass to renderHtml
+    Shiny.renderHtml($html.html(), el, dependencies);
+
+    // Extract class of wrapper, and add them to the wrapper element
+    el.className = 'shinydashboard-menu-output shiny-bound-output ' +
+                   $html.attr('class');
+
+    Shiny.initializeInputs(el);
+    Shiny.bindAll(el);
+    ensureActivatedTab(); // eslint-disable-line
+  }
+});
+Shiny.outputBindings.register(menuOutputBinding,
+                              "shinydashboard.menuOutputBinding");
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/input_binding_tabItem.js
+
+/* global Shiny */
+
+// tabItemInputBinding
+// ------------------------------------------------------------------
+// Based on Shiny.tabItemInputBinding, but customized for tabItems in
+// shinydashboard, which have a slightly different structure.
+var tabItemInputBinding = new Shiny.InputBinding();
+$.extend(tabItemInputBinding, {
+  find: function(scope) {
+    return $(scope).find('.sidebarMenuSelectedTabItem');
+  },
+  getValue: function(el) {
+    var value = $(el).attr('data-value');
+    if (value === "null") return null;
+    return value;
+  },
+  setValue: function(el, value) {
+    var self = this;
+    var anchors = $(el).parent('ul.sidebar-menu').find('li:not(.treeview)').children('a');
+    anchors.each(function() { // eslint-disable-line consistent-return
+      if (self._getTabName($(this)) === value) {
+        $(this).tab('show');
+        $(el).attr('data-value', self._getTabName($(this)));
+        return false;
+      }
+    });
+  },
+  receiveMessage: function(el, data) {
+    if (data.hasOwnProperty('value'))
+      this.setValue(el, data.value);
+  },
+  subscribe: function(el, callback) {
+    // This event is triggered by deactivateOtherTabs, which is triggered by
+    // shown. The deactivation of other tabs must occur before Shiny gets the
+    // input value.
+    $(el).on('change.tabItemInputBinding', function() {
+      callback();
+    });
+  },
+  unsubscribe: function(el) {
+    $(el).off('.tabItemInputBinding');
+  },
+  _getTabName: function(anchor) {
+    return anchor.attr('data-value');
+  }
+});
+
+Shiny.inputBindings.register(tabItemInputBinding, 'shinydashboard.tabItemInput');
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/input_binding_sidebarCollapsed.js
+
+/* global Shiny */
+
+// sidebarCollapsedInputBinding
+// ------------------------------------------------------------------
+// This keeps tracks of whether the sidebar is expanded (default)
+// or collapsed
+var sidebarCollapsedInputBinding = new Shiny.InputBinding();
+$.extend(sidebarCollapsedInputBinding, {
+  find: function(scope) {
+    return $(scope).find('.main-sidebar').first();
+  },
+  getId: function(el) {
+    return "sidebarCollapsed";
+  },
+  getValue: function(el) {
+    return $(el).attr("data-collapsed") === "true";
+  },
+  setValue: function(el, value) {
+    $(el).attr("data-collapsed", value);
+  },
+  toggleValue: function(el) {
+    var current = this.getValue(el);
+    var newVal = current ? "false" : "true";
+    this.setValue(el, newVal);
+  },
+  receiveMessage: function(el, data) {
+    if (data.hasOwnProperty('value'))
+      this.setValue(el, data.value);
+  },
+  subscribe: function(el, callback) {
+    $(el).on('change.sidebarCollapsedInputBinding', function() {
+      callback();
+    });
+  },
+  unsubscribe: function(el) {
+    $(el).off('.sidebarCollapsedInputBinding');
+  }
+});
+Shiny.inputBindings.register(sidebarCollapsedInputBinding,
+  'shinydashboard.sidebarCollapsedInputBinding');
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/input_binding_sidebarmenuExpanded.js
+
+/* global Shiny */
+
+// sidebarmenuExpandedInputBinding
+// ------------------------------------------------------------------
+// This keeps tracks of what menuItem (if any) is expanded
+var sidebarmenuExpandedInputBinding = new Shiny.InputBinding();
+$.extend(sidebarmenuExpandedInputBinding, {
+  find: function(scope) {
+    return $(scope).find('section.sidebar');
+  },
+  getId: function(el) {
+    return "sidebarItemExpanded";
+  },
+  getValue: function(el) {
+    var $open = $(el).find('li ul.menu-open');
+    if ($open.length === 1) return $open.attr('data-expanded');
+    else return null;
+  },
+  subscribe: function(el, callback) {
+    $(el).on('change.sidebarmenuExpandedInputBinding', function() {
+      callback();
+    });
+  },
+  unsubscribe: function(el) {
+    $(el).off('.sidebarmenuExpandedInputBinding');
+  }
+});
+Shiny.inputBindings.register(sidebarmenuExpandedInputBinding,
+  'shinydashboard.sidebarmenuExpandedInputBinding');
+
+//---------------------------------------------------------------------
+// Source file: ../srcjs/_end.js
+
+});
+
+//# sourceMappingURL=shinydashboard.js.map
\ No newline at end of file
diff --git a/inst/shinydashboard.js.map b/inst/shinydashboard.js.map
new file mode 100644
index 0000000..f736e67
--- /dev/null
+++ b/inst/shinydashboard.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../srcjs/_start.js","../srcjs/tabs.js","../srcjs/sidebar.js","../srcjs/output_binding_menu.js","../srcjs/input_binding_tabItem.js","../srcjs/input_binding_sidebarCollapsed.js","../srcjs/input_binding_sidebarmenuExpanded.js","../srcjs/_end.js"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE;AAClC;AACA,EAAE,QAAQ,EAAE,CAAC,CAAC;;ACHd,uEAAuE;AACvE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EA [...]
\ No newline at end of file
diff --git a/inst/shinydashboard.min.js b/inst/shinydashboard.min.js
new file mode 100644
index 0000000..954d32e
--- /dev/null
+++ b/inst/shinydashboard.min.js
@@ -0,0 +1,4 @@
+/*! shinydashboard 0.6.1 | (c) 2017-2017 RStudio, Inc. | License: GPL-2 | file LICENSE */
+
+$(function(){var a=function(){var a=$(".sidebar-menu a[data-toggle='tab'],.sidebar-menu li.treeview > a");a.not($(this)).parent("li").removeClass("active");var b=$(".sidebarMenuSelectedTabItem"),c=b.data("shiny-input-binding");"undefined"!=typeof c&&(c.setValue(b,$(this).attr("data-value")),b.trigger("change"))};$(document).on("shown.bs.tab",'.sidebar-menu a[data-toggle="tab"]',a);var b=function(){var a=$(".sidebar-menu a[data-toggle='tab']"),b=a.filter("[data-start-selected='1']");0===b [...]
+//# sourceMappingURL=shinydashboard.min.js.map
\ No newline at end of file
diff --git a/inst/shinydashboard.min.js.map b/inst/shinydashboard.min.js.map
new file mode 100644
index 0000000..9850159
--- /dev/null
+++ b/inst/shinydashboard.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../srcjs/_start.js","../srcjs/tabs.js","../srcjs/sidebar.js","../srcjs/output_binding_menu.js","../srcjs/input_binding_tabItem.js","../srcjs/input_binding_sidebarCollapsed.js","../srcjs/input_binding_sidebarmenuExpanded.js"],"names":["$","deactivateOtherTabs","$tablinks","not","this","parent","removeClass","$obj","inputBinding","data","setValue","attr","trigger","document","on","ensureActivatedTab","$startTab","filter","length","first","tab","addClass","hide","si [...]
\ No newline at end of file
diff --git a/man/box.Rd b/man/box.Rd
new file mode 100644
index 0000000..d1a0b9f
--- /dev/null
+++ b/man/box.Rd
@@ -0,0 +1,173 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/boxes.R
+\name{box}
+\alias{box}
+\title{Create a box for the main body of a dashboard}
+\usage{
+box(..., title = NULL, footer = NULL, status = NULL,
+  solidHeader = FALSE, background = NULL, width = 6, height = NULL,
+  collapsible = FALSE, collapsed = FALSE)
+}
+\arguments{
+\item{...}{Contents of the box.}
+
+\item{title}{Optional title.}
+
+\item{footer}{Optional footer text.}
+
+\item{status}{The status of the item This determines the item's background
+color. Valid statuses are listed in \link{validStatuses}.}
+
+\item{solidHeader}{Should the header be shown with a solid color background?}
+
+\item{background}{If NULL (the default), the background of the box will be
+white. Otherwise, a color string. Valid colors are listed in
+\link{validColors}.}
+
+\item{width}{The width of the box, using the Bootstrap grid system. This is
+used for row-based layouts. The overall width of a region is 12, so the
+default valueBox width of 4 occupies 1/3 of that width. For column-based
+layouts, use \code{NULL} for the width; the width is set by the column that
+contains the box.}
+
+\item{height}{The height of a box, in pixels or other CSS unit. By default
+the height scales automatically with the content.}
+
+\item{collapsible}{If TRUE, display a button in the upper right that allows
+the user to collapse the box.}
+
+\item{collapsed}{If TRUE, start collapsed. This must be used with
+\code{collapsible=TRUE}.}
+}
+\description{
+Boxes can be used to hold content in the main body of a dashboard.
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+library(shiny)
+
+# A dashboard body with a row of infoBoxes and valueBoxes, and two rows of boxes
+body <- dashboardBody(
+
+  # infoBoxes
+  fluidRow(
+    infoBox(
+      "Orders", uiOutput("orderNum2"), "Subtitle", icon = icon("credit-card")
+    ),
+    infoBox(
+      "Approval Rating", "60\%", icon = icon("line-chart"), color = "green",
+      fill = TRUE
+    ),
+    infoBox(
+      "Progress", uiOutput("progress2"), icon = icon("users"), color = "purple"
+    )
+  ),
+
+  # valueBoxes
+  fluidRow(
+    valueBox(
+      uiOutput("orderNum"), "New Orders", icon = icon("credit-card"),
+      href = "http://google.com"
+    ),
+    valueBox(
+      tagList("60", tags$sup(style="font-size: 20px", "\%")),
+       "Approval Rating", icon = icon("line-chart"), color = "green"
+    ),
+    valueBox(
+      htmlOutput("progress"), "Progress", icon = icon("users"), color = "purple"
+    )
+  ),
+
+  # Boxes
+  fluidRow(
+    box(status = "primary",
+      sliderInput("orders", "Orders", min = 1, max = 2000, value = 650),
+      selectInput("progress", "Progress",
+        choices = c("0\%" = 0, "20\%" = 20, "40\%" = 40, "60\%" = 60, "80\%" = 80,
+                    "100\%" = 100)
+      )
+    ),
+    box(title = "Histogram box title",
+      status = "warning", solidHeader = TRUE, collapsible = TRUE,
+      plotOutput("plot", height = 250)
+    )
+  ),
+
+  # Boxes with solid color, using `background`
+  fluidRow(
+    # Box with textOutput
+    box(
+      title = "Status summary",
+      background = "green",
+      width = 4,
+      textOutput("status")
+    ),
+
+    # Box with HTML output, when finer control over appearance is needed
+    box(
+      title = "Status summary 2",
+      width = 4,
+      background = "red",
+      uiOutput("status2")
+    ),
+
+    box(
+      width = 4,
+      background = "light-blue",
+      p("This is content. The background color is set to light-blue")
+    )
+  )
+)
+
+server <- function(input, output) {
+  output$orderNum <- renderText({
+    prettyNum(input$orders, big.mark=",")
+  })
+
+  output$orderNum2 <- renderText({
+    prettyNum(input$orders, big.mark=",")
+  })
+
+  output$progress <- renderUI({
+    tagList(input$progress, tags$sup(style="font-size: 20px", "\%"))
+  })
+
+  output$progress2 <- renderUI({
+    paste0(input$progress, "\%")
+  })
+
+  output$status <- renderText({
+    paste0("There are ", input$orders,
+      " orders, and so the current progress is ", input$progress, "\%.")
+  })
+
+  output$status2 <- renderUI({
+    iconName <- switch(input$progress,
+      "100" = "ok",
+      "0" = "remove",
+      "road"
+    )
+    p("Current status is: ", icon(iconName, lib = "glyphicon"))
+  })
+
+
+  output$plot <- renderPlot({
+    hist(rnorm(input$orders))
+  })
+}
+
+shinyApp(
+  ui = dashboardPage(
+    dashboardHeader(),
+    dashboardSidebar(),
+    body
+  ),
+  server = server
+)
+}
+}
+\seealso{
+Other boxes: \code{\link{infoBox}}, \code{\link{tabBox}},
+  \code{\link{valueBox}}
+}
diff --git a/man/dashboardBody.Rd b/man/dashboardBody.Rd
new file mode 100644
index 0000000..532e646
--- /dev/null
+++ b/man/dashboardBody.Rd
@@ -0,0 +1,18 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardBody.R
+\name{dashboardBody}
+\alias{dashboardBody}
+\title{The main body of a dashboard page.}
+\usage{
+dashboardBody(...)
+}
+\arguments{
+\item{...}{Items to put in the dashboard body.}
+}
+\description{
+The main body typically contains \code{\link{box}}es. Another common use
+pattern is for the main body to contain \code{\link{tabItems}}.
+}
+\seealso{
+\code{\link{tabItems}}, \code{\link{box}}, \code{\link{valueBox}}.
+}
diff --git a/man/dashboardHeader.Rd b/man/dashboardHeader.Rd
new file mode 100644
index 0000000..c31a01c
--- /dev/null
+++ b/man/dashboardHeader.Rd
@@ -0,0 +1,102 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardHeader.R
+\name{dashboardHeader}
+\alias{dashboardHeader}
+\title{Create a header for a dashboard page}
+\usage{
+dashboardHeader(..., title = NULL, titleWidth = NULL, disable = FALSE,
+  .list = NULL)
+}
+\arguments{
+\item{...}{Items to put in the header. Should be \code{\link{dropdownMenu}}s.}
+
+\item{title}{An optional title to show in the header bar.. By default, this
+will also be used as the title shown in the browser's title bar. If you
+want that to be different from the text in the dashboard header bar, set
+the \code{title} in \code{\link{dashboardPage}}.}
+
+\item{titleWidth}{The width of the title area. This must either be a number
+which specifies the width in pixels, or a string that specifies the width
+in CSS units.}
+
+\item{disable}{If \code{TRUE}, don't display the header bar.}
+
+\item{.list}{An optional list containing items to put in the header. Same as
+the \code{...} arguments, but in list format. This can be useful when
+working with programmatically generated items.}
+}
+\description{
+A dashboard header can be left blank, or it can include dropdown menu items
+on the right side.
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+library(shiny)
+
+# A dashboard header with 3 dropdown menus
+header <- dashboardHeader(
+  title = "Dashboard Demo",
+
+  # Dropdown menu for messages
+  dropdownMenu(type = "messages", badgeStatus = "success",
+    messageItem("Support Team",
+      "This is the content of a message.",
+      time = "5 mins"
+    ),
+    messageItem("Support Team",
+      "This is the content of another message.",
+      time = "2 hours"
+    ),
+    messageItem("New User",
+      "Can I get some help?",
+      time = "Today"
+    )
+  ),
+
+  # Dropdown menu for notifications
+  dropdownMenu(type = "notifications", badgeStatus = "warning",
+    notificationItem(icon = icon("users"), status = "info",
+      "5 new members joined today"
+    ),
+    notificationItem(icon = icon("warning"), status = "danger",
+      "Resource usage near limit."
+    ),
+    notificationItem(icon = icon("shopping-cart", lib = "glyphicon"),
+      status = "success", "25 sales made"
+    ),
+    notificationItem(icon = icon("user", lib = "glyphicon"),
+      status = "danger", "You changed your username"
+    )
+  ),
+
+  # Dropdown menu for tasks, with progress bar
+  dropdownMenu(type = "tasks", badgeStatus = "danger",
+    taskItem(value = 20, color = "aqua",
+      "Refactor code"
+    ),
+    taskItem(value = 40, color = "green",
+      "Design new layout"
+    ),
+    taskItem(value = 60, color = "yellow",
+      "Another task"
+    ),
+    taskItem(value = 80, color = "red",
+      "Write documentation"
+    )
+  )
+)
+
+shinyApp(
+  ui = dashboardPage(
+    header,
+    dashboardSidebar(),
+    dashboardBody()
+  ),
+  server = function(input, output) { }
+)
+}
+}
+\seealso{
+\code{\link{dropdownMenu}}
+}
diff --git a/man/dashboardPage.Rd b/man/dashboardPage.Rd
new file mode 100644
index 0000000..2e29f3e
--- /dev/null
+++ b/man/dashboardPage.Rd
@@ -0,0 +1,45 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardPage.R
+\name{dashboardPage}
+\alias{dashboardPage}
+\title{Dashboard page}
+\usage{
+dashboardPage(header, sidebar, body, title = NULL, skin = c("blue", "black",
+  "purple", "green", "red", "yellow"))
+}
+\arguments{
+\item{header}{A header created by \code{dashboardHeader}.}
+
+\item{sidebar}{A sidebar created by \code{dashboardSidebar}.}
+
+\item{body}{A body created by \code{dashboardBody}.}
+
+\item{title}{A title to display in the browser's title bar. If no value is
+provided, it will try to extract the title from the \code{dashboardHeader}.}
+
+\item{skin}{A color theme. One of \code{"blue"}, \code{"black"},
+\code{"purple"}, \code{"green"}, \code{"red"}, or \code{"yellow"}.}
+}
+\description{
+This creates a dashboard page for use in a Shiny app.
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+# Basic dashboard page template
+library(shiny)
+shinyApp(
+  ui = dashboardPage(
+    dashboardHeader(),
+    dashboardSidebar(),
+    dashboardBody(),
+    title = "Dashboard example"
+  ),
+  server = function(input, output) { }
+)
+}
+}
+\seealso{
+\code{\link{dashboardHeader}}, \code{\link{dashboardSidebar}},
+  \code{\link{dashboardBody}}.
+}
diff --git a/man/dashboardSidebar.Rd b/man/dashboardSidebar.Rd
new file mode 100644
index 0000000..20aa54e
--- /dev/null
+++ b/man/dashboardSidebar.Rd
@@ -0,0 +1,74 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardSidebar.R
+\name{dashboardSidebar}
+\alias{dashboardSidebar}
+\title{Create a dashboard sidebar.}
+\usage{
+dashboardSidebar(..., disable = FALSE, width = NULL, collapsed = FALSE)
+}
+\arguments{
+\item{...}{Items to put in the sidebar.}
+
+\item{disable}{If \code{TRUE}, the sidebar will be disabled.}
+
+\item{width}{The width of the sidebar. This must either be a number which
+specifies the width in pixels, or a string that specifies the width in CSS
+units.}
+
+\item{collapsed}{If \code{TRUE}, the sidebar will be collapsed on app startup.}
+}
+\description{
+A dashboard sidebar typically contains a \code{\link{sidebarMenu}}, although
+it may also contain a \code{\link{sidebarSearchForm}}, or other Shiny inputs.
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+header <- dashboardHeader()
+
+sidebar <- dashboardSidebar(
+  sidebarUserPanel("User Name",
+    subtitle = a(href = "#", icon("circle", class = "text-success"), "Online"),
+    # Image file should be in www/ subdir
+    image = "userimage.png"
+  ),
+  sidebarSearchForm(label = "Enter a number", "searchText", "searchButton"),
+  sidebarMenu(
+    # Setting id makes input$tabs give the tabName of currently-selected tab
+    id = "tabs",
+    menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
+    menuItem("Widgets", icon = icon("th"), tabName = "widgets", badgeLabel = "new",
+             badgeColor = "green"),
+    menuItem("Charts", icon = icon("bar-chart-o"),
+      menuSubItem("Sub-item 1", tabName = "subitem1"),
+      menuSubItem("Sub-item 2", tabName = "subitem2")
+    )
+  )
+)
+
+body <- dashboardBody(
+  tabItems(
+    tabItem("dashboard",
+      div(p("Dashboard tab content"))
+    ),
+    tabItem("widgets",
+      "Widgets tab content"
+    ),
+    tabItem("subitem1",
+      "Sub-item 1 tab content"
+    ),
+    tabItem("subitem2",
+      "Sub-item 2 tab content"
+    )
+  )
+)
+
+shinyApp(
+  ui = dashboardPage(header, sidebar, body),
+  server = function(input, output) { }
+)
+}
+}
+\seealso{
+\code{\link{sidebarMenu}}
+}
diff --git a/man/dropdownMenu.Rd b/man/dropdownMenu.Rd
new file mode 100644
index 0000000..2307cd0
--- /dev/null
+++ b/man/dropdownMenu.Rd
@@ -0,0 +1,44 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardHeader.R
+\name{dropdownMenu}
+\alias{dropdownMenu}
+\title{Create a dropdown menu to place in a dashboard header}
+\usage{
+dropdownMenu(..., type = c("messages", "notifications", "tasks"),
+  badgeStatus = "primary", icon = NULL, headerText = NULL, .list = NULL)
+}
+\arguments{
+\item{...}{Items to put in the menu. Typically, message menus should contain
+\code{\link{messageItem}}s, notification menus should contain
+\code{\link{notificationItem}}s, and task menus should contain
+\code{\link{taskItem}}s.}
+
+\item{type}{The type of menu. Should be one of "messages", "notifications",
+"tasks".}
+
+\item{badgeStatus}{The status of the badge which displays the number of items
+in the menu. This determines the badge's color. Valid statuses are listed
+in \link{validStatuses}. A value of \code{NULL} means to not display a
+badge.}
+
+\item{icon}{An icon to display in the header. By default, the icon is
+automatically selected depending on \code{type}, but it can be overriden
+with this argument.}
+
+\item{headerText}{An optional text argument used for the header of the
+dropdown menu (this is only visible when the menu is expanded). If none is
+provided by the user, the default is "You have \code{x} messages," where
+\code{x} is the number of items in the menu (if the \code{type} is
+specified to be "notifications" or "tasks," the default text shows "You
+have \code{x} notifications" or  "You have \code{x} tasks," respectively).}
+
+\item{.list}{An optional list containing items to put in the menu Same as the
+\code{...} arguments, but in list format. This can be useful when working
+with programmatically generated items.}
+}
+\description{
+Create a dropdown menu to place in a dashboard header
+}
+\seealso{
+\code{\link{dashboardHeader}} for example usage.
+}
diff --git a/man/dropdownMenuOutput.Rd b/man/dropdownMenuOutput.Rd
new file mode 100644
index 0000000..a8cf541
--- /dev/null
+++ b/man/dropdownMenuOutput.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/menuOutput.R
+\name{dropdownMenuOutput}
+\alias{dropdownMenuOutput}
+\title{Create a dropdown menu output (client side)}
+\usage{
+dropdownMenuOutput(outputId)
+}
+\arguments{
+\item{outputId}{Output variable name.}
+}
+\description{
+This is the UI-side function for creating a dynamic dropdown menu.
+}
+\seealso{
+\code{\link{renderMenu}} for the corresponding server-side function
+  and examples, and \code{\link{dropdownMenu}} for the corresponding function
+  for generating static menus.
+
+Other menu outputs: \code{\link{menuItemOutput}},
+  \code{\link{menuOutput}}, \code{\link{renderMenu}},
+  \code{\link{sidebarMenuOutput}}
+}
diff --git a/man/infoBox.Rd b/man/infoBox.Rd
new file mode 100644
index 0000000..eb9aaf3
--- /dev/null
+++ b/man/infoBox.Rd
@@ -0,0 +1,47 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/boxes.R
+\name{infoBox}
+\alias{infoBox}
+\title{Create an info box for the main body of a dashboard.}
+\usage{
+infoBox(title, value = NULL, subtitle = NULL,
+  icon = shiny::icon("bar-chart"), color = "aqua", width = 4,
+  href = NULL, fill = FALSE)
+}
+\arguments{
+\item{title}{Title text.}
+
+\item{value}{The value to display in the box. Usually a number or short text.}
+
+\item{subtitle}{Subtitle text (optional).}
+
+\item{icon}{An icon tag, created by \code{\link[shiny]{icon}}.}
+
+\item{color}{A color for the box. Valid colors are listed in
+\link{validColors}.}
+
+\item{width}{The width of the box, using the Bootstrap grid system. This is
+used for row-based layouts. The overall width of a region is 12, so the
+default valueBox width of 4 occupies 1/3 of that width. For column-based
+layouts, use \code{NULL} for the width; the width is set by the column that
+contains the box.}
+
+\item{href}{An optional URL to link to.}
+
+\item{fill}{If \code{FALSE} (the default), use a white background for the
+content, and the \code{color} argument for the background of the icon. If
+\code{TRUE}, use the \code{color} argument for the background of the
+content; the icon will use the same color with a slightly darkened
+background.}
+}
+\description{
+An info box displays a large icon on the left side, and a title, value
+(usually a number), and an optional smaller subtitle on the right side. Info
+boxes are meant to be placed in the main body of a dashboard.
+}
+\seealso{
+\code{\link{box}} for usage examples.
+
+Other boxes: \code{\link{box}}, \code{\link{tabBox}},
+  \code{\link{valueBox}}
+}
diff --git a/man/menuItemOutput.Rd b/man/menuItemOutput.Rd
new file mode 100644
index 0000000..cd981ca
--- /dev/null
+++ b/man/menuItemOutput.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/menuOutput.R
+\name{menuItemOutput}
+\alias{menuItemOutput}
+\title{Create a sidebar menu item output (client side)}
+\usage{
+menuItemOutput(outputId)
+}
+\arguments{
+\item{outputId}{Output variable name.}
+}
+\description{
+This is the UI-side function for creating a dynamic sidebar menu item.
+}
+\seealso{
+\code{\link{renderMenu}} for the corresponding server-side function
+  and examples, and \code{\link{menuItem}} for the corresponding function
+  for generating static sidebar menus.
+
+Other menu outputs: \code{\link{dropdownMenuOutput}},
+  \code{\link{menuOutput}}, \code{\link{renderMenu}},
+  \code{\link{sidebarMenuOutput}}
+}
diff --git a/man/menuOutput.Rd b/man/menuOutput.Rd
new file mode 100644
index 0000000..4868a60
--- /dev/null
+++ b/man/menuOutput.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/menuOutput.R
+\name{menuOutput}
+\alias{menuOutput}
+\title{Create a dynamic menu output for shinydashboard (client side)}
+\usage{
+menuOutput(outputId, tag = tags$li)
+}
+\arguments{
+\item{outputId}{Output variable name.}
+
+\item{tag}{A tag function, like \code{tags$li} or \code{tags$ul}.}
+}
+\description{
+This can be used as a placeholder for dynamically-generated
+\code{\link{dropdownMenu}}, \code{\link{notificationItem}},
+\code{\link{messageItem}}, \code{\link{taskItem}} \code{\link{sidebarMenu}},
+or \code{\link{menuItem}}. If called directly, you must make sure to supply
+the correct type of tag. It is simpler to use the wrapper functions if
+present; for example, \code{\link{dropdownMenuOutput}} and
+\code{\link{sidebarMenuOutput}}.
+}
+\seealso{
+\code{\link{renderMenu}} for the corresponding server side function
+  and examples.
+
+Other menu outputs: \code{\link{dropdownMenuOutput}},
+  \code{\link{menuItemOutput}}, \code{\link{renderMenu}},
+  \code{\link{sidebarMenuOutput}}
+}
diff --git a/man/messageItem.Rd b/man/messageItem.Rd
new file mode 100644
index 0000000..0a54071
--- /dev/null
+++ b/man/messageItem.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardHeader.R
+\name{messageItem}
+\alias{messageItem}
+\title{Create a message item to place in a dropdown message menu}
+\usage{
+messageItem(from, message, icon = shiny::icon("user"), time = NULL,
+  href = NULL)
+}
+\arguments{
+\item{from}{Who the message is from.}
+
+\item{message}{Text of the message.}
+
+\item{icon}{An icon tag, created by \code{\link[shiny]{icon}}.}
+
+\item{time}{String representing the time the message was sent. Any string may
+be used. For example, it could be a relative date/time like "5 minutes",
+"today", or "12:30pm yesterday", or an absolute time, like "2014-12-01 13:45".
+If NULL, no time will be displayed.}
+
+\item{href}{An optional URL to link to.}
+}
+\description{
+Create a message item to place in a dropdown message menu
+}
+\seealso{
+\code{\link{dashboardHeader}} for example usage.
+
+Other menu items: \code{\link{notificationItem}},
+  \code{\link{taskItem}}
+}
diff --git a/man/notificationItem.Rd b/man/notificationItem.Rd
new file mode 100644
index 0000000..3095571
--- /dev/null
+++ b/man/notificationItem.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardHeader.R
+\name{notificationItem}
+\alias{notificationItem}
+\title{Create a notification item to place in a dropdown notification menu}
+\usage{
+notificationItem(text, icon = shiny::icon("warning"), status = "success",
+  href = NULL)
+}
+\arguments{
+\item{text}{The notification text.}
+
+\item{icon}{An icon tag, created by \code{\link[shiny]{icon}}.}
+
+\item{status}{The status of the item This determines the item's background
+color. Valid statuses are listed in \link{validStatuses}.}
+
+\item{href}{An optional URL to link to.}
+}
+\description{
+Create a notification item to place in a dropdown notification menu
+}
+\seealso{
+\code{\link{dashboardHeader}} for example usage.
+
+Other menu items: \code{\link{messageItem}},
+  \code{\link{taskItem}}
+}
diff --git a/man/renderDropdownMenu.Rd b/man/renderDropdownMenu.Rd
new file mode 100644
index 0000000..74737c6
--- /dev/null
+++ b/man/renderDropdownMenu.Rd
@@ -0,0 +1,20 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/menuOutput.R
+\name{renderDropdownMenu}
+\alias{renderDropdownMenu}
+\title{Create a dropdown menu output (server side; deprecated)}
+\usage{
+renderDropdownMenu(expr, env = parent.frame(), quoted = FALSE)
+}
+\arguments{
+\item{expr}{An expression that returns a Shiny tag object, \code{\link{HTML}},
+or a list of such objects.}
+
+\item{env}{The environment in which to evaluate \code{expr}.}
+
+\item{quoted}{Is \code{expr} a quoted expression (with \code{quote()})? This
+is useful if you want to save an expression in a variable.}
+}
+\description{
+This is the server-side function for creating a dynamic dropdown menu.
+}
diff --git a/man/renderMenu.Rd b/man/renderMenu.Rd
new file mode 100644
index 0000000..caef628
--- /dev/null
+++ b/man/renderMenu.Rd
@@ -0,0 +1,104 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/menuOutput.R
+\name{renderMenu}
+\alias{renderMenu}
+\title{Create dynamic menu output (server side)}
+\usage{
+renderMenu(expr, env = parent.frame(), quoted = FALSE,
+  outputArgs = list())
+}
+\arguments{
+\item{expr}{An expression that returns a Shiny tag object, \code{\link{HTML}},
+or a list of such objects.}
+
+\item{env}{The environment in which to evaluate \code{expr}.}
+
+\item{quoted}{Is \code{expr} a quoted expression (with \code{quote()})? This
+is useful if you want to save an expression in a variable.}
+
+\item{outputArgs}{A list of arguments to be passed through to the implicit
+call to \code{\link{uiOutput}} when \code{renderUI} is used in an
+interactive R Markdown document.}
+}
+\description{
+Create dynamic menu output (server side)
+}
+\examples{
+## Only run these examples in interactive R sessions
+
+if (interactive()) {
+library(shiny)
+# ========== Dynamic sidebarMenu ==========
+ui <- dashboardPage(
+  dashboardHeader(title = "Dynamic sidebar"),
+  dashboardSidebar(
+    sidebarMenuOutput("menu")
+  ),
+  dashboardBody()
+)
+
+server <- function(input, output) {
+  output$menu <- renderMenu({
+    sidebarMenu(
+      menuItem("Menu item", icon = icon("calendar"))
+    )
+  })
+}
+
+shinyApp(ui, server)
+
+# ========== Dynamic dropdownMenu ==========
+# Example message data in a data frame
+messageData <- data.frame(
+  from = c("Admininstrator", "New User", "Support"),
+  message = c(
+    "Sales are steady this month.",
+    "How do I register?",
+    "The new server is ready."
+  ),
+  stringsAsFactors = FALSE
+)
+
+ui <- dashboardPage(
+  dashboardHeader(
+    title = "Dynamic menus",
+    dropdownMenuOutput("messageMenu")
+  ),
+  dashboardSidebar(),
+  dashboardBody(
+    fluidRow(
+      box(
+        title = "Controls",
+        sliderInput("slider", "Number of observations:", 1, 100, 50)
+      )
+    )
+  )
+)
+
+server <- function(input, output) {
+  output$messageMenu <- renderMenu({
+    # Code to generate each of the messageItems here, in a list. messageData
+    # is a data frame with two columns, 'from' and 'message'.
+    # Also add on slider value to the message content, so that messages update.
+    msgs <- apply(messageData, 1, function(row) {
+      messageItem(
+        from = row[["from"]],
+        message = paste(row[["message"]], input$slider)
+      )
+    })
+
+    dropdownMenu(type = "messages", .list = msgs)
+  })
+}
+
+shinyApp(ui, server)
+}
+}
+\seealso{
+\code{\link{menuOutput}} for the corresponding client side function
+  and examples.
+
+Other menu outputs: \code{\link{dropdownMenuOutput}},
+  \code{\link{menuItemOutput}}, \code{\link{menuOutput}},
+  \code{\link{sidebarMenuOutput}}
+}
diff --git a/man/renderValueBox.Rd b/man/renderValueBox.Rd
new file mode 100644
index 0000000..0eb5ab6
--- /dev/null
+++ b/man/renderValueBox.Rd
@@ -0,0 +1,64 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/valueBoxOutput.R
+\name{renderValueBox}
+\alias{renderValueBox}
+\alias{renderInfoBox}
+\title{Create an info or value box output (server side)}
+\usage{
+renderValueBox(expr, env = parent.frame(), quoted = FALSE)
+
+renderInfoBox(expr, env = parent.frame(), quoted = FALSE)
+}
+\arguments{
+\item{expr}{An expression that returns a Shiny tag object, \code{\link{HTML}},
+or a list of such objects.}
+
+\item{env}{The environment in which to evaluate \code{expr}.}
+
+\item{quoted}{Is \code{expr} a quoted expression (with \code{quote()})? This
+is useful if you want to save an expression in a variable.}
+}
+\description{
+This is the server-side function for creating a dynamic
+\code{\link{valueBox}} or \code{\link{infoBox}}.
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+library(shiny)
+
+ui <- dashboardPage(
+  dashboardHeader(title = "Dynamic boxes"),
+  dashboardSidebar(),
+  dashboardBody(
+    fluidRow(
+      box(width = 2, actionButton("count", "Count")),
+      infoBoxOutput("ibox"),
+      valueBoxOutput("vbox")
+    )
+  )
+)
+
+server <- function(input, output) {
+  output$ibox <- renderInfoBox({
+    infoBox(
+      "Title",
+      input$count,
+      icon = icon("credit-card")
+    )
+  })
+  output$vbox <- renderValueBox({
+    valueBox(
+      "Title",
+      input$count,
+      icon = icon("credit-card")
+    )
+  })
+}
+
+shinyApp(ui, server)
+}
+}
+\seealso{
+\code{\link{valueBoxOutput}} for the corresponding UI-side function.
+}
diff --git a/man/shinydashboard.Rd b/man/shinydashboard.Rd
new file mode 100644
index 0000000..6fb3314
--- /dev/null
+++ b/man/shinydashboard.Rd
@@ -0,0 +1,10 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/shinydashboard-package.r
+\docType{package}
+\name{shinydashboard}
+\alias{shinydashboard}
+\alias{shinydashboard-package}
+\title{shinydashboard}
+\description{
+shinydashboard
+}
diff --git a/man/sidebarMenu.Rd b/man/sidebarMenu.Rd
new file mode 100644
index 0000000..cb85f30
--- /dev/null
+++ b/man/sidebarMenu.Rd
@@ -0,0 +1,95 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardSidebar.R
+\name{sidebarMenu}
+\alias{sidebarMenu}
+\alias{menuItem}
+\alias{menuSubItem}
+\title{Create a dashboard sidebar menu and menu items.}
+\usage{
+sidebarMenu(..., id = NULL, .list = NULL)
+
+menuItem(text, ..., icon = NULL, badgeLabel = NULL, badgeColor = "green",
+  tabName = NULL, href = NULL, newtab = TRUE, selected = NULL,
+  expandedName = as.character(gsub("[[:space:]]", "", text)),
+  startExpanded = FALSE)
+
+menuSubItem(text, tabName = NULL, href = NULL, newtab = TRUE,
+  icon = shiny::icon("angle-double-right"), selected = NULL)
+}
+\arguments{
+\item{...}{For menu items, this may consist of \code{\link{menuSubItem}}s.}
+
+\item{id}{For \code{sidebarMenu}, if \code{id} is present, this id will be
+used for a Shiny input value, and it will report which tab is selected. For
+example, if \code{id="tabs"}, then \code{input$tabs} will be the
+\code{tabName} of the currently-selected tab. If you want to be able to
+bookmark and restore the selected tab, an \code{id} is required.}
+
+\item{.list}{An optional list containing items to put in the menu Same as the
+\code{...} arguments, but in list format. This can be useful when working
+with programmatically generated items.}
+
+\item{text}{Text to show for the menu item.}
+
+\item{icon}{An icon tag, created by \code{\link[shiny]{icon}}. If
+\code{NULL}, don't display an icon.}
+
+\item{badgeLabel}{A label for an optional badge. Usually a number or a short
+word like "new".}
+
+\item{badgeColor}{A color for the badge. Valid colors are listed in
+\link{validColors}.}
+
+\item{tabName}{The name of a tab that this menu item will activate. Not
+compatible with \code{href}.}
+
+\item{href}{An link address. Not compatible with \code{tabName}.}
+
+\item{newtab}{If \code{href} is supplied, should the link open in a new
+browser tab?}
+
+\item{selected}{If \code{TRUE}, this \code{menuItem} or \code{menuSubItem}
+will start selected. If no item have \code{selected=TRUE}, then the first
+\code{menuItem} will start selected.}
+
+\item{expandedName}{A unique name given to each \code{menuItem} that serves
+to indicate which one (if any) is currently expanded. (This is only applicable
+to \code{menuItem}s that have children and it is mostly only useful for
+bookmarking state.)}
+
+\item{startExpanded}{Should this \code{menuItem} be expanded on app startup?
+(This is only applicable to \code{menuItem}s that have children, and only
+one of these can be expanded at any given time).}
+}
+\description{
+A \code{dashboardSidebar} can contain a \code{sidebarMenu}. A
+\code{sidebarMenu} contains \code{menuItem}s, and they can in turn contain
+\code{menuSubItem}s.
+}
+\details{
+Menu items (and similarly, sub-items) should have a value for either
+\code{href} or \code{tabName}; otherwise the item would do nothing. If it has
+a value for \code{href}, then the item will simply be a link to that value.
+
+If a \code{menuItem} has a non-NULL \code{tabName}, then the \code{menuItem}
+will behave like a tab -- in other words, clicking on the \code{menuItem}
+will bring a corresponding \code{tabItem} to the front, similar to a
+\code{\link[shiny]{tabPanel}}. One important difference between a
+\code{menuItem} and a \code{tabPanel} is that, for a \code{menuItem}, you
+must also supply a corresponding \code{tabItem} with the same value for
+\code{tabName}, whereas for a \code{tabPanel}, no \code{tabName} is needed.
+(This is because the structure of a \code{tabPanel} is such that the tab name
+can be automatically generated.) Sub-items are also able to activate
+\code{tabItem}s.
+
+Menu items (but not sub-items) also may have an optional badge. A badge is a
+colored oval containing text.
+}
+\seealso{
+\code{\link{dashboardSidebar}} for example usage. For
+  dynamically-generated sidebar menus, see \code{\link{renderMenu}} and
+  \code{\link{sidebarMenuOutput}}.
+
+Other sidebar items: \code{\link{sidebarSearchForm}},
+  \code{\link{sidebarUserPanel}}
+}
diff --git a/man/sidebarMenuOutput.Rd b/man/sidebarMenuOutput.Rd
new file mode 100644
index 0000000..71b35f9
--- /dev/null
+++ b/man/sidebarMenuOutput.Rd
@@ -0,0 +1,23 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/menuOutput.R
+\name{sidebarMenuOutput}
+\alias{sidebarMenuOutput}
+\title{Create a sidebar menu output (client side)}
+\usage{
+sidebarMenuOutput(outputId)
+}
+\arguments{
+\item{outputId}{Output variable name.}
+}
+\description{
+This is the UI-side function for creating a dynamic sidebar menu.
+}
+\seealso{
+\code{\link{renderMenu}} for the corresponding server-side function
+  and examples, and \code{\link{sidebarMenu}} for the corresponding function
+  for generating static sidebar menus.
+
+Other menu outputs: \code{\link{dropdownMenuOutput}},
+  \code{\link{menuItemOutput}}, \code{\link{menuOutput}},
+  \code{\link{renderMenu}}
+}
diff --git a/man/sidebarSearchForm.Rd b/man/sidebarSearchForm.Rd
new file mode 100644
index 0000000..0231f7b
--- /dev/null
+++ b/man/sidebarSearchForm.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardSidebar.R
+\name{sidebarSearchForm}
+\alias{sidebarSearchForm}
+\title{Create a search form to place in a sidebar}
+\usage{
+sidebarSearchForm(textId, buttonId, label = "Search...",
+  icon = shiny::icon("search"))
+}
+\arguments{
+\item{textId}{Shiny input ID for the text input box.}
+
+\item{buttonId}{Shiny input ID for the search button (which functions like an
+\code{\link[shiny]{actionButton}}).}
+
+\item{label}{Text label to display inside the search box.}
+
+\item{icon}{An icon tag, created by \code{\link[shiny]{icon}}.}
+}
+\description{
+A search form consists of a text input field and a search button.
+}
+\seealso{
+\code{\link{dashboardSidebar}} for example usage.
+
+Other sidebar items: \code{\link{sidebarMenu}},
+  \code{\link{sidebarUserPanel}}
+}
diff --git a/man/sidebarUserPanel.Rd b/man/sidebarUserPanel.Rd
new file mode 100644
index 0000000..13c2f5a
--- /dev/null
+++ b/man/sidebarUserPanel.Rd
@@ -0,0 +1,26 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardSidebar.R
+\name{sidebarUserPanel}
+\alias{sidebarUserPanel}
+\title{A panel displaying user information in a sidebar}
+\usage{
+sidebarUserPanel(name, subtitle = NULL, image = NULL)
+}
+\arguments{
+\item{name}{Name of the user.}
+
+\item{subtitle}{Text or HTML to be shown below the name.}
+
+\item{image}{A filename or URL to use for an image of the person. If it is a
+local file, the image should be contained under the www/ subdirectory of
+the application.}
+}
+\description{
+A panel displaying user information in a sidebar
+}
+\seealso{
+\code{\link{dashboardSidebar}} for example usage.
+
+Other sidebar items: \code{\link{sidebarMenu}},
+  \code{\link{sidebarSearchForm}}
+}
diff --git a/man/tabBox.Rd b/man/tabBox.Rd
new file mode 100644
index 0000000..eae27ee
--- /dev/null
+++ b/man/tabBox.Rd
@@ -0,0 +1,89 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/boxes.R
+\name{tabBox}
+\alias{tabBox}
+\title{Create a tabbed box}
+\usage{
+tabBox(..., id = NULL, selected = NULL, title = NULL, width = 6,
+  height = NULL, side = c("left", "right"))
+}
+\arguments{
+\item{...}{\code{\link{tabPanel}} elements to include in the tabset}
+
+\item{id}{If provided, you can use \code{input$}\emph{\code{id}} in your
+server logic to determine which of the current tabs is active. The value
+will correspond to the \code{value} argument that is passed to
+\code{\link{tabPanel}}.}
+
+\item{selected}{The \code{value} (or, if none was supplied, the \code{title})
+of the tab that should be selected by default. If \code{NULL}, the first
+tab will be selected.}
+
+\item{title}{Title for the tabBox.}
+
+\item{width}{The width of the box, using the Bootstrap grid system. This is
+used for row-based layouts. The overall width of a region is 12, so the
+default valueBox width of 4 occupies 1/3 of that width. For column-based
+layouts, use \code{NULL} for the width; the width is set by the column that
+contains the box.}
+
+\item{height}{The height of a box, in pixels or other CSS unit. By default
+the height scales automatically with the content.}
+
+\item{side}{Which side of the box the tabs should be on (\code{"left"} or
+\code{"right"}). When \code{side="right"}, the order of tabs will be
+reversed.}
+}
+\description{
+Create a tabbed box
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+library(shiny)
+
+body <- dashboardBody(
+  fluidRow(
+    tabBox(
+      title = "First tabBox",
+      # The id lets us use input$tabset1 on the server to find the current tab
+      id = "tabset1", height = "250px",
+      tabPanel("Tab1", "First tab content"),
+      tabPanel("Tab2", "Tab content 2")
+    ),
+    tabBox(
+      side = "right", height = "250px",
+      selected = "Tab3",
+      tabPanel("Tab1", "Tab content 1"),
+      tabPanel("Tab2", "Tab content 2"),
+      tabPanel("Tab3", "Note that when side=right, the tab order is reversed.")
+    )
+  ),
+  fluidRow(
+    tabBox(
+      # Title can include an icon
+      title = tagList(shiny::icon("gear"), "tabBox status"),
+      tabPanel("Tab1",
+        "Currently selected tab from first box:",
+        verbatimTextOutput("tabset1Selected")
+      ),
+      tabPanel("Tab2", "Tab content 2")
+    )
+  )
+)
+
+shinyApp(
+  ui = dashboardPage(dashboardHeader(title = "tabBoxes"), dashboardSidebar(), body),
+  server = function(input, output) {
+    # The currently selected tab from the first box
+    output$tabset1Selected <- renderText({
+      input$tabset1
+    })
+  }
+)
+}
+}
+\seealso{
+Other boxes: \code{\link{box}}, \code{\link{infoBox}},
+  \code{\link{valueBox}}
+}
diff --git a/man/tabItem.Rd b/man/tabItem.Rd
new file mode 100644
index 0000000..e7bcada
--- /dev/null
+++ b/man/tabItem.Rd
@@ -0,0 +1,21 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tabs.R
+\name{tabItem}
+\alias{tabItem}
+\title{One tab to put inside a tab items container}
+\usage{
+tabItem(tabName = NULL, ...)
+}
+\arguments{
+\item{tabName}{The name of a tab. This must correspond to the \code{tabName}
+of a \code{\link{menuItem}} or \code{\link{menuSubItem}}.}
+
+\item{...}{Contents of the tab.}
+}
+\description{
+One tab to put inside a tab items container
+}
+\seealso{
+\code{\link{menuItem}}, \code{\link{menuSubItem}},
+  \code{\link{tabItems}}. See \code{\link{sidebarMenu}} for a usage example.
+}
diff --git a/man/tabItems.Rd b/man/tabItems.Rd
new file mode 100644
index 0000000..0b2fe4d
--- /dev/null
+++ b/man/tabItems.Rd
@@ -0,0 +1,19 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tabs.R
+\name{tabItems}
+\alias{tabItems}
+\title{A container for tab items}
+\usage{
+tabItems(...)
+}
+\arguments{
+\item{...}{Items to put in the container. Each item should be a
+\code{\link{tabItem}}.}
+}
+\description{
+A container for tab items
+}
+\seealso{
+\code{\link{menuItem}}, \code{\link{menuSubItem}},
+  \code{\link{tabItem}}. See \code{\link{sidebarMenu}} for a usage example.
+}
diff --git a/man/tagAssert.Rd b/man/tagAssert.Rd
new file mode 100644
index 0000000..14b55be
--- /dev/null
+++ b/man/tagAssert.Rd
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utils.R
+\name{tagAssert}
+\alias{tagAssert}
+\title{Assert that a tag has specified properties}
+\usage{
+tagAssert(tag, type = NULL, class = NULL, allowUI = TRUE)
+}
+\arguments{
+\item{tag}{A tag object.}
+
+\item{type}{The type of a tag, like "div", "a", "span".}
+
+\item{class}{An HTML class.}
+
+\item{allowUI}{If TRUE (the default), allow dynamic outputs generated by
+\code{\link[shiny]{uiOutput}} or \code{\link[shiny]{htmlOutput}}. When a
+dynamic output is provided, \code{tagAssert} won't try to validate the the
+contents.}
+}
+\description{
+Assert that a tag has specified properties
+}
+\keyword{internal}
diff --git a/man/taskItem.Rd b/man/taskItem.Rd
new file mode 100644
index 0000000..c4a78b7
--- /dev/null
+++ b/man/taskItem.Rd
@@ -0,0 +1,27 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/dashboardHeader.R
+\name{taskItem}
+\alias{taskItem}
+\title{Create a task item to place in a dropdown task menu}
+\usage{
+taskItem(text, value = 0, color = "aqua", href = NULL)
+}
+\arguments{
+\item{text}{The task text.}
+
+\item{value}{A percent value to use for the bar.}
+
+\item{color}{A color for the bar. Valid colors are listed in
+\link{validColors}.}
+
+\item{href}{An optional URL to link to.}
+}
+\description{
+Create a task item to place in a dropdown task menu
+}
+\seealso{
+\code{\link{dashboardHeader}} for example usage.
+
+Other menu items: \code{\link{messageItem}},
+  \code{\link{notificationItem}}
+}
diff --git a/man/updateTabItems.Rd b/man/updateTabItems.Rd
new file mode 100644
index 0000000..c264fa5
--- /dev/null
+++ b/man/updateTabItems.Rd
@@ -0,0 +1,60 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tabs.R
+\name{updateTabItems}
+\alias{updateTabItems}
+\title{Change the selected tab on the client}
+\usage{
+updateTabItems(session, inputId, selected = NULL)
+}
+\arguments{
+\item{session}{The \code{session} object passed to function given to
+\code{shinyServer}.}
+
+\item{inputId}{The id of the \code{tabsetPanel}, \code{navlistPanel},
+or \code{navbarPage} object.}
+
+\item{selected}{The name of the tab to make active.}
+}
+\description{
+This function controls the active tab of \code{\link{tabItems}} from the
+server. It behaves just like \code{\link[shiny]{updateTabsetPanel}}.
+}
+\examples{
+## Only run this example in interactive R sessions
+if (interactive()) {
+
+ui <- dashboardPage(
+  dashboardHeader(title = "Simple tabs"),
+  dashboardSidebar(
+    sidebarMenu(
+      id = "tabs",
+      menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
+      menuItem("Widgets", tabName = "widgets", icon = icon("th"))
+    ),
+    actionButton('switchtab', 'Switch tab')
+  ),
+  dashboardBody(
+    tabItems(
+      tabItem(tabName = "dashboard",
+        h2("Dashboard tab content")
+      ),
+      tabItem(tabName = "widgets",
+        h2("Widgets tab content")
+      )
+    )
+  )
+)
+
+server <- function(input, output, session) {
+  observeEvent(input$switchtab, {
+    newtab <- switch(input$tabs,
+      "dashboard" = "widgets",
+      "widgets" = "dashboard"
+    )
+    updateTabItems(session, "tabs", newtab)
+  })
+}
+
+shinyApp(ui, server)
+}
+}
diff --git a/man/validColors.Rd b/man/validColors.Rd
new file mode 100644
index 0000000..2bb839b
--- /dev/null
+++ b/man/validColors.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utils.R
+\docType{data}
+\name{validColors}
+\alias{validColors}
+\title{Valid colors}
+\description{
+These are valid colors for various dashboard components. Valid colors are
+listed below.
+}
+\details{
+\itemize{
+  \item \code{red}
+  \item \code{yellow}
+  \item \code{aqua}
+  \item \code{blue}
+  \item \code{light-blue}
+  \item \code{green}
+  \item \code{navy}
+  \item \code{teal}
+  \item \code{olive}
+  \item \code{lime}
+  \item \code{orange}
+  \item \code{fuchsia}
+  \item \code{purple}
+  \item \code{maroon}
+  \item \code{black}
+}
+}
+\keyword{internal}
diff --git a/man/validStatuses.Rd b/man/validStatuses.Rd
new file mode 100644
index 0000000..011cae1
--- /dev/null
+++ b/man/validStatuses.Rd
@@ -0,0 +1,21 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/utils.R
+\docType{data}
+\name{validStatuses}
+\alias{validStatuses}
+\title{Valid statuses}
+\description{
+These status strings correspond to colors as defined in Bootstrap's CSS.
+Although the colors can vary depending on the particular CSS selector, they
+generally appear as follows:
+}
+\details{
+\itemize{
+  \item \code{primary} Blue (sometimes dark blue)
+  \item \code{success} Green
+  \item \code{info} Blue
+  \item \code{warning} Orange
+  \item \code{danger} Red
+}
+}
+\keyword{internal}
diff --git a/man/valueBox.Rd b/man/valueBox.Rd
new file mode 100644
index 0000000..d8ca53b
--- /dev/null
+++ b/man/valueBox.Rd
@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/boxes.R
+\name{valueBox}
+\alias{valueBox}
+\title{Create a value box for the main body of a dashboard.}
+\usage{
+valueBox(value, subtitle, icon = NULL, color = "aqua", width = 4,
+  href = NULL)
+}
+\arguments{
+\item{value}{The value to display in the box. Usually a number or short text.}
+
+\item{subtitle}{Subtitle text.}
+
+\item{icon}{An icon tag, created by \code{\link[shiny]{icon}}.}
+
+\item{color}{A color for the box. Valid colors are listed in
+\link{validColors}.}
+
+\item{width}{The width of the box, using the Bootstrap grid system. This is
+used for row-based layouts. The overall width of a region is 12, so the
+default valueBox width of 4 occupies 1/3 of that width. For column-based
+layouts, use \code{NULL} for the width; the width is set by the column that
+contains the box.}
+
+\item{href}{An optional URL to link to.}
+}
+\description{
+A value box displays a value (usually a number) in large text, with a smaller
+subtitle beneath, and a large icon on the right side. Value boxes are meant
+to be placed in the main body of a dashboard.
+}
+\seealso{
+\code{\link{box}} for usage examples.
+
+Other boxes: \code{\link{box}}, \code{\link{infoBox}},
+  \code{\link{tabBox}}
+}
diff --git a/man/valueBoxOutput.Rd b/man/valueBoxOutput.Rd
new file mode 100644
index 0000000..6f8e56b
--- /dev/null
+++ b/man/valueBoxOutput.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/valueBoxOutput.R
+\name{valueBoxOutput}
+\alias{valueBoxOutput}
+\alias{infoBoxOutput}
+\title{Create an info or value box output (client side)}
+\usage{
+valueBoxOutput(outputId, width = 4)
+
+infoBoxOutput(outputId, width = 4)
+}
+\arguments{
+\item{outputId}{Output variable name.}
+
+\item{width}{The width of the box, using the Bootstrap grid system. This is
+used for row-based layouts. The overall width of a region is 12, so the
+default valueBox width of 4 occupies 1/3 of that width. For column-based
+layouts, use \code{NULL} for the width; the width is set by the column that
+contains the box.}
+}
+\description{
+This is the UI-side function for creating a dynamic \code{\link{valueBox}} or
+\code{\link{infoBox}}.
+}
+\seealso{
+\code{\link{renderValueBox}} for the corresponding server-side
+  function and examples.
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/r-cran-shinydashboard.git



More information about the debian-med-commit mailing list