/**
 * Custom Bootstrap and Theme Overrides
 *
 * Bootstrap designers: Feel free to remove all of the styles in this
 * file to start a fresh new design. Most of the critical/functional
 * styles are found within the other CSS files, with this one included last.
 *
 * Bootstrap and Hexo markdown style overrides would typically happen here.
 */

/* Globals */

body {
    font-family: 'Bosch Sans', Arial, Tahoma, Verdana, FontAwesome;
}

h1, .h1,
h2, .h2,
h3, .h3,
h4, .h4,
h5, .h5,
h6, .h6 {
  margin-top: 1em;
  margin-bottom: 15px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: normal;
}

p {
  margin: 0 0 15px;
}

code {
  background-color: #eeeeee;
  font-size: 80%;
}

.content-main img {
	max-width: 100%;
}

.content-main table {
	border-collapse: collapse;
	font-size: 14px;
}
.content-main table tr:first-child {
	border-top: 1px solid #ccc;
}
.content-main table tr {
	border-bottom: 1px solid #ccc;
}
.content-main table td {
	padding: 7px 10px;
	text-align: left;
	vertical-align: top;
}

.fa { margin-right: 0.25em; }

}
.nav-pills>li>a {
  border-radius: 30px;
}

/* Override Bootstrap's default container width */
@media (min-width: 1200px) {
  .container {
    width: 970px;
  }
}

/*
 * Masthead for nav
 */

.navbar {
  background-color: #fff;
  -webkit-box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.1);
          box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.1);
}

.navbar-header {
    height: 86px;
}

@media (max-width: 769px) {
    .navbar-collapse {
      border-top: none;
      -webkit-box-shadow: inset 0px 3px 5px 0px rgba(0,0,0,0.1);
              box-shadow: inset 0px 3px 5px 0px rgba(0,0,0,0.1);
    }
}

.navbar-inverse { border: 0; }

.navbar-inverse .navbar-toggle {
  border-color: #cdddeb;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #cdddeb;
}

.navbar-inverse .navbar-toggle:focus,
.navbar-inverse .navbar-toggle:hover {
  background-color: #65A2D6;
}

.navbar-nav>li>a {
    color: rgb(18, 38, 58);
    cursor: pointer;
    display: block;
    font-size: 16px;
    font-weight: normal;
    height: 40px;
    line-height: 24px;
}

.navbar-inverse .navbar-nav>li>a.active {
    color: #67b419;
}
.navbar-inverse .navbar-nav>li>a:hover {
    color: #67b419;
    font-weight: bold;
}

@media (min-width: 768px) {
  .navbar {
    border-radius: 0;
    min-height: 40px;
  }
  
  .navbar-nav {
    margin-top: 30px;
  }


  /** The following may need modification depending on
      the size of your `navbar-brand` (if enabled) */
  #main-menu-navbar {
    margin-top: 15px;
	border-bottom: 5px solid #3f136c;
  }
  .navbar-nav>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
  }
  /** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
}

/*
 * Blog header and description
 */

.blog-header {
  padding-bottom: 20px;
}
.blog-title {
  margin-top: 30px;
  margin-bottom: 0;
  font-size: 60px;
  font-weight: normal;
}
.blog-description {
  font-size: 20px;
  color: #999;
}
/*
 * Main column and sidebar layout
 */

.content-main {
  font-size: 18px;
  line-height: 1.5;
}
.content-main > article:last-of-type {
  margin-bottom: 30px;
}

/* Sidebar modules for boxing content */
.sidebar-module {
  padding: 15px;
  margin: 0 -15px 15px;
}
.sidebar-module h4 {
  margin-top: 0;
  margin-bottom: 10px;
}
.sidebar-module h4 a {
	color: #333;
}
.sidebar-module-inset {
  padding: 15px;
  background-color: #f5f5f5;
  border-radius: 4px;
}
.sidebar-module-inset p:last-child,
.sidebar-module-inset ul:last-child,
.sidebar-module-inset ol:last-child {
  margin-bottom: 0;
}

.sidebar-module-list {
  padding-left: 0;
  list-style: none;
}
.sidebar-module-list-child {
  padding-left: 25px;
}


/*
 * Blog posts
 */

.article {
  margin-bottom: 60px;
}

.article-header h1 {
  margin-top: 0;
  margin-bottom: 5px;
}
.article-header h1 a {
  color: #333;
}
.article-header h1 a:hover {
  color: #23527c;
  text-decoration: none;
}

.article-meta {
  margin-bottom: 20px;
  color: #999;
  font-size: 0.9em;
}
.article-meta > * {
  display: inline-block;
  margin-right: 15px;
}
.article-meta a {
  color: inherit;
}
.thumbnail.with-caption {
	max-width: 40%;
	display: inline-block;
	background: #f5f5f5;
}
.thumbnail.with-caption p {
	margin: 0;
	font-size: 12px;
	padding-top: 0.5em;
}
.article-entry .article-more-link {
  margin: 15px 0;
}
.article-entry .thumbnail .caption {
  padding: 0;
}
.article-entry>*:last-child {
  margin-bottom: 15px;
}

/* article footer content */
.article-footer {
  font-size: 0.85em;
  border-top: 1px solid #eee;
  padding-top: 15px;
}
.article-footer:after { /* clearfix */
  content: " ";
  visibility: hidden;
  display: block;
  height: 0;
  clear: both;
}
.article-footer a {
  color: #999;
  text-decoration: none;
}
.article-footer a:hover {
  color: #666;
  text-decoration: underline;
}

/*
 * Archives
 */

.archives-wrap {
  margin-bottom: 30px;
}

.archive-year-wrap a,
.archive-article .article-datetime a {
  color: #333;
  text-decoration: none;
}

.archive-article .article-datetime a {
  color: #999;
  text-decoration: none;
}

/*
 * Pagination
 */
#page-nav {
  text-align: center;
}
#page-nav .pagination {
  margin-top: 0;
  margin-bottom: 30px;
}
#page-nav .pagination .active>* {
  background-color: #428bca;
  border-color: #428bca;
}
#page-nav .pagination>li:last-child>* {
  border-top-right-radius: 30px;
  border-bottom-right-radius: 30px;
}
#page-nav .pagination>li:first-child>* {
  border-top-left-radius: 30px;
  border-bottom-left-radius: 30px;
}

/*
 * Footer
 */

.blog-footer {
  padding: 40px 0;
  color: #999;
  text-align: center;
  background-color: #f9f9f9;
  border-top: 1px solid #e5e5e5;
}
.blog-footer p:last-child {
  margin-bottom: 0;
}

footer ul {
    margin-left: -40px;
    margin-bottom: 10px;
}

footer li {
    display: inline-block;
    margin: 0 20px;
}

.specification_index .toc {
	padding-left: 1em;
	font-size: 16px;
}

.specification_index .field-definition {
	margin-bottom: 3em;
}

.specification_index .field-definition table {
	width: 100%;
}

.specification_index .field-definition table th {
	width: 8em;
}
.specification_index .panel-heading a {
	color: #424c58;
}

.faq_index #accordion {
	margin-top: 2em;
}

.faq_index .panel-body {
	font-size: 16px;
}

/*
 * other
 */
.panel-heading .toggle-collapse:after {
    font-family: 'Glyphicons Halflings';
    content: "\e114";
    float: right; 
	color: #424c58;
}

.panel-heading .toggle-collapse.collapsed:after {
	content: "\e080";
}

.highlight .code, .highlight table tr:first-child {
	border: 0px;
	padding: 0px;
}
