/*
 * 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.
 */


/* -------- DIRECT STYLES FOR TAGS-----------*/
body {
    color: #333333; padding:0px; margin:0px;
    font-size: 0.75em;
    font-family: Arial, Helvetica, Verdana;
}
body.blue-bg {
    background-color:#E2EDF9;
    background-image:url('/images_www/v6/body-bg.png');background-repeat:repeat-x;
}
h1 {
    font-size: 1.6em;color: #D20106;font-weight : normal;padding:0px;margin:0px 0px 10px 0px;
    text-align:left;
}

h1.light {
    padding:0px;margin:0px 0px 10px 0px;
    text-align:left;
    color:#868585;
}
h1 A:link:hover, h1 A:visited:hover  {
    font-weight:bold;
}

h2 {
    font-size: 1.45em;color: #EE6B00;  font-weight : normal; padding:5px 0px 2px 0px;margin:0px 0px 5px 0px;
    border-bottom:1px solid #D1d1d1; text-align:left; line-height:105% ;
}

h2 tt { color: #EE6B00; }
h1 tt { color: #D20106; }
h3 tt { color: #2D3F8E; }

h3 {
    font-size: 1.3em;color: #2D3F8E; font-weight : normal; padding:10px 0px 3px 0px;margin:0px;
    text-align:left;
}
h4 {
    font-size: 1.15em;color: #3D3D3D; font-weight : bold; padding:10px 0px 3px 0px;margin:0px; text-align:left;
}
h5 {
    font-size: 1.15em;color: #1E2A60; font-weight : bold; padding:10px 0px 3px 0px;margin:0px;
    color: #5E5966; text-align:left;
}

A:link, A:visited {
    color: #23569d; font-weight : normal; text-decoration: none;
}

A:hover  {
    color: #23569d; font-weight : normal; text-decoration : underline;
}

.nav A:link {
    color: #23569d;
}

A.tutorial-link {
    background-color: #e6f6fe;
    background-image:url('/images_www/v6/tutorial.gif');
    background-repeat:no-repeat;
    background-position:left;
    padding:3px 7px 7px 30px;
    vertical-align:middle;
}
A.demo-link {
    background-color: #e6f6fe;
    background-image:url('/images_www/v6/demo.gif');
    background-repeat:no-repeat;
    background-position:left;
    padding:3px 7px 7px 30px;
    vertical-align:middle;
}

p {
    margin:0px 0px 0px 0px;
    padding:0px 0px 10px 0px;
}

pre {
    background-color:#FFF8E4;
    padding:10px;
    font-size: 1.3em;
    _font-size: 1.2em;
}
pre,samp,code,tt {
    font-family: "Courier New", monospace;
    font-size:1.1em;
    color:black;
}

ol li {
    margin-bottom:9px;margin-top:0px;
    list-style: decimal;
}

ul li {
    margin-bottom:10px;margin-top:0px;
    list-style: disc;
}
ul.bug_urls li, .bug_urls { list-style-type: none; }
ul {
    padding-top:0px;
    margin: 0px;
    _margin-left: 15px;
}
ul li ul {margin-top:8px;}
li p { margin:0px;padding:0px 0px 3px 0px;}
/* TOC list styles */
ul.toc {margin-bottom:15px;}
ul.toc > ul {margin-bottom:0px;}
ul.toc li {padding-top:0px; padding-bottom:0px; margin:0px 0px 4px 15px}
#nav li {list-style: none;}
img.box {
    /*border: 1px solid #CCCCCC;} */
    border: 1px solid #BBBBBB;}
img.left {
    margin-left:  0px;
    margin-right: 	10px;
    margin-bottom:  10px;
    float:left;}
img.right {
    margin-right: 0px;
    margin-left:  	10px;
    margin-bottom:  10px;
    float:right; }
.margin-around {margin: 10px;}
/* --------------------------- */

/* ------- SHARED STYLE FOR BOTH FLEX AND FIXED PAGES  -----------*/
/* top level div, keeps page centered. both fix and flex*/
#center-container {
    text-align:center;
}

/* layer holding terms of use text and link */
#tof {
    font-size:0.9em;
    right:6px;
    position:relative;
    text-align: right;
}
/* navigation breadcrumbs for both flex and fix pages */
#navig-breadcrumbs {
    text-align:left;  
    padding:5px 5px 5px 15px;
}
#download-box {
    height:166px;_height:170px;
}
#print {
    float:right;
    margin-top:6px;
    z-index:1000;
}

