/*
Copyright 2015 The Apache Software Foundation.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/* 
    Created on : 13 nov. 2015, 13:47:57
    Author     : barboni
*/
/**
 * html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
 * v1.6.1 2010-09-17 | Authors: Eric Meyer & Richard Clark
 * html5doctor.com/html-5-reset-stylesheet/
 */

html, body, div, span, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, figcaption, figure,
footer, header, hgroup, menu, nav, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}

article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
  display: block;
}

blockquote, q { quotes: none; }

blockquote:before, blockquote:after,
q:before, q:after { content: ""; content: none; }

ins { background-color: #ff9; color: #000; text-decoration: none; }

mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }

del { text-decoration: line-through; }

abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }

table { border-collapse: collapse; border-spacing: 0; }

hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }

input, select { vertical-align: middle; }


/**
 * Font normalization inspired by YUI Library's fonts.css: developer.yahoo.com/yui/
 */

body { font:13px/1.231 sans-serif; *font-size:small; } /* Hack retained to preserve specificity */
select, input, textarea, button { font:99% sans-serif; }

/* Normalize monospace sizing:
   en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome */
pre, code, kbd, samp { font-family: monospace, sans-serif; }


/**
 * Minimal base styles.
 */

/* Always force a scrollbar in non-IE */
html { overflow-y: scroll; }

/* Accessible focus treatment: people.opera.com/patrickl/experiments/keyboard/test */
a:hover, a:active { outline: none; }

ul, ol { margin-left: 2em; }
ol { list-style-type: decimal; }

/* Remove margins for navigation lists */
nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }

small { font-size: 85%; }
strong, th { font-weight: bold; }

td { vertical-align: top; }

/* Set sub, sup without affecting line-height: gist.github.com/413930 */
sub, sup { font-size: 75%; line-height: 0; position: relative; }
sup { top: -0.5em; }
sub { bottom: -0.25em; }

pre {
  /* www.pathf.com/blogs/2008/05/formatting-quoted-code-in-blog-posts-css21-white-space-pre-wrap/ */
  padding: 15px;
}

textarea { overflow: auto; } /* www.sitepoint.com/blogs/2010/08/20/ie-remove-textarea-scrollbars/ */

.ie6 legend, .ie7 legend { margin-left: -7px; } 

/* Align checkboxes, radios, text inputs with their label by: Thierry Koblentz tjkdesign.com/ez-css/css/base.css  */
input[type="radio"] { vertical-align: text-bottom; }
input[type="checkbox"] { vertical-align: bottom; }
.ie7 input[type="checkbox"] { vertical-align: baseline; }
.ie6 input { vertical-align: text-bottom; }

/* Hand cursor on clickable input elements */
label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }

/* Webkit browsers add a 2px margin outside the chrome of form elements */
button, input, select, textarea { margin: 0; }

/* Colors for form validity */
input:valid, textarea:valid   {  }
input:invalid, textarea:invalid {
   border-radius: 1px; -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; box-shadow: 0px 0px 5px red;
}
.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }


/* These selection declarations have to be separate
   No text-shadow: twitter.com/miketaylr/status/12228805301
   Also: hot pink! */
