// Cerulean 2.2.2
// Bootswatch
// -----------------------------------------------------


// TYPOGRAPHY
// -----------------------------------------------------

@import url(//fonts.googleapis.com/css?family=Telex);

// SCAFFOLDING
// -----------------------------------------------------

// NAVBAR
// -----------------------------------------------------

.navbar {


	.brand {
		padding: 14px 20px 16px;
		font-family: @headingsFontFamily;
		text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
	}

	li {
		line-height: 20px;
	}

	.nav > li > a {
		padding: 16px 10px 14px;
		font-family: @headingsFontFamily;
		text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);
	}

	.search-query {
		border: 1px solid darken(@linkColor, 10%);
		line-height: normal;
	}

	.navbar-text {
		padding: 19px 10px 18px;
		line-height: 13px;
		color: rgba(0, 0, 0, 0.5);
		text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3);
	}

	&-inverse {

		.navbar-search .search-query {
			color: @textColor;
		}
	}
}

@media (max-width: @navbarCollapseWidth) {

	.navbar .nav-collapse {

		.nav li > a {

			font-family: @headingsFontFamily;
			font-weight: normal;
			color: @white;
			text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2);

			&:hover {
				background-color: #2B7CAC;
			}
		}

		.nav .active > a {
			.box-shadow(none);
			background-color: #2B7CAC;
		}

		.dropdown-menu li > a:hover,
		.dropdown-menu li > a:focus,
		.dropdown-submenu:hover > a {
			background-image: none;
		}

		.navbar-form,
		.navbar-search {
			border: none;
		}

		.nav-header {
			color: #2B7CAC;
		}
	}

	.navbar-inverse .nav-collapse {

		.nav li > a {
			color: @navbarInverseLinkColor;

			&:hover {
				background-color: rgba(0, 0, 0, 0.1);
			}
		}

		.nav .active > a,
		.nav > li > a:hover,
		.dropdown-menu a:hover {
			background-color: rgba(0, 0, 0, 0.1) !important;
		}
	}
}

div.subnav {

	font-family: @headingsFontFamily;
	text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.2);

	&-fixed {
		top: @navbarHeight;
	}
}

// NAV
// -----------------------------------------------------

// BUTTONS
// -----------------------------------------------------

.btn {
  #gradient > .vertical-three-colors(@white, @white, 5%, darken(@white, 0%));
  @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
  .box-shadow(@shadow);

  &:hover {
  	background-position: 0 0;
  }
}

.btn-primary {
  .buttonBackground(lighten(@btnPrimaryBackground, 5%), @btnPrimaryBackground);
}

.btn-info {
  .buttonBackground(lighten(@btnInfoBackground, 5%), @btnInfoBackground);
}

.btn-success {
  .buttonBackground(lighten(@btnSuccessBackground, 5%), @btnSuccessBackground);
}

.btn-warning {
  .buttonBackground(lighten(@btnWarningBackground, 5%), @btnWarningBackground);
}

.btn-danger {
  .buttonBackground(lighten(@btnDangerBackground, 5%), @btnDangerBackground);
}

.btn-inverse {
  .buttonBackground(lighten(@btnInverseBackground, 5%), @btnInverseBackground);
}

// TABLES
// -----------------------------------------------------

// FORMS
// -----------------------------------------------------

// DROPDOWNS
// -----------------------------------------------------

// ALERTS, LABELS, BADGES
// -----------------------------------------------------

// MISC
// -----------------------------------------------------

i[class^="icon-"]{
	opacity: 0.8;
}

// MEDIA QUERIES
// -----------------------------------------------------