/* layer with login box*/
#loginbox {
    padding:5px 5px 5px 13px;
}
#f-page-news h2 {
    font-weight:bold;border: 0px;
}
#f-partner {
    _margin-top:10px;
    padding:10px 10px 10px 10px;
}
.product-list-box {
    margin:15px 0px 0px 545px;
}

#products-navig {
    position: absolute;
    width:166px;
    margin:15px 0px 0px 14px;
    _margin:15px 0px 0px 9px;
}
#products-platform-navig {
    float:left;
    width:166px;
    margin:15px 0px 0px 14px;
    _margin:15px 0px 0px 9px;
}

#products-navig-table {
    border-collapse: collapse;
    width:166px;
}
#products-navig-table td {
    border-bottom:1px solid white;
    padding:8px 4px 10px 4px;
}
.products-navig-submenu {
    padding:5px 0px 0px 10px;
    _padding:5px 0px 0px 13px;
}
.products-navig-submenu a {
    display: block;
    margin-bottom: 10px;
    line-height: 120%;
}
#products-platform-navig  h1 {
    margin-bottom:0px;
    color: #333333;
}

#products-text { margin-left:180px;min-height:950px;}
#companion-projects {
    text-align:center;
    width:910px;
    margin-left:auto;
    margin-right:auto;
}
#companion-projects a:hover, #tof a:hover, #ftr a:hover { background-color:transparent;}
.companions-left {padding-left:7px;}
.companions-right {padding-right:5px;}
.rcol {
    width:249px
}
.rcol ul { margin-left:0px;padding-left:15px;margin-top:10px; }
#heading-stripe {
    background-image: url('/images_www/v7/design/banner_overwiew.png');
    background-repeat:no-repeat;
    height:57px;
    border-left: 1px solid #A7B0B7;
    border-right: 1px solid #A7B0B7;
}
#heading-stripe-platform {
    background-image: url('/images_www/v6/products-platform-top-bg.gif');
    background-repeat:no-repeat;
    height:57px;
}
#heading-stripe div, #heading-stripe-platform div {
    float:right;
    padding:20px 15px 0px 0px;
}
#heading-stripe h1 {
    font-size:1.8em;
    color: white;
    padding:25px 0px 0px 15px;
}

.trail-box {margin:10px 10px 10px 10px;}
.trail-box-header {
    background-color: #c7e3e8;
    min-height:21px;
}
.trail-box-header h1 {
    color:#0e1b55;
    margin:0px;
    padding:2px 0px 0px 0px;
    _padding:7px 0px 0px 0px;
    font-size:1.3em;
}
.trail-box-content {
    padding: 10px 10px 0px 10px;
    border-right:1px solid #c7e3e8;
    border-left:1px solid #c7e3e8;
    border-bottom:1px solid white;
}
.trail-box-content ul {
    margin-bottom:0px;
    padding-bottom:0px;
}
.trail-box-content li.line {
    border-bottom:1px dashed #adadad;
    padding-bottom:10px;
    margin-bottom:10px;
}
.trail-box-bottom {
    background-image:url('/images_www/v6/trails/trails-box-bm.png');
    background-repeat:repeat-x;
    height:6px;
    margin:0px;
    padding:0px;
    line-height:1%;
}
/* ------------------------- */

/* --------- FIXED WIDTH PAGE STYLE ----------- */

#fixed-top-contentbox h1 {
    font-size:1.8em;
    color:#0e1b55;
    padding:25px 0px 0px 15px;
}
#top-box-bg img {
    border:0px;
}

h1#platform-header {
    padding:8px 0 0 15px;
    margin-bottom:3px;
}
p#platform-subheader {
    padding-left:15px;
    color:#ff8e00;
    font-size:12px;
}
/* ----------------------------- */