::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; }
::selection { background:#FF5E99; color:#fff; text-shadow: none; }

/* j.mp/webkit-tap-highlight-color */
a:link { -webkit-tap-highlight-color: #FF5E99; }

/* Make buttons play nice in IE:
   www.viget.com/inspire/styling-the-button-element-in-internet-explorer/ */
button {  width: auto; overflow: visible; }

/* Bicubic resizing for non-native sized IMG:
   code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/ */
.ie7 img { -ms-interpolation-mode: bicubic; }

/**
 * You might tweak these..
 */

body, select, input, textarea {
  /* #444 looks better than black: twitter.com/H_FJ/statuses/11800719859 */
  color: #444;
  /* Set your base font here, to apply evenly */
  /* font-family: Georgia, serif;  */
}

/* Headers (h1, h2, etc) have no default font-size or margin; define those yourself */
h1, h2, h3, h4, h5, h6 { font-weight: bold; }

a, a:active, a:visited { color: #607890; }
a:hover { color: #036; }


/**
 * Primary styles
 *
 * Author: 
 */


body{text-align:center;margin:0}
.container{text-align:left;position:relative;padding:0;margin:0 auto;width:800px}
.column{float:left;margin:0 5px 0 0;padding:0}
* html .column{overflow-x:hidden}
.border{padding-right:2px;margin-right:2px;border-right:1px solid #ddd}
.span-1{width:35px}
.span-2{width:75px}
.span-3{width:115px}
.span-4{width:155px}
.span-5{width:195px}
.span-6{width:235px}
.span-7{width:275px}
.span-8{width:315px}
.span-9{width:355px}
.span-10{width:395px}
.span-11{width:435px}
.span-12{width:475px}
.span-13{width:515px}
.span-14{width:555px}
.span-15{width:595px}
.span-16{width:635px}
.span-17{width:675px}
.span-18{width:715px}
.span-19{width:755px}
.span-20{width:795px}
.span-21{width:835px}
.span-22{width:875px}
.span-23{width:915px}
.span-24{width:955px;margin:0}
.last{margin-right:0}
.append-1{padding-right:40px}
.append-2{padding-right:80px}
.append-3{padding-right:120px}
.append-4{padding-right:160px}
.append-5{padding-right:200px}
.prepend-1{padding-left:40px}
.prepend-2{padding-left:80px}
.prepend-3{padding-left:120px}
.prepend-4{padding-left:160px}
.prepend-5{padding-left:200px}
.clear{display:inline-block}
.clear:after,.container:after{content:".";display:block;height:0;clear:both;visibility:hidden}
* html .clear{height:1%}
.clear{display:block}
h1,h2,h3,h4,h5,h6, p,ul,ol,dl,pre,form{padding-left:5px;padding-right:5px}
table{margin-left:5px;margin-right:5px}
img{margin:0 0 18px 0}
.pull-1{margin-left:-70px}
.pull-2{margin-left:-140px}
.pull-3{margin-left:-210px}
.push-0{margin:0 0 0 18px;float:right}
.push-1{margin:0 -70px 0 18px;float:right}
.push-2{margin:0 -140px 0 18px;float:right}
.push-3{margin:0 -210px 0 18px;float:right}
.deprecated{text-decoration: line-through}

/* @end */

/* @group typography.css */

body {
  font-size: 12px;
  line-height: 18px; /* Do a complete find/replace on "18px" to change this */
}


/* Default fonts */
h1,h2,h3,
h4,h5,h6  { font-family: "Helvetica Neue", Helvetica, sans-serif; }
body      { font-family: "Lucida Grande", Calibri, Arial, sans-serif; }
pre       { font-family: Monaco, "Courier New", monospace; }
code      { font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Monaco, Courier, monospace; }


/* Headings
-------------------------------------------------------------- */

h1,h2,h3,h4,h5,h6 {
  color:#111;
  clear:both;
}

h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
    color: #111;
    text-decoration: none;
}

h1 { font-size: 30px; line-height:36px; padding:10px 0 18px 0; }
h2 { font-size: 20px; line-height:36px; }
h3 { font-size: 12px; line-height:24px; }
h4 { font-size: 12px; font-weight:bold; }
h5 { font-size: 12px; font-weight:bold; }
h6 { font-size: 12px; }


/* Text elements
-------------------------------------------------------------- */

p           { margin: 0 0 18px 0; text-align:justify; }
p.last      { margin-bottom:0; }
p img       { float: left; margin:18px 18px 18px 0; padding:0; }
p img.top   { margin-top:0; } /* Use this if the image is at the top of the <p>. */

ul, ol      { margin: 0 0 18px 0; }
ul          { list-style-type:circle; }
ol          { list-style-type: decimal; }
dl          { margin: 0 0 18px 0; }
dl dt       { font-weight: bold; }

a           { color: #A68000; text-decoration: underline; outline: none; }
a:hover     { color: #000; }

blockquote  { margin: 0 0 18px 18px; color: #666; font-style: italic; }
strong      { font-weight: bold; }
em          { font-style: italic; }
pre         { margin-bottom: 18px; background: #eee; border:1px solid #ddd; padding:16px; }
code {
    background: #eee;
    border: 1px solid #ddd;
    color: #555;
    display: block;
    font: normal 1.1em "Lucida Sans Unicode",serif;
    margin-bottom: 12px;
    padding: 8px 10px;
    white-space: pre;
    overflow: auto;
    max-height: 300px;
}

/* Use this to create a horizontal ruler across a column. */
hr {
  background: #FFDF73;
  color: #FFDF73;
  clear: both;
  float: none;
  width: 100%;
  height: 2px;
  margin: 0 0 16px 0;
  border: none;
}


/* Tables
-------------------------------------------------------------- */

table   { margin-bottom: 16px; border-top:1px solid #ddd; border-left:1px solid #ddd; }
th,td   { height: 13px; padding:2px 4px; border-bottom:1px solid #ddd; border-right:1px solid #ddd; }
th      { font-weight:bold; }


/* Some default classes
-------------------------------------------------------------- */

p.small   { font-size: 10px; margin-bottom: 18px; }
p.large   { font-size: 14px; line-height:36px; }
p.quiet   { color: #666; }
.hide     { display: none; }


.caps {
  font-variant: small-caps;
  letter-spacing: 1px;
  text-transform: lowercase;
}

/* @end */

/* @group styles */

/* @group Header */

#header {
	padding-top: 1.8em;
	margin-bottom: 1.8em;
}
#site-name {
    line-height: 36px;
}
#site-name a {
    font-variant: small-caps;
    font-size: 3em;
    letter-spacing: 3px;
    text-decoration: none;
    color: #444;
}
#site-name a:visited {
    color: #444;
    text-decoration: none;
}
#site-name a strong {
    color: black;
}
#site-description {
	padding-top: 1.4em;
	padding-bottom: 1.4em;
}
#site-description h3 {
	font-size: 2em;
	margin: 0;
	font-weight: normal;
}
#site-description p#read-more {
	text-align: right;
	margin: 6px 0 0;
}
#site-description p#read-more a, #site-description p#read-more a:visited {
	font-size: 1.4em;
	color: #515151;
}
#site-description p#read-more a:hover {
	color: #919191;
}
#site-description {
	background-color: #4188D2;
	border-top: 2px solid #fff;
	color: #444;
}
/* @end */

