/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
body {
	/* prevent jump page on load (before calculation top navbar) */
	padding-top: 56px;
}
iframe {
	width: 100%;
	min-height: 700px;
}
.apachecon-banner {
	margin: 5px;
}
.bannerRight img, .bannerLeft img {
	height: 80px !important;
}
.header {
  padding-top: .5rem;
}
.color-highlight {
	color: #cb2533;
	text-transform: uppercase;
}
.alignnone.img-responsive {
	display: inline-block;
}
/* Call for logo, need to be removed*/
.powered-preview {
	background-repeat: no-repeat;
	background-image: url('../images/logos/pb.png');
	background-position: 0 0;
	background-size: 200px;
	width: 200px;
	height: 200px;
	position: relative;
}
.powered-preview-logo {
	background-repeat: no-repeat;
	background-position: 0 0;
	background-size: 130px;
	position: absolute;
	height: 130px;
	width: 130px;
	top: 37px;
	left: 37px;
}
.example-image-link {
	display: block;
}
.install-steps {
	font-size: 20px;
	background: linear-gradient(to right, lime, green);
	color: white !important;
	max-width: 385px;
	font-weight: bold;
}
.install-steps a {
	color: white;
}
.install-steps .small {
	font-size: small;
	text-align: right;
}
.install-steps .step {
	background-repeat: no-repeat;
	padding-left: 40px;
}
.install-steps .step.unpack {
	background-image: url(../images/box_open.png);
}
.install-steps .step.run {
	background-image: url(../images/world.png);
}
.copyright {
	text-align: center;
}
/*
// Callouts
// https://github.com/twbs/bootstrap/blob/6589408a4b91c0f58fa4ac1508d69e3e9e4345e1/site/docs/4.1/assets/scss/_callouts.scss
*/
.bd-callout {
	position: relative;
	padding: 1.25rem;
	margin-top: 1.25rem;
	margin-bottom: 1.25rem;
	border: 1px solid #eee;
	border-left-width: .25rem;
	border-radius: .25rem;
}
.bd-callout h4, .bd-callout .h4 {
	margin-top: 0;
	margin-bottom: .25rem;
}
.bd-callout p:last-child {
	margin-bottom: 0;
}
.bd-callout code {
	border-radius: .25rem;
}
.bd-callout + .bd-callout {
	margin-top: -.25rem;
}
.bd-callout-info { border-left-color: var(--info); }
.bd-callout-info h4 { color: var(--info); }
.bd-callout-warning { border-left-color: var(--warning); }
.bd-callout-warning h4 { color: var(--warning); }
.bd-callout-danger { border-left-color: var(--danger); }
.bd-callout-danger h4 { color: var(--danger); }

/*DATE*/
.bd-callout .date {
	font-size: smaller;
	display: inline-block;
	position: absolute;
	top: 10px;
	right: 20px;
	font-weight: bold;
	color: var(--info);
}
.grid-striped .row:nth-of-type(odd) {
	background-color: rgba(0,0,0,.05);
}