/* ----------- Docs & Suport spec styles -------------*/
/* D&S pages are wrapped by this, can set extra style here */
#doc {
    line-height:165%;
    padding-left:20px;
    _width:98%;
}
#doc h2 {
    font-size: 1.45em;color: #EE6B00;  font-weight : normal; padding:5px 0px 2px 0px;margin:10px 0px 8px 0px;
    border-bottom:1px solid #D1d1d1; text-align:left;
}
#doc ul  {margin-bottom:15px;}
#doc table {margin-bottom:15px;}
#doc table.colapse td { padding:3px; }

#sample-project {
    float:right;
    margin:5px 0px 5px 5px;
    border: 1px dotted silver;
    background-color:#FFF4EE;
}
/* D&S feedback box */
.feedback-box {
    float: right;
    padding:5px;
    margin:5px;
    background-color: #F2F7FB;
    border: 1px black dotted;
    font-style:italic;
}

.alert {
    background-image:url('images_www/v6/alert.gif');
    background-repeat:no-repeat;
    background-position:left top;
    padding:2px 0px 8px 30px;
    vertical-align:middle;
}

.notes {
    background-image:url('images_www/v6/notes_small.gif');
    background-repeat:no-repeat;
    background-position:left top;
    padding:2px 0px 8px 32px;
}

.tips {
    background-image:url('images_www/v6/tips_small.gif');
    background-repeat:no-repeat;
    background-position:left top;
    padding:1px 0px 8px 34px;
}

.new-badge {
    background-image:url('images_www/v6/new_small.png');
    background-repeat:no-repeat;
    background-position:left;
    padding:5px 0px 2px 34px;
}

.new-bullet {
    list-style-image: url('images_www/v6/new_small.png');
    background-repeat:no-repeat;
    background-position:left;
    margin:-5px 0 10px;
}

.circle-bullet { list-style: circle }

#bookmarks {
    float:right;
    margin:10px 10px 10px 0px;
    padding:5px;
    border:1px dotted gray;
}

.stamp {
    float:right;
    margin:0px 0px 10px 10px;
}

/* ----------- VARIOUS DESIGN CLASSES-------------- */
small {
    font-size:0.85em;
}
a img {border:none;background-color:transparent;}
/* backgrounds */
.bg-bege {
    background-color: #FFFCF4;
}
.bg-face {
    background-color:#FFF4EE;
}
.bg-silver {
    background-color:#EFEFEF;
}
.bg-silver2 {
    background-color:#F2F2F2;
}
.bg-sky {
    background-color:#F4F7FF;
}
.bg-white {
    background-color:white;
}

.innerpadding {
    padding:5px;
}

/* floating */
.float-left {
    float:left;
}
.float-right {
    float:right;
}