/* @group Navigation */

ul.navigation, ul.navigation li {
  list-style: none;
}
ul.navigation li {
  display: inline;
  margin-right: 1.3em;
}

#primary {
	line-height: 72px;
	margin-bottom: -24px;
	text-align: right;
}
#primary li {
	padding-bottom: 5px;
}
#primary a {
	color: #444;
	text-decoration: none;
	font-size: 1.2em;
}
#primary li:hover {
	border-bottom: 6px solid #FFDF73;
}
#secondary {
	padding-top: 7px;
	background-color: #FFDF73;
}
#secondary ul {
    list-style: none;
	margin-bottom: 7px;
}
#secondary ul li {
    display: inline;
    list-style: none;
	margin-right: 0;
}
#secondary ul li a {
	color: #515151;
	text-decoration: none;
	padding: 8px 24px 8px 24px;
	margin-left: -4px;
}
#secondary ul li a.selected {
	background-color: #515151;
	color: #fff;
}
#secondary ul a:hover {
	background: #fff4d0;
}
/*
	xBreadcrumbs (Extended Breadcrumbs) jQuery Plugin
	ï¿½ 2009 ajaxBlender.com
	For any questions please visit www.ajaxblender.com
	or email us at support@ajaxblender.com
*/
.xbreadcrumbs {
	position: relative;
	z-index: 1000;
}
.xbreadcrumbs LI UL {
	position: absolute;
	float: left;
}
.xbreadcrumbs, .xbreadcrumbs LI, .xbreadcrumbs UL, .xbreadcrumbs UL LI {
	list-style: none;
	margin: 0;
	padding: 0;
}
.xbreadcrumbs { clear: both; }
.xbreadcrumbs, .xbreadcrumbs LI {
	float: left;
}
.xbreadcrumbs UL {
	display: none;
}

