/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

img { border: 0px; }
.sf_logo { border: 0px; margin: -10px 0px 0px 4px; }
.w3c_logo { border: 0px; margin: -10px 0px 0px 10px; }

h1 { padding-left: 0.5em; }
#hr { visibility: hidden; }
#content h2 { margin-top: 0; }

#leftcol { display: none; }
#bodytd { padding: 0px; width: 100%; margin: 0px; }
#navcol { display: none; }
.warning { border: solid 3px #F00; background: #FDD; padding: 1em; }

.btn_analyze { background-color: lightgrey; border-radius: 5px; margin: 0px 30px 0px 0px; padding: 0px 15px 0px 15px; font-size: 1.2em; cursor: pointer; }
.tbl_analyze table { border: 1px solid black; border-collapse: collapse; border-spacing: 2px; width: 100%; }
.tbl_analyze th, td { border: 1px solid black; }

.overall_optionset { min-width: 880px; max-width: 1400px; }
.optionset { margin: 0 0 0 0; float: left; width: 77%; min-width: 680px; max-width: 1200px; }
.optionset a { margin: 0; padding: .1em 0 .25em 3%; color: #333; }
.optionset p { margin: 0; padding: .1em 0 .25em 0; color: #333; }
.optionset p a { margin: 0; padding: 0; color: #333; }
#bodycol .optionset p a:hover, #bodycol.optionset .button:hover p a { color: #000; }
.optionset .button { border-radius: 10px; margin-top: 8px; padding: 0px 0px 15px 0px; }
.optionset .button h2 { margin-left: 3%; padding: 2% 0 0 0; border: none; font-weight: bold; text-decoration: none; }
.optionset .button h2 a { display: block; margin-left: 3%; padding: 2% 0 0 0; font-weight: bold; text-decoration: none; }
.optionset .button h3 { margin: 0; padding: 0; border: none; font-style: normal; cursor: pointer; }
.optionset .button h3 a { display: inline; margin-left: 3%; padding: 2% 0 0 0; font-weight: bold; text-decoration: none; font-style: normal; cursor: pointer; }
.optionset .button h3 p a { display: inline; margin-left: 3%; padding: 2% 0 0 0; font-weight: bold; text-decoration: none; font-style: normal; cursor: pointer; }
/* .optionset .button p { padding: 0; font-size: .9em; padding-bottom: 3%; cursor: pointer; } */
.optionset .button p { display: block; margin-left: 3%; padding: .1em 0 .25em 0; width: 85%; font-size: .9em; text-decoration: none; }
.optionset .button p a { display: block; margin-left: 3%; padding: .1em 0 .25em 0; text-decoration: none; cursor: pointer; }
.optionset .first { margin-top: 0; }
.optionset p.promotional { margin-top: 25px; }

.green-sel {
 background: #E4FDAE; /* Old browsers */
 background: -moz-linear-gradient(top, #e4fdae 1%, #b8de66 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#e4fdae), color-stop(100%,#b8de66)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #e4fdae 1%,#b8de66 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top,#e4fdae 1%,#b8de66 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #e4fdae 1%,#b8de66 100%); /* IE10+ */
 background: linear-gradient(to bottom, #e4fdae 1%,#b8de66 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e4fdae', endColorstr='#b8de66',GradientType=0 ); /* IE6-9 */
 position: relative; }

.green-sel:hover {
 background: #DBFD93; /* Old browsers */
 background: -moz-linear-gradient(top, #dbfd93 1%, #a0d333 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#dbfd93), color-stop(100%,#a0d333)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #dbfd93 1%,#a0d333 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #dbfd93 1%,#a0d333 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #dbfd93 1%,#a0d333 100%); /* IE10+ */
 background: linear-gradient(to bottom, #dbfd93 1%,#a0d333 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dbfd93', endColorstr='#a0d333',GradientType=0 ); /* IE6-9 */
 position: relative; }

/* .green-sel h2 { color: #718D36; cursor: default; } */
.green-sel h2 { margin: 0; border: none; font-weight: bold; color: #718D36; text-decoration: none; cursor: default; }
.green-sel h2 a { color: #718D36; cursor: default; }
.green-sel h3 a { color: #718D36; }
.green-sel p { cursor: default; }
.green-sel p a { cursor: default; }
.green-sel:hover h2 a, #bodycol .green-sel h2 a:hover { color: #546828; cursor: default; }
.green-sel:hover h3 a, #bodycol .green-sel h3 a:hover { color: #546828; }
.green-sel:hover p, #bodycol .green-sel p:hover { cursor: default; }
.green-sel:hover p a, #bodycol .green-sel p a:hover { cursor: default; }
.green-sel form { margin: 0 0 20px 3%; }
.green-sel .sel-os { background: transparent; border: 2px solid #718D36; width: 220px; height: 30px; padding: 2px; }
.green-sel .sel-language { background: transparent; border: 2px solid #718D36; width: 260px; height: 30px; padding: 2px; }
.green-sel .sel-version { background: transparent; border: 2px solid #718D36; width: 135px; height: 30px; padding: 2px; }
.green-sel .btn_dl h3 a { background: #E9FEBE; display: inline-block; margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border: 2px solid #546828; border-radius: 5px; color: #546828; text-decoration: none; font-style: normal; }
.green-sel .btn_dl h3 a:hover { background: #546828; display: inline-block; margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border: 2px solid #E9FEBE; border-radius: 5px; color: #E9FEBE; text-decoration: none; font-style: normal; }
/*
.green-sel .btn_hint_text h3 a { background: #E9FEBE; display: inline-block; margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border: 2px solid #546828; border-radius: 5px; color: #546828; text-decoration: none; font-style: normal; }
.green-sel .btn_hint_text h3 a:hover { background: #546828; display: inline-block; margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border: 2px solid #E9FEBE; border-radius: 5px; color: #E9FEBE; text-decoration: none; font-style: normal; }
*/
.green-sel .btn_hint_text h3 a { background: #E9FEBE; display: inline-block; margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border: 2px solid #D36812; border-radius: 5px; color: #D36812; text-decoration: none; font-style: normal; }
.green-sel .btn_hint_text h3 a:hover { background: #546828; display: inline-block; margin: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border: 2px solid #FFE2B5; border-radius: 5px; color: #FFE2B5; text-decoration: none; font-style: normal; }
.sub-green-sel { background: #E9FEBE; border: 1px solid #C3E480; border-radius: 10px; font-size: .8em; padding: 5px 5px 5px 0px; }
.sub-green-sel p { padding: .1em 3%; width: 100%; }
.sub-green-sel_error { background: #FECBCB; border: 1px solid #C00000; border-radius: 10px; font-size: .8em; padding: 5px 5px 5px 0px; }

.green-sel-icon {
  background: url(cachedimages/button-green-top.png) no-repeat right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 100px;
}

.green-sel-icon:hover {
  background: url(cachedimages/button-green-bottom.png) no-repeat right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 100px;
}

.lightblue {
 background: #C3EBFD; /* Old browsers */
 background: -moz-linear-gradient(top, #c3ebfd 1%, #8cc9e6 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#c3ebfd), color-stop(100%,#8cc9e6)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #c3ebfd 1%,#8cc9e6 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #c3ebfd 1%,#8cc9e6 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #c3ebfd 1%,#8cc9e6 100%); /* IE10+ */
 background: linear-gradient(to bottom, #c3ebfd 1%,#8cc9e6 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c3ebfd', endColorstr='#8cc9e6',GradientType=0 ); /* IE6-9 */
 position: relative; }

.lightblue:hover {
 background: #ADE4FD; /* Old browsers */
 background: -moz-linear-gradient(top, #ade4fd 1%, #66b8de 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ade4fd), color-stop(100%,#66b8de)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #ade4fd 1%,#66b8de 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #ade4fd 1%,#66b8de 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #ade4fd 1%,#66b8de 100%); /* IE10+ */
 background: linear-gradient(to bottom, #ade4fd 1%,#66b8de 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ade4fd', endColorstr='#66b8de',GradientType=0 ); /* IE6-9 */
 position: relative; }

.lightblue h2 { margin: 0; border: none; font-weight: bold; color: #2D72CE; text-decoration: none; cursor: default; }
.lightblue h2 a { color: #2D72CE; }
.lightblue a { margin: 0; padding: 0px 15px 0 5px; font-size: .9em; color: #333; text-decoration: underline; cursor: pointer; }
.lightblue p { margin-left: 0; cursor: default; }
.lightblue img { text-decoration: none; }
.lightblue span { margin-left: -2px; cursor: pointer; }
.lightblue:hover h2 a, #bodycol .lightblue h2 a:hover { color: #21549A; }
.lightblue .icon_box { margin-left: 3%; padding-bottom: 1%; }
.sub-lightblue { background: #E1E1FF; border-top: 1px solid #D1D1FF; border-bottom: 1px solid #D1D1FF; border-radius: 10px; font-size: .8em; }
.sub-lightblue p { padding: .1em 3%; width: 100%; }

.lightblue-icon {
  background: url(cachedimages/button-lightblue-top.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 100px;
}

.lightblue-icon:hover {
  background: url(cachedimages/button-lightblue-bottom.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 100px;
}

.blue {
 background: #DDECFE; /* Old browsers */
 background: -moz-linear-gradient(top, #ddecfe 1%, #bfd5f1 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ddecfe), color-stop(100%,#bfd5f1)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #ddecfe 1%,#bfd5f1 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #ddecfe 1%,#bfd5f1 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #ddecfe 1%,#bfd5f1 100%); /* IE10+ */
 background: linear-gradient(to bottom, #ddecfe 1%,#bfd5f1 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ddecfe', endColorstr='#bfd5f1',GradientType=0 ); /* IE6-9 */
 position: relative; }

.blue:hover {
 background: #C7DFFE; /* Old browsers */
 background: -moz-linear-gradient(top, #c7dffe 1%, #96b9e8 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#c7dffe), color-stop(100%,#96b9e8)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #c7dffe 1%,#96b9e8 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #c7dffe 1%,#96b9e8 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #c7dffe 1%,#96b9e8 100%); /* IE10+ */
 background: linear-gradient(to bottom, #c7dffe 1%,#96b9e8 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#c7dffe', endColorstr='#96b9e8',GradientType=0 ); /* IE6-9 */
 position: relative; }

.blue h2 { margin: 0; border: none; font-weight: bold; color: #2D72CE; text-decoration: none; cursor: pointer; }
.blue h2 a { color: #2D72CE; }
.blue:hover h2 a, #bodycol .blue h2 a:hover { color: #21549A; }
.sub-blue { background: #E1E1FF; border-top: 1px solid #D1D1FF; border-bottom: 1px solid #D1D1FF; border-radius: 10px; font-size: .8em; }
.sub-blue p { padding: .1em 3%; width: 100%; }

.blue-icon {
  background: url(cachedimages/button-blue-ext-top.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 120px;
}

.blue-icon:hover {
  background: url(cachedimages/button-blue-ext-bottom.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 120px;
}

.yellow {
 background: #FCFFB6; /* Old browsers */
 background: -moz-linear-gradient(top, #fcffb6 1%, #fbd34a 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#fcffb6), color-stop(100%,#fbd34a)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #fcffb6 1%,#fbd34a 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #fcffb6 1%,#fbd34a 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #fcffb6 1%,#fbd34a 100%); /* IE10+ */
 background: linear-gradient(to bottom, #fcffb6 1%,#fbd34a 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcffb6', endColorstr='#fbd34a',GradientType=0 ); /* IE6-9 */
 position: relative; }

.yellow:hover {
 background: #FBFFA4; /* Old browsers */
 background: -moz-linear-gradient(top, #fbffa4 1%, #fac81d 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#fbffa4), color-stop(100%,#fac81d)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #fbffa4 1%,#fac81d 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #fbffa4 1%,#fac81d 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #fbffa4 1%,#fac81d 100%); /* IE10+ */
 background: linear-gradient(to bottom, #fbffa4 1%,#fac81d 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd18a', endColorstr='#fac81d',GradientType=0 ); /* IE6-9 */
 position: relative; }

/*
.yellow { background: url(/cachedimages/button-yellow.png) #FFF379 right top no-repeat; }
.yellow:hover { background: url(/cachedimages/button-yellow.png) #FFF24F right -200px no-repeat; }
*/
.yellow h2 { margin: 0; border: none; font-weight: bold; color: #E09C09; text-decoration: none; cursor: pointer; }
.yellow h2 a { color: #E09C09; }
.yellow:hover h2 a, #bodycol .yellow h2 a:hover { color: #C80; }
.sub-yellow { background: #FFFEAF; border: 1px solid #FBD34E; border-radius: 10px; font-size: .8em; padding: 5px 5px 5px 0px; }
.sub-yellow p { padding: .1em 3%; width: 100%; }

.yellow-icon {
  background: url(cachedimages/button-yellow-top.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 120px;
}

.yellow-icon:hover {
  background: url(cachedimages/button-yellow-bottom.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 120px;
}

.orange {
 background: #FFE3B9; /* Old browsers */
 background: -moz-linear-gradient(top, #ffe3b9 1%, #ffbe76 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ffe3b9), color-stop(100%,#ffbe76)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #ffe3b9 1%,#ffbe76 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #ffe3b9 1%,#ffbe76 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #ffe3b9 1%,#ffbe76 100%); /* IE10+ */
 background: linear-gradient(to bottom, #ffe3b9 1%,#ffbe76 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ddecfe', endColorstr='#ffbe76',GradientType=0 ); /* IE6-9 */
 position: relative; }

.orange:hover {
 background: #FFD18A; /* Old browsers */
 background: -moz-linear-gradient(top, #ffd18a 1%, #ff921b 100%); /* FF3.6+ */
 background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#ffd18a), color-stop(100%,#ff921b)); /* Chrome,Safari4+ */
 background: -webkit-linear-gradient(top, #ffd18a 1%,#ff921b 100%); /* Chrome10+,Safari5.1+ */
 background: -o-linear-gradient(top, #ffd18a 1%,#ff921b 100%); /* Opera 11.10+ */
 background: -ms-linear-gradient(top, #ffd18a 1%,#ff921b 100%); /* IE10+ */
 background: linear-gradient(to bottom, #ffd18a 1%,#ff921b 100%); /* W3C */
 background: filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd18a', endColorstr='#ff921b',GradientType=0 ); /* IE6-9 */
 position: relative; }

.orange h2 { margin: 0; border: none; font-weight: bold; color: #D36812; text-decoration: none; cursor: pointer; }
.orange h2 a { color: #D36812; cursor: default; }
.sub-orange { background: #FFE2B5; border: 1px solid #FFB15E; border-radius: 10px; font-size: .8em; padding: 5px 5px 5px 0px; }
.sub-orange p { padding: .1em 3%; width: 100%; }

.orange-icon {
  background: url(cachedimages/button-orange-top.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 120px;
}

.orange-icon:hover {
  background: url(cachedimages/button-orange-bottom.png) no-repeat transparent right top;
  display: block;
  height: 100px;
  position: absolute;
  right: 11px;
  width: 120px;
}

.additionalinformation { float: right; width: 21%; margin-top: -11px; white-space: nowrap; clear: none; }
.additionalinformation h2 { border-bottom: 1px solid #CCC; margin-bottom: 5px; margin-top: 0px; }
.additionalinformation h3 { margin-left: 9px; margin-bottom: 5px; font-style: normal; }
.additionalinformation li { margin-left: 5px; font-size: 12px; }
.additionalinformation a { color: #107EC0; text-decoration: underline; }
.additionalinformation a:hover { background-color: #E6EBED; }

.additionalinformation #nativelang { background-image: url(cachedimages/nativelang.gif); background-repeat: no-repeat; background-position: top left; }

#downloadextendedtext p { background: none; }
#downloadextendedtext ul { background: none; font-weight: bold; list-style: none; margin: 0px; padding: 0px; font-size: 2em; width: 100%; float: left; color: #333; padding-left: 20px; }
#downloadextendedtext ul a { color: #333; text-decoration: none; background: none; }
#downloadextendedtext ul a:hover { color: #666;text-decoration: none; }
#downloadextendedtext ul li { float: left; margin: 0px; padding: 4px; margin-right: .5em; border: 1px #D7EFA4 solid; margin-bottom: .5em; width: 7em; height: 1.7em; }
#downloadextendedtext ul li:hover { background: #D7EFA4; }
#downloadextendedtext ul li ul { font-weight: normal; width: auto; margin: 0px; padding: 0px; font-size: .4em; color: #555; }
#downloadextendedtext ul.nonqabuilds { font-size: 1.4em; }
#downloadextendedtext ul.nonqabuilds li { width: auto; }
#downloadextendedtext ul.nonqabuilds li ul { font-size: .5em; }

/* .4em is a little bit too small for nonqa */
/*Overrides some of the special settings for the parent li*/
#downloadextendedtext ul li ul li { border: 0px none; margin: 0px; padding: 0px; width: auto; margin-right: .4em; }
#downloadextendedtext ul li ul li:hover { background: none; }

.largetable table tr.even td { background: #EEEEEE; }
.largetable table tr.odd td  { background: none; }
.builds { background-position: left; background-repeat: no-repeat; padding: 2px 0 2px 18px; display: block; }