/* borders */
.b-all {border:1px solid #adadad;}
.b-left {
    border-left:1px solid #ADADAD;
}
.b-right {
    border-right:1px solid #ADADAD;
}
.b-top {
    border-top:1px solid #ADADAD;
}
.b-bottom {
    border-bottom:1px solid #ADADAD;
}
.b-top-dashed {
    border-top:1px dashed #ADADAD;
}
.b-left-dashed {
    border-left:1px dashed #ADADAD;
}
.b-right-dashed {
    border-right:1px dashed #ADADAD;
}
.b-bottom-dashed {
    border-bottom:1px dashed #ADADAD;
}
.b-green-left {
    border-left:1px solid #69b5c2;
}
.b-green-right {
    border-right:1px solid #69b5c2;
}
.b-none {
    border:none;
}

/* text cells padding */
.f-page-cell {
    padding:15px;
    vertical-align:top;
    line-height:140%;
}
.f-page-auto-cell {
    padding:15px;
    vertical-align:top;
    line-height:140%;
    _width:96%;
}
.cell {padding:5px;}

/* tables  styles */
table {
    color: #333333; font-size:1em;
    font-family: Arial, Helvetica, Verdana;
}
table.t-packs td {
    padding-bottom:10px;
}
.colapse {
    border-collapse:collapse;
}

.xf-page-table {
    width:767px;
    _width:700px;
}
.f-page-table-2col {
 background: white;
    
}
.full-width {
    width:100%;
}

.half-width {
    width:50%;
}
.f-page-rcol {
    width:307px;_width:306px;
}


/* font styles */
.font-light {
    color: #AEADAD;
}
.font-13 {
    font-size:1.1em;
}
.font-14 {
    font-size:1.2em;
}
.font-15 {
    font-size:1.3em;
}
.font-16 {
    font-size:1.4em;
}
.font-10 {
    font-size:0.8em;
}
.font-11 {
    font-size:0.9em;
}
.font-9 {
    font-size:0.75em;
}
.bold {
    font-weight:bold;
}
.u {
    text-decoration:underline;
}

/* text color styles */
.orange {
    color: #EE6B00;
}
.blue {
    color: #1E2A60;
}
.green {
    color: #6d9633;
}
b {
    font-size:1em;
}
.normal {
    font-weight:normal;
}

/* vertical and horizontal alignments */
.valign-top {
    vertical-align:top;
}
.valign-center {
    vertical-align:middle;
}
.valign-bottom {
    vertical-align:bottom;
}
.align-justify {
    text-align: justify;
}
.align-right {
    text-align: right;
}
.align-center {
    text-align: center;
}
.align-left {
    text-align:left;
}

/* forms styles */
form {
    padding:0px;margin:0px;
}
input.field {
    border:1px solid #1E2A60;
}
.clear {
    clear:both;
}
select {
    border:1px solid #1E2A60;
}
input.button {
    border:1px solid #1E2A60;
    background-color:#FFF8E4;
}
input.toplogininp {
    width:120px;
}

/* others */
/* example code will have scrollbars if too big*/
.examplecode  {
    background-color:#FFF8E4;
    overflow:auto;
    width:680px;
    white-space: pre;
}

em.Code {
    background-color:#FFF8E4;
    overflow:auto;
    width:500px;
}

.img-left {
    margin:5px 10px 5px 0px;
    float:left;
}
.img-right {
    margin:5px 0px 5px 10px;
    float:right;
}

.news-image {
    float:right;
    margin:3px 0px 5px 12px;
}
/*------------- LEGACY STYLES -----------------*/

/*too many records*/
.leftmenug {
    margin-top:8px;
    background-image:url("/images_www/v4/menu_mark_gt.gif");
    background-repeat:no-repeat;
    font-weight:bold;
    padding-bottom:10px;
}

/* too many records, mainly in javascript... list is in _+leftmenuitem*/
.leftmenuitem {
    margin-left:15px;
    padding:0px;
    border:0px;
}


/* too many records, mainly in javascript... list is in _+leftsubmenuitem*/
.leftsubmenuitem {
    margin-left:15px;
    padding:0px;
    border:0px;
}

/*commenter above*/
.leftmenuitem SELECT {
    font-size:10px;
    font-weight:bold;
    font-family: Arial, Helvetica, Verdana;
    color:#3F3F3F;
    width:140px;
}

/*tooooo many .... in _+rrrarticle*/
.rrrarticle {
    margin-top:5px;
    background-image:url("/images_www/v4/tl.gif");
    background-repeat:no-repeat;
    background-position: 0px 2px;
}
/*toooo many .... _+rarticle */
.rarticle {
    margin-top:8px;
    background-image:url("/images_www/v4/arr_r_trans.gif");
    background-repeat:no-repeat;
}
/*toooo many ... _+rarticletitle*/
.rarticletitle {
    margin-left:15px;
    font-weight:bold;
}
/*too many ... _+rarticletext*/
.rarticletext {
    margin-left:15px;
    margin-right:10px;
}

/*tooo many ... _+ml15 */
.ml15 {
    margin-left:15px;
}
/*too many ... _+threelinesarticle*/
.threelinesarticle {
    background-image:url("/images_www/v4/tl.gif");
    background-repeat:no-repeat;
    background-position: 0px 4px;
    padding-left:15px;
    font-weight:bold;
}


/*tooo many ... in _+articledate*/
.articledate {
    color: #4E4E4E;
    margin-bottom:7px;
    font-style: italic;
}
/* tooo many ... in _+articletitle*/
.articletitle {
    margin-left:15px;
    font-weight:bold;
    font-size:12px;
}
/*too many ... in _+articleperex*/
.articleperex {
    margin-left:15px;
}

/* too many */
.articleborder {
    margin-left:15px;
    margin-top:9px;
    background-image:url("/images_www/v4/bg_art_dot.gif");
    background-repeat:repeat-x;
    height:10px;
}
/* too many */
.articleall {
    margin-top:9px;
    text-align:right;
    font-weight:bold;
}
/* not that many ~20-30 records */
#articleall {
    margin-top:9px;
    text-align:right;
    font-weight:bold;
}
/*too many*/
.tbltd1 {
    background-color:#F2F2F2;
    padding:3px;
}
/* too many */
.tbltd0 {
    background-color:#FAFAFA;
    padding:3px;
}