/*  Base style of xBreadcrumbs  */
/*  Top Level  */
.xbreadcrumbs {
	background: #FFDF73;
	width: 100%;
}
.xbreadcrumbs LI {
    border-right: none;
    padding: 5px 15px 5px 10px;
	height: 16px;
}
.xbreadcrumbs LI.current {
	background: none;
}
.xbreadcrumbs LI UL LI {
    background: none;
}
.xbreadcrumbs LI A {
	font-size: 11px;
	color: #515151;
	text-decoration: none;
    padding-right: 2em;
}
.xbreadcrumbs LI A.home {
    background: url( home.gif ) no-repeat left center;
    padding-left: 20px;
}
.xbreadcrumbs LI A:HOVER, .xbreadcrumbs LI.hover A {
	color: #000;
}
/*  Top Level - Current Page  */
.xbreadcrumbs LI.current A {
	color: #333333;
	font-weight: bold;
}
/*  Sub-level  */
.xbreadcrumbs LI UL {
	padding: 3px;
	background: #fff4d0;
	font-size: 11px;
	min-width: 180px;
    max-height: 500px;
    overflow: auto;
	top: 25px;
}
.xbreadcrumbs LI UL LI {
	float: left;
	width: 100%;
	border-right: none;
	height: auto;
}
.xbreadcrumbs LI UL LI A {
	text-decoration: none;
	color: #666666 !important;
	display: block;
	padding: 4px;
	border-bottom: 1px dotted #666666;
}
.xbreadcrumbs LI UL LI:last-child A {
	border-bottom: none;
}
.xbreadcrumbs LI UL LI A:HOVER {
    background: #fffbee;
}
body.advisories #nav-advisories,body.community #nav-community,body.blog #nav-blog,body.code #nav-code,body.about #nav-about,body.documentation #nav-documentation{border-bottom: 6px solid #FFDF73;}
/* @end */

/* @group Main */

#main {
	font-size: 1.2em;
	line-height: 1.5em;
	color: #1E250D;
}
#main h2 {
	font-size: 1.8em;
	font-weight: normal;
    border-bottom: 3px solid #c2b2d4;
    padding-top: 10px;
	padding-left: 0;
	padding-right: 0;
	margin-bottom: 6px;
}
#main h3 {
	font-size: 1.4em;
	font-weight: normal;
	border-bottom: 4px solid #f7f7f7;
	padding: 0 0 5px;
	margin-bottom: 0.4em;
}
#main h3 .caps {
	font-size: 1.3em;
}
#main .hfeed .hentry {
	list-style: none;
	list-style-type: none;
	margin-bottom: 2em;
	border-bottom: 4px solid #eee;
	padding-bottom: 1em;
	clear: both;
}
#main .hfeed .hentry:last-child {
	border-bottom: none;
}#main .hfeed .hentry .entry-title {
	border-bottom: none;
}
#main hr {
	color: #FFDF73;
	background-color: #FFDF73;
	border-color: #FFDF73;
}
#main p {
	text-align: left;
	padding-left: 0;
	padding-right: 0;
}
#main img {
	max-width: 740px;
}
#main ol {
	margin-left: 1.5em;
}
#main ul {
	margin-left: 1.2em;
	list-style: disc;
}
#main .intro {
	font-size: 1.2em;
	color: #515151;
	border-bottom: 3px solid #f8fbfd;
}
#main .get-started a {
	text-align: center;
	background-color: #8942D6;
	color: #fff;
	display: block;
	border-radius: 12px;
	-webkit-border-radius: 12px;
	-moz-border-radius: 12px;
	padding: 8px 6px;
	width: 10em;
	font-size: 1.4em;
	margin-left: auto;
	margin-right: auto;
	text-decoration: none;
}
#main .get-started a:hover {
	background-color: #9D69D6;
}
#main pre {
    max-height: 600px;
	overflow: auto;
}