/*too many*/
.tblheader {
    background-color:#CAD7F0;
    color:#000000;
    font-weight:bold;
    padding:3px;
}
/* a few times... need to correct or notify owners */
.actionbox {
    background-color: #F2F7FB;
    border: 1px solid gray;
    padding: 10px;
    margin: 10px;
}

/*too many*/
.indent{
    padding-left:20px;
}

/** -------- DROPDOWN LANGUAGE MENU ------------- */
/* language menu style */
div.lang-dropdown {
    float:right;
    margin-right:3px;
    _margin-right:1px;
    text-align:right;
}
div.lang-dropdown ul {
    margin: 0;
    padding: 0;
    list-style: none;
    text-align:left;
}
div.lang-dropdown ul li {
    position: relative;
}
ul.submenu {
    position: absolute;
    left: -1px;
    display: none;
    background-color:white;
    border:1px solid gray;
    width:140px;
    z-index:99999;
}

/* Styles for Menu Items */
div.lang-dropdown ul li a {
    display: block;
    text-decoration: none;
    border-bottom: 0;
}

/* Fix IE. Hide from IE Mac \*/
* _div.lang-dropdown ul li { float: left; height: 1%; }
* _div.lang-dropdown ul li a { height: 1%; }
/* End */
div.lang-dropdown ul li ul li {height:20px;margin:0px;padding:0px;}
div.lang-dropdown ul li ul li a:hover { color: #E2144A; background: #EEEEEE; } /* Hover Styles */

div.lang-dropdown ul li ul li a { padding: 2px 3px 0px 10px; text-decoration: underline;} /* Sub Menu Styles */

li:hover ul, li.over ul { display: block; } /* The magic */

/* ---------------------- */

/* --------- SEARCH BOX  --------------*/
#search {
    float:right;
    margin-right:3px;
    padding-top:20px;
    margin-left:10px;
}
#search input.text {
    width:120px;
    height:18px;
    font-size:11px;
    border:1px solid gray;
}
#search table {
    display:inline;
}

/* mouse-over ruled table styles------------------------------------ */
table.ruled {
    border: 1px solid gray;
    border-collapse: collapse;
}

table.ruled td {
    font: 11px  Arial, Helvetica, Verdana;
    border: 1px solid gray;
    padding: 2px;
}

table.ruled tr:hover td {
    background-color: #cccccc;
}

.ok {
    background-color: #00ff00;
}

.warn {
    background-color: yellow;
}

.problem {
    background-color: red;
}

.hidden {
    display: none;
}
.errmsg {
    background-color:white;
    width:50%;
    padding:5px;
    margin-bottom:5px;
    border:1px dotted red;
}
.errmsg li {
    margin:0px;
    padding:0px;
    color:red;
}
/* =========================== nb 7.3 design refresh ======================= */
#wrapper-fixed {
    width:911px;
    margin:7px auto 10px auto;
    text-align: center;    
}
#wrapper-flex {
    margin:10px 50px 10px 50px;
}
#wrapper-kenai {
    width:1005px;
    margin:7px auto 10px auto;
    text-align: center;
}
#hdr, #ftr, #top, #middle, #news-sec {
    text-align: left;
}

#navtabs {
    height:43px;
    background-color: #021a72;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;    
    color: white;
    padding:0px;
    margin:0px;
    text-align: center;
    font-size: 1.1em;
}
#navtabs ul {
    border-top: 1px solid #021a72;
    border-bottom: 1px solid #021a72;   
    margin:0px 5px 0px 5px;
}
#navtabs li.first {
    border-right: 1px solid #84bff8;
    border-left: 1px solid #84bff8;
    margin-bottom:0px 
}
#navtabs li.current {
    background: #5e8fc7; /* Old browsers */
    background: -moz-linear-gradient(top,  #5e8fc7 0%, #2f67b2 50%, #2f67b2 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5e8fc7), color-stop(50%,#2f67b2), color-stop(100%,#2f67b2)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top,  #5e8fc7 0%,#2f67b2 50%,#2f67b2 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top,  #5e8fc7 0%,#2f67b2 50%,#2f67b2 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top,  #5e8fc7 0%,#2f67b2 50%,#2f67b2 100%); /* IE10+ */
    background: linear-gradient(to bottom,  #5e8fc7 0%,#2f67b2 50%,#2f67b2 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5e8fc7', endColorstr='#2f67b2',GradientType=0 ); /* IE6-9 */   
    border-left: none;
}
#navtabs li.hover:hover {
    background: #6fa1d1; /* Old browsers */
    background: -moz-linear-gradient(top,  #6fa1d1 0%, #c5d8eb 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6fa1d1), color-stop(100%,#c5d8eb)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top,  #6fa1d1 0%,#c5d8eb 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top,  #6fa1d1 0%,#c5d8eb 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top,  #6fa1d1 0%,#c5d8eb 100%); /* IE10+ */
    background: linear-gradient(to bottom,  #6fa1d1 0%,#c5d8eb 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6fa1d1', endColorstr='#c5d8eb',GradientType=0 ); /* IE6-9 */     
}
#navtabs li {
    list-style: none;
    float: left;
    margin:0px ;    
    margin-bottom:0px ;    
    border-left: 1px solid #021a72;
    border-right: 1px solid #84bff8;
    padding:13px 5px 13px 5px;
    cursor: pointer;
    background-color: #021a72;
}
#navtabs li a, #navtabs li a:link, #navtabs li a:visited, #navtabs li a:hover, #navtabs li a:visited:hover, #navtabs li a:link:hover {
    color: white;
    text-decoration: none;
    background-color: transparent;
}

#ftr {
    border-top: 1px solid #a7a0a7; 
    height:56px;
    font-size: 1.1em;
    background: #24569d; /* Old browsers */
    color: white;
}
#ftr li a:link, #ftr li a:visited, #ftr li a:hover {
    color:#fffeff;
    text-decoration:none;
}
#ftr ul {
    margin:13px 0px 0px 45px;
    padding: 0px 0px;
}
#ftr li {
    list-style: none;
    float: left;
    margin:0px;
    padding:7px 20px 0px 0px;
}
#middle,#news-sec {
    border-left: 1px solid #a7b0b7;
    border-top: 1px solid #a7b0b7;
    border-right: 1px solid #a7b0b7;
    clear: both;
}
#top {
    margin-top:0px;
    clear: both;
}
#news-sec {
    background: #fefefe; /* Old browsers */   
    height:20px;
    padding:5px 5px 5px 20px;
}
#news-pane {
    background-color: #fefefe; 
    background-image: none;
}
#news-sec span {
    font-weight: bold;
    font-size: 1.3em;
    color: #234d75;
}
#middle {
    background-color: white;
}