/* @end */
/* @group Footer */

#footer {
	color: #666;
	font-size: 11px;
	border-top: 4px double #e7e7e7;
	margin-top: 2em;
	padding-top: 1.2em;
	text-align: center;
}
/*#footer a {
	color: #787878;
	text-decoration: none;
	border-bottom: 1px dotted #787878;
}
#footer a:hover {
	border-bottom: 1px solid #787878;
}*/

/* @end */

.update, .note, .notice, .alert {
margin: 10px 0 20px;
padding: 5px 20px 5px 20px;
clear: both;
}
.note {
	background: #e6ecf2;
	border-top: 2px solid #8996ad;
	border-bottom: 2px solid #8996ad;
}
.update, .notice {
	background: #92ED6B;
	border-top: 2px solid #2B8E00;
	border-bottom: 2px solid #2B8E00;
}
.alert {
	background: #ffbfbf;
	border-top: 2px solid #f33;
	border-bottom: 2px solid #f33;
}
.alert a {
	color:#f00;
}
.alert a:visited {
	color: #f33;
}

/* JavaDoc-Specific Styles */
.TableHeadingColor     { text-align: left; border-width: 0 }
.TableSubHeadingColor  { text-align: left; border-width: 0 }
.TableRowColor         { text-align: left; border-width: 0 }
.NavBarCell1    { text-align: left; border-width: 0 }
.NavBarCell1Rev { text-align: left; border-width: 0 }
.FrameItemFont { text-align: left; }

/* @end */



/**
 * Non-semantic helper classes: please define your styles before this section.
 */

/* For image replacement */
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }

/* Hide for both screenreaders and browsers:
   css-discuss.incutio.com/wiki/Screenreader_Visibility */
.hidden { display: none; visibility: hidden; }

/* Hide only visually, but have it available for screenreaders: by Jon Neal.
  www.webaim.org/techniques/css/invisiblecontent/  &  j.mp/visuallyhidden */
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: drupal.org/node/897638 */
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }

/* Hide visually and from screenreaders, but maintain layout */
.invisible { visibility: hidden; }

/* The Magnificent Clearfix: Updated to prevent margin-collapsing on child elements.
   j.mp/bestclearfix */
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }
/* Fix clearfix: blueprintcss.lighthouseapp.com/projects/15318/tickets/5-extra-margin-padding-bottom-of-page */
.clearfix { zoom: 1; }



/**
 * Media queries for responsive design.
 *
 * These follow after primary styles so they will successfully override.
 */

@media all and (orientation:portrait) {
  /* Style adjustments for portrait mode goes here */

}

@media all and (orientation:landscape) {
  /* Style adjustments for landscape mode goes here */

}

/* Grade-A Mobile Browsers (Opera Mobile, Mobile Safari, Android Chrome)
   consider this: www.cloudfour.com/css-media-query-for-mobile-is-fools-gold/ */
@media screen and (max-device-width: 480px) {


  /* Uncomment if you don't want iOS and WinMobile to mobile-optimize the text for you: j.mp/textsizeadjust */
  /* html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; } */
}


/**
 * Print styles.
 *
 * Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/
 */
@media print {
  * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
  -ms-filter: none !important; } /* Black prints faster: sanbeiji.com/archives/953 */
  a, a:visited { color: #444 !important; text-decoration: underline; }
  a[href]:after { content: " (" attr(href) ")"; }
  abbr[title]:after { content: " (" attr(title) ")"; }
  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  /* Don't show links for images, or javascript/internal links */
  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
  thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
  tr, img { page-break-inside: avoid; }
  @page { margin: 0.5cm; }
  p, h2, h3 { orphans: 3; widows: 3; }
  h2, h3{ page-break-after: avoid; }
}