#nblogo {
    float:left;
    margin:5px 15px 0px 10px;
}
#search-div {
    float:right;
    margin:8px 7px 0px;
}
#search-input {
    width:120px;
    margin:0px;
    border:1px solid #3e83c4;
    border-radius: 3px;
    padding:2px 0px 2px 7px;
    font-size: 12px;
    height: 18px;
    color: #242233;
}
#magnifier {
    display: inline-block;
    margin-bottom: -5px;
}
.slider {
    height: 200px;
}
.slider h1 {
    color:dimgray;
    text-align: center;
}
#lang-sel {
    text-align:right;   
    height:20px;
}
#hdr div.lang-dropdown {
    padding-top:0px;
     height:20px;
}
#navig-breadcrumbs {
    margin: 2px 0px 0px 0px;
    clear:both;
    background-color: #eeeeee;
    border-radius: 5px 5px 0px 0px / 5px 5px 0px 0px; 
    -moz-border-radius: 5px 5px 0px 0px / 5px 5px 0px 0px; 
    -webkit-border-radius: 5px 5px 0px 0px / 5px 5px 0px 0px; 
}
#tof {
    margin:10px 0px 0px 0px;
    clear: both;
    right:0px;
    font-size:11px;
}
#tof img {
	display:inline-block;
	margin-left:5px;
}
ul#social-media {
    margin: 5px 7px 0px;
}
ul#social-media li {
    padding-right: 35px;
}
table#products-navig-table  {
    background: none;   
}
.slides h3 {
    margin-bottom:10px;
    color: #0D4A9B;
    font-size: 16px;
    font-weight: bold;
    margin-bottom: 10px;
}
#nav li a:hover {
    background: none;
}
#lang-arrow {
    display: inline-block;
    margin:0px 0px -2px 4px;
}
#left-side {
    float: left;
    margin:30px 0px 0px 45px;
    color: white;
    width:550px;
}
#left-side h1 {
    color: white;
    font-size: 27px;
    border: none;
    margin-bottom: 5px;
    font-weight: bold;
}
#left-side h2 {
    color: white;
    font-size: 22px;
    border: none;
    padding:0px;
    margin-bottom:20px;
}
#left-side p {
    font-size: 17px;
}
#left-side p.bigger {
    font-size: 20px;
}
#right-side {
    float:right;
    width:230px;
    margin:25px 23px 0px 0px;
    color:white;
}
#right-side table {
    color: white;
}
#right-side a {
    background: none;
}
a.arr-link {
    display: inline-block;
    padding-right:15px;
    background: url('/images_www/v7/design/icon_arrow_news.png') 100% 50% no-repeat;
    
}
#yellow-buttons {
    margin:15px 0px 15px 0px;
    width:220px;
    height:45px;
    background-image: url('/images_www/v7/design/bt_more_download.png');
    background-repeat: no-repeat;
}
#lmb,#dlb {
    width:108px;
    height:45px;
    display: inline-block;
    background: none;
}
#right-side p {
    font-size: 15px;
}
a.lmore {
    font-size: 12px;
    color:#23569d;
    display: inline-block;
    margin-right:4px;
    text-decoration: none;
}
a.lmore:hover {text-decoration: underline;}

/* ========== PRINT stryle tweaks ============= */
@media print {
    .examplecode, pre  {
        white-space: pre-wrap;       /* css-3 */
        white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
        white-space: -pre-wrap;      /* Opera 4-6 */
        white-space: -o-pre-wrap;    /* Opera 7 */
        word-wrap: break-word;       /* Internet Explorer 5.5+ */

    }
}

/* override some kenai styles, uff */

#wrapper-kenai ul, #bg #wrapper-kenai ul { padding-left: 30px;}
#wrapper-kenai .vAccordion ul { padding-left: 15px;}

.download-button {
    min-width:100px;
    text-align: center;
    display: inline-block;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 14px;
    color: #ffffff;
    padding: 3px 20px;
    background: -moz-linear-gradient(
        top,
        #f7be7d 0%,
        #ee9d3b);
    background: -webkit-gradient(
        linear, left top, left bottom, 
        from(#f7be7d),
        to(#ee9d3b));
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px;
    border: 1px solid #f5931c;
    -moz-box-shadow:
        0px 1px 2px rgba(000,000,000,0.5),
        inset 0px 0px 0px rgba(255,255,255,1);
    -webkit-box-shadow:
        0px 1px 2px rgba(000,000,000,0.5),
        inset 0px 0px 0px rgba(255,255,255,1);
    box-shadow:
        0px 1px 2px rgba(000,000,000,0.5),
        inset 0px 0px 0px rgba(255,255,255,1);
    text-shadow:
        0px -1px 0px rgba(000,000,000,0.2),
        0px 1px 0px rgba(255,255,255,0.4);
}
.download-button:hover {
   background: -moz-linear-gradient(
        top,
        #ee9d3b 0%,
        #f7be7d);
    background: -webkit-gradient(
        linear, left top, left bottom, 
        from(#ee9d3b),
        to(#f7be7d));
}

a.bz_closed, .bz_CLOSED td {
text-decoration: line-through !important;
}

/* style for hg.nb.org */
#graphnodes li, #nodebgs li {list-style: none; margin:0px; padding:0px;}
#graphnodes {margin-top:12px;}
div.parity0 pre, div.parity1 pre, .parity0 pre, .parity1 pre {padding:0px; background-color:inherit}

.commTrBox {padding:5px 10px 5px 10px;background-color: #eeeeee;border-radius: 5px;margin:10px 0px 20px 0px;}
