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

/* ----------------------------------------------------- */
/* This CSS file is used for the Flat Grey visual theme. */
/* ----------------------------------------------------- */

/* This theme uses a scalable, floating layout - so most
   sizes are expressed in EMs. PX sizes are used only for
   drop shadows and positioning around graphic images. */

/* -------------------------------------- */
/*      Resets/Browser Normalization      */
/* -------------------------------------- */

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
    border: 0;
    margin: 0;
    outline: 0;
    padding: 0;
    font-size: 100%;
    background: transparent;
    vertical-align: baseline;
}

blockquote, body, div, dl, dt, dd, fieldset, form, h1, h2, h3, h4, h5, h6,
img, input, li, ol, p, select, span, td, textarea, th, ul {
border-style: none;
margin: 0;
padding: 0;
}

a, address, body, caption, cite, code, dfn, em, strong, th, var {
font-style: normal;
font-weight: normal;
text-decoration: none;
}

body, caption, th {
text-align: left;
}

ol, ul {
list-style: none;
}

ol.numbers {
list-style: decimal; 
padding-left: 20px;
}

ul.dots {
list-style: circle; 
padding-left: 20px;
}

/* ------------------------------ */
/*      Basic Element Styles      */
/* ------------------------------ */

a, a:visited {
color: #333;
font-weight: bold;
}

a:hover, a:active {
text-decoration: underline;
}

.disabled {
color: #333366;
text-decoration: none;
}

body, textarea, input, select {
font-family: Verdana, Arial, Helvetica, sans-serif;
}

html {
background-image: url(images/tile.gif);
}

body {
font-size: 62.5%;
position: relative;
color: #000;
min-width: 780px;
margin: 0;
width:expression(document.body.clientWidth < 782? "780px" : "auto");
}

hr {
background-color: #ccc;
color: #ccc;
border-bottom: #fafafa 0.1em solid;
border-right: #fafafa 0.2em solid;
border-left: #d9d9d9 0.2em solid;
border-top: #d9d9d9 0.1em solid;
margin: 0.5em 0 0.5em 0;
}

h1, .h1 {
font-size: 1.6em;
font-weight: bold;
}

h2, .h2 {
font-size: 1.3em;
font-weight: bold;
}

h3, .h3 {
font-size: 1.1em;
font-weight: bold;
}

/* IE7 fix */
table {
font-size: 1em;
}

/* IE7 fix */
table input {
border: #999999 solid 0.1em;
}

textarea {
background-color: #ffffff;
border: #999999 solid 0.1em;
font-size: 1.1em;
}

th, th a {
color: #000000;
font-weight: bold;
}

/* -------------------------- */
/*     Float Clear/Reset      */
/* -------------------------- */

.clear {
clear: both;
height: 0;
visibility: hidden;
}

.no-clear .clear {
/* Used in container elements to override
 the clear class in contained elements. */
clear: none;
}

/* ------------------------------- */
/*      Single Element Styles      */
/* ------------------------------- */

.alert {
/* Used for alert text */
color: #ff0000;
}

.content-messages p {
margin: 0.5em 0 0.5em 0;
}

.hidden {
height: 0;
visibility: hidden;
}

.label {
/* Used for <input> element labels */
font-weight: bold;
height: 1.2em; /* Same as <input> height */
padding-right: 1.1em;
text-align: right;
white-space: nowrap;
width: 1%;
vertical-align: middle;
}

.required, input.required {
/* required style for <input> elements */
background-color: #ffffdd;
}

.tooltip {
color: #557996;
font-style: italic;
margin: 0.4em;
}

.visible {
height: auto;
visibility: visible;
}

.page-container {
/*background: url("images/big-fade.png") repeat-x 0 90px transparent;*/
}

.align-float {
float: right;
}

.align-text {
text-align: right;
}

.align-top {
vertical-align: top;
}

.centered {
text-align: center;
}

.page-title {
color:#557996;
margin-bottom:0.5em;
font-size:1.6em;
font-weight:bold;
}

.contentarea {
}

/* ------------------------ */
/*      Masthead Style      */
/* ------------------------ */

#masthead {
background: #47637c url(images/masthead.gif) top left repeat-x;
color: #ccc;
font-size: 1em;
font-weight: normal;
min-height: 26px; /* Setting must be in px */
height: auto;
overflow: auto;
}

#masthead ul li {
float: left;
padding: 0.5em 0.8em 0.5em 0;
}

#masthead ul li a {
color: #ccc;
font-weight: normal;
}

.last-system-msg{
color: #FFFFFF;
font-size: 0.9em;
padding-left:10px;
}

.preference-area{
float: right !important;
}

#masthead ul .logo-area {
padding: 0.1em 0.8em;
}

#masthead ul .org-logo-area {
padding: 0.1em 0.8em;
}

#masthead ul .org-logo-area img{
width: auto;
height: 22px;
}

#masthead ul a:focus {
text-decoration: underline;
}

/* ---------------------- */
/*      Footer Style      */
/* ---------------------- */

#footer {
background: #333;
border-top: 0.1em inset #000;
padding: 0.5em 0 0.5em 0.5em;
}

#footer a {
color: #ccc;
font-weight: normal;
}

#footer ul {
float: left;
display: inline
}

#footer ul li {
border-left: 0.1em solid #444;
border-right: 0.1em solid #222;
float: left;
display: inline; 
color: #ccc; 
font-weight: normal;
padding: 0.5em;
}

#footer ul .first {
border-left: none;
}

#footer ul .last {
border-right: none;
}

#footer ul li a {
color: #ccc;
font-weight: normal;
}

#footer p {
clear: left;
color: #ccc;
font-weight: normal;
padding: 0.5em;
}

#footer a:focus {
text-decoration: underline;
}

/* ------------------------------- */
/*      Main Navigation Style      */
/* ------------------------------- */

#main-navigation {
clear: both;
background: #436783 url(images/main-nav.gif) top left repeat-x;
color: #fff;
font-size: 1em;
height: 5.2em;
overflow: auto;
border-bottom: 0.2em solid #47637c;
padding: 0.5em 0 0.1em 0;
}

#main-navigation ul li {
float: left;
display: inline;
height: 4.85em;
padding: 0 1em 0 0.5em;
border-left: 0.1em solid #5c809c;
border-right: 0.1em solid #3e5a71;
}

#main-navigation ul .disabled {
color: #D4D0C8;
}

#main-navigation ul .first {
border-left: none;
}

#main-navigation ul .last {
border-right: none;
}

#main-navigation ul a {
color: #fff;
display: block;
padding: 0 0.6em 0 0.6em;
font-size: 0.9em;
font-weight:normal;
text-transform:uppercase;
/* Uncomment next line for main-nav drop shadows */
/*text-shadow: 0px 1px 1px #22323f;*/
}

#main-navigation ul a:hover,
#main-navigation ul .selected {
color: #F9924B;
text-decoration: none;
}

#main-navigation ul a:focus {
text-decoration: underline;
}

/* -------------------------------------- */
/*      Application Navigation Style      */
/* -------------------------------------- */

#app-navigation {
background: url(images/gray-texture.jpg) top left;
border-top: 0.1em solid #3E5A71;
border-bottom: 0.1em solid #fff;
height: 1%; /* IE fix */
margin: 0;
padding: 0.5em;
}

#app-navigation h1,
#app-navigation h2,
#app-navigation h3 {
color: #959595;
margin: 0.4em 0 0.4em 0;
text-transform:uppercase;
text-shadow: 1px 1px 0 #fff; /* Setting must be in px */
}

#app-navigation ul {
display: inline; /* IE Fix */
}

#app-navigation ul li ul li {
background-color: #fff;
border-top: 0.1em solid #ccc;
border-right: 0.1em solid #ddd;
border-bottom: 0.1em solid #ddd;
border-left: 0.1em solid #ccc;
padding: 0.5em;
float: left;
display: inline;
margin: 0.1em 0.3em 0.1em 0;
}

#app-navigation ul .disabled {
color: #D4D0C8;
}

#app-navigation ul a {
color: #444;
display: block;
font-weight: normal;
padding: 0.1em 0.3em 0.1em 0.3em;
}

#app-navigation ul .selected,
#app-navigation ul .selected {
background-color: #f5f5f5;
border: 0.1em solid;
border-color: #aaa #f9f9f9 #f9f9f9 #aaa;
color: #ffffff;
}

#app-navigation ul .selected a {
color: #111;
padding: 0.1em 0.3em 0 0.3em;
}

#app-navigation ul a:hover {
text-decoration: none;
color: #111;
}

#app-navigation ul a:focus {
text-decoration: underline;
}

/* ------------------------- */
/*      Screenlet Style      */
/* ------------------------- */

.screenlet {
background-color: #FFFFFF;
border-right: 0.1em solid #ccc;
border-bottom: 0.2em solid #ccc;
border-left: 0.1em solid #ccc;
height: auto !important;
height: 1%;
margin-bottom: 1em;
overflow: auto;
}

.screenlet-body {
background-color: #FFFFFF;
height: auto !important;
height: 1%;
padding: 0.4em;
}

.screenlet-body div {
margin: 0.8em 0.1em
}

/* Special Screenlet style for locale and timezone window */
.lists.screenlet {
margin-left: 25%;
margin-right: 25%;
margin-top: 1em;
}

.lists.screenlet .basic-table tr td {
text-align: center;
}

.lists.screenlet .basic-table tr td a {
display: block;
}

/* No padding screenlet decorator */
.no-padding {
padding: 0;
border: none;
}

.no-padding .h1,
.no-padding .h2,
.no-padding .h3,
.no-paddingr h1,
.no-padding h2,
.no-padding h3 {
padding: 0.7em;
}

/* ----------------------------------- */
/*      Screenlet Title Bar Style      */
/* ----------------------------------- */

.screenlet-title-bar {
background: url(images/bhead.gif) top left repeat-x;
color: #ffffff;
height: 1%; /* IE fix */
min-height: 1.5em;
padding:0.8em 0.2em;
}

.screenlet-title-bar .h1,
.screenlet-title-bar .h2,
.screenlet-title-bar .h3,
.screenlet-title-bar h1,
.screenlet-title-bar h2,
.screenlet-title-bar h3 {
background: none;
color: #333;
text-shadow: 1px 1px 0 #fff; /* Setting must be in px */
}

.screenlet-title-bar ul {
display: inline; /* IE Fix */
}

.screenlet-title-bar ul li {
background: none;
border-left: 0.1em solid #dedede;
color: #222;
float: right;
font-size: 1em;
font-weight: bold;
padding: 0.1em 0.5em 0.2em 0.5em;
}

.screenlet-title-bar ul .h1,
.screenlet-title-bar ul .h2,
.screenlet-title-bar ul .h3 {
border-left: none;
float: left;
}

.screenlet-title-bar h1,
.screenlet-title-bar .h1 {
font-size: 1.6em;
}

.screenlet-title-bar h2,
.screenlet-title-bar .h2 {
font-size: 1.3em;
}

.screenlet-title-bar h3,
.screenlet-title-bar .h3 {
font-size: 1.1em;
}

.screenlet-title-bar .h3 a {
color: #222;
display: inline;
}

.screenlet-title-bar ul a {
color: #222;
display: block;
}

.screenlet-title-bar ul a:visited {
color: #222;
}

.screenlet-title-bar ul a:hover {
color: #ffffff;
text-decoration: none;
}

.screenlet-title-bar ul .disabled {
color: #CCCCCC;
}

.screenlet-title-bar ul .collapsed,
.screenlet-title-bar ul .collapsed:hover {
background: url(/images/expand.gif) no-repeat center center;
min-height: 1.1em;
min-width: 1.1em;
}

.screenlet-title-bar ul .expanded,
.screenlet-title-bar ul .expanded:hover {
background: url(/images/collapse.gif) no-repeat center center;
min-height: 1.1em;
min-width: 1.1em;
}

.screenlet-title-bar ul .collapsed a,
.screenlet-title-bar ul .expanded a {
/* IE fix */
cursor: default;
}

/* login screenlet decorator */
.login-screenlet {
min-width: 25em;
width: 25%;
}

.login-screenlet .screenlet-title-bar {
text-align: center;
}

/* ------------------------------------------------ */
/*      Basic Navigation (Vertical Menu) Style      */
/* ------------------------------------------------ */

.basic-nav {
/* indent menu - helpful for widgets */
padding-left: 1em;
}

.basic-nav ul a {
color: #333;
font-size: 1.1em;
}

.basic-nav ul .selected,
.basic-nav ul .selected a {
color: #0000ff;
}

.basic-nav ul a:hover {
color: #0000ff;
}

.basic-nav ul .disabled,
.basic-nav ul .disabled a {
color: #D4D0C8;
}

/* ------------------------------------- */
/*      Button Bar Navigation Style      */
/* ------------------------------------- */

.button-bar {
margin-bottom: 1.0em;
width: 100%;
}

.button-bar ul {
display: inline; /* IE Fix */
}

.button-bar ul li ul li {
float: left;
font-weight: bold;
}

.button-bar ul .opposed {
float: right;
}

.button-bar ul a {
display: block;
}

.button-bar .opposed,
.button-bar .opposed li,
.button-bar ul .opposed {
float: right;
}

/* ------------------------------- */
/*      Button Bar Decorators      */
/* ------------------------------- */

.button-style-1 {
display: table;
}

.button-style-1 ul li ul li {
margin-right: 0.5em;
margin-bottom: 0.5em;
}

.button-style-2 {
display: table;
}

.button-style-2 ul li ul li {
margin-right: 0.5em;
margin-bottom: 0.5em;
}

.button-style-2 {
display: table;
}

.tool-bar {
padding: 0.2em;
}

.tool-bar ul li {
padding: 0.1em;
}

.tab-bar {
display: table;
margin: 0.5em 0.5em 0 0.5em;
}

.tab-bar ul li ul li {
margin-right: 0.5em;
margin-bottom: 0.5em;
background: #fff;
border-top: 0.1em solid #ccc;
border-right: 0.2em solid #ccc;
border-bottom: 0.2em solid #ccc;
border-left: 0.1em solid #ccc;
padding: 0.5em;
white-space: nowrap;
}

.tab-bar ul a,
.tab-bar ul a:visited {
color: #666;
}

.tab-bar ul a:hover,
.tab-bar ul .selected,
.tab-bar ul .selected a,
.tab-bar ul .selected a:hover {
color: #333;
text-decoration: none;
}

.tab-bar ul a:focus {
text-decoration: underline;
}

.tab-bar ul .disabled {
color: #ccc;
}

/* ---------------------- */
/*      Table Styles      */
/* ---------------------- */

.basic-table {
background-color: #ffffff;
color: #000000;
margin-bottom: 1em;
width: 100%;
}

form table,
form .basic-table,
.screenlet-body .basic-table {
background: transparent;
margin-bottom: 0;
}

.basic-table tr td {
/* Style for all cells */
padding: 0.8em 0.1em;
vertical-align: middle;
}

.basic-table tr .align-bottom {
vertical-align: bottom;
}

.basic-table tr .align-top {
vertical-align: top;
}

.basic-table tr .label,
.basic-table tr .group-label {
/* field labels for forms */
font-weight: bold;
text-align: right;
padding-right: 1.5em;
white-space: nowrap;
width: 1%;
}

.basic-table tr .group-label {
/* "header" for field label groups */
font-size: 1.2em;
padding: 2em 1.5em 0 0;
}

.basic-table tr th,
.basic-table .header-row {
font-weight: bold;
text-align: left;
}

.basic-table .header-row td {
border-bottom: 0.1em solid #000000;
}

.basic-table .header-row td a {
color: #000000;
}

.basic-table .alternate-row {
/* Alternating row style */
background-color: #eeeeee;
}

.basic-table .selected {
background: #FFFCCF;
}

.basic-table .alternate-rowSelected {
background: #FFF55F;
}

.basic-table .Validate {
/*Style use by alt-row-style on list*/
background: #A0D5F7;
}

.basic-table .alternate-rowValidate {
/*Style use by alt-row-style on list*/
background: #72A8F2;
}

.basic-table .Warn {
/*Style use by alt-row-style on list*/
background: #f55C5C;
}

.basic-table .alternate-rowWarn {
/*Style use by alt-row-style on list*/
background: #FC7455;
}

.basic-table tr .button-col {
/* button column style - for the small
collection of buttons used in lists */
vertical-align: top;
padding: 0.3em;
}
.basic-table tr .button-col a,
.basic-table tr .button-col button,
.basic-table tr .button-col input[type="reset"],
.basic-table tr .button-col input[type="submit"],
.basic-table tr .button-col input[type="button"] {
    -webkit-appearance: none;
    -moz-border-radius: 1em;
    -webkit-border-radius: 1em;
    border-radius: 1em;
    background: #ddd url(images/button.png) repeat-x;
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #ddd));
    background: -moz-linear-gradient(top center, #fff 0%, #ddd 100%);
    border: 0.1em solid;
    border-color: #ddd #bbb #999;
    cursor: pointer;
    color: #333;
    display:inline-block;
    font-size: 0.9em;
    font-weight: bold;
    outline: 0;
    overflow: visible;
    padding: 0.1em 0.5em 0.2em 0.5em;
    text-decoration: none;
    text-shadow: #fff 0 1px 1px; /* Setting must be in px */
    /*text-transform:uppercase;*/
    width: auto;
    
    /* IE7 */
    *padding-top: 0.2em;
    *padding-bottom: 0;
}

.basic-table .collapsed {
visibility: collapse;
}

/*      Alternate table header style      */
.basic-table .header-row-2 th,
.basic-table .header-row-2 td {
background-color: #999;
border-bottom: 0;
border-left: 0.1em solid #aaa;
border-right: 0.1em solid #888;
color: #ffffff;
font-weight: bold;
}

/*      Sort field style      */
.basic-table .header-row-2 th .sort-order-asc,
.basic-table .header-row-2 td .sort-order-asc{
background: url(/images/arrow-gr-up.png) no-repeat right;
padding-left: 0.5em;
padding-right: 20px; /* Setting must be in px */
}
.basic-table .header-row-2 th .sort-order-desc,
.basic-table .header-row-2 td .sort-order-desc{
background: url(/images/arrow-gr-dw.png) no-repeat right;
padding-left: 0.5em;
padding-right: 20px; /* Setting must be in px */
}
.basic-table .header-row-2 th .sort-order,
.basic-table .header-row-2 td .sort-order{
background: url(/images/arrow-gr.png) no-repeat right;
padding-left: 0.5em;
padding-right: 20px; /* Setting must be in px */
color:#fff
}

/* ------------------------------------- */
/*      Table decorator - Hover bar      */
/* ------------------------------------- */

.hover-bar tr:hover {
background-color: #cccccc;
cursor: default;
}

.hover-bar .header-row-1:hover,
.hover-bar tr th:hover {
background-color: #ffffff;
color: #000000;
}

/* -------------------------------- */
/*      Table decorator - Grid      */
/* -------------------------------- */

.dark-grid {
border-right: 0.1em solid #000000;
border-top: 0.1em solid #000000;
}

.dark-grid td,
.dark-grid .header-row-2 th,
.dark-grid .header-row-2 td {
border-bottom: 0.1em solid #000000;
border-left: 0.1em solid #000000;
}

.light-grid {
border-right: 0.1em solid #cccccc;
border-top: 0.1em solid #cccccc;
}

.light-grid td,
.light-grid .header-row td{
border-bottom: 0.1em solid #cccccc;
border-left: 0.1em solid #cccccc;
}

/* ------------------------------------ */
/*      Table decorator - Calendar      */
/* ------------------------------------ */

.calendar {
border-right: 0.1em solid #cccccc;
}

.calendar tr td {
border-bottom: 0.1em solid #cccccc;
border-left: 0.1em solid #cccccc;
vertical-align: top;
padding: 0.5em;
}

.calendar .header-row td {
background-color: #47637c;
border-bottom: 0.1em solid #cccccc;
border-left: 0.1em solid #cccccc;
color: #ffffff;
height: auto;
text-align: center;
}

.calendar tr td .add-new {
float: right;
}

.calendar tr td .h1 {
color: #333;
float: left;
}

.calendar .current-period {
background-color: #ffffcc;
}

.calendar .active-period {
background-color: #eeeeee;
}

/*     ================== */
/*      Tree Styles      */
/*     ================== */

.basic-tree {
/* placeholder */
}

.basic-tree ul {
padding-left: 1em;
}

.basic-tree li {
padding-left: 1em;
white-space: nowrap;
}

.basic-tree li .expanded {
background: url(/images/collapse.gif) no-repeat left center;
padding-right: 1em;
}

.basic-tree li .collapsed {
background: url(/images/expand.gif) no-repeat left center;
padding-right: 1em;
}

.basic-tree li .leafnode {
background: url(/images/expand-collapse-placeholder.gif) no-repeat left center;
padding-right: 1em;
}

.basic-tree li .treeitem {
/* treeitem is deprecated */
border-style: none;
color: #333;
font-size: 1em;
}

.basic-tree li a:hover {
color: #0000ff;
}

/* --------------------- */
/*      Form Styles      */
/* --------------------- */

.basic-form {
margin-bottom: 1em;
}

.basic-form table {
width: 100%;
}

.basic-form table .header-row:hover {
/*background-color: #ffffff;*/
color: #000000;
}

.basic-form table tr td {
padding: 0.1em;
}

.basic-form table tr .label,
.basic-form table tr .group-label {
/* field labels for forms */
font-weight: bold;
text-align: right;
padding-right: 1.5em;
width: 1%;
}

.basic-form table tr .group-label {
/* "header" for field label groups */
font-size: 1.2em;
padding: 2em 1.5em 0 0;
}

.basic-form table tr th,
.basic-form table .header-row {
font-weight: bold;
text-align: left;
}

.basic-form table .header-row:hover,
.basic-form table tr th:hover{
/*background-color: #ffffff;*/
color: #000000;
}

.basic-form table .header-row td {
border-bottom: 0.1em solid #999999;
}

.basic-form table .alternate-row {
/* Alternating row style */
/*background-color: #eeeeee;*/
}

.basic-form table tr td .disabled {
/*background-color: #cccccc;*/
color: #333366;
text-decoration: none;
}

/*      Form decorator - Form Widget      */

.form-widget table tr .label,
.form-widget-table tr .label {
/* Added for backward compatibility */
width: 20%;
}

.form-widget table,
.form-widget-table {
width: auto;
}

.form-widget-table {
margin-bottom: 1em;
}

/* ------------------------------- */
/*      List Navigation Style      */
/* ------------------------------- */

.nav-pager {
background-color: #333;
color: #ffffff;
font-weight: bold;
line-height: 3.5em;
height: 3.5em;
margin: 0.5em 0 0.5em 0;
}

.nav-pager ul {
display: inline; /* IE Fix */
}

.nav-pager ul li {
border-right: solid #222 0.1em;
border-left: solid #444 0.1em;
float:left;
vertical-align: center;
}

.nav-pager ul li a {
display: block;
}

.nav-pager ul a {
color: #ffffff;
padding: 0 1em 0 1em;
text-decoration: none;
}

.nav-pager ul a:hover {
background-color: #999;
}

.nav-pager ul .nav-pagesize,
.nav-pager ul .nav-page-select,
.nav-pager ul .nav-displaying {
padding: 0 1em 0 1em;
}

.nav-pager ul .nav-first-disabled,
.nav-pager ul .nav-previous-disabled,
.nav-pager ul .nav-next-disabled,
.nav-pager ul .nav-last-disabled {
color: #D4D0C8;
padding: 0 1em 0 1em;
}

.nav-pager ul .nav-displaying {
border-right: none;
}

/* ------------------------------- */
/*      Visual Embellishments      */
/* ------------------------------- */

.field-lookup a {
background: url(/images/fieldlookup.gif) no-repeat 0 0;
display: inline-block;
vertical-align: top;
margin-top: 0.3em;
width: 16px; /* Setting must be in px */
height: 16px; /* Setting must be in px */
}


/* --------------------------- */
/*      FieldGroup Styles      */
/* --------------------------- */

.fieldgroup-title-bar {
border-top: 0.1em solid #DADADA;
font-size: 1em;
font-weight: bold;
padding: 0.1em 0.5em 0.2em 0.5em;
}

.fieldgroup-title-bar ul .collapsed,
.fieldgroup-title-bar ul .collapsed:hover {
background: url(/images/expand.gif) no-repeat left center;
min-height: 1.1em;
min-width: 1.1em;
}

.fieldgroup-title-bar ul .expanded,
.fieldgroup-title-bar ul .expanded:hover {
background: url(/images/collapse.gif) no-repeat left center;
min-height: 1.1em;
min-width: 1.1em;
}

.fieldgroup-title-bar a {
cursor: pointer;
text-decoration: none;
padding-left: 10px; /* Setting must be in px */
color: #000000;
}

/* ----------------------------------------- */
/*      Portlet configuration screenlet      */
/* ----------------------------------------- */

.portlet-config {
  background-color: #D4D0C8;
  border: 0.2em solid #D4D0C8;
  margin-bottom: 0.5em;
}

.portlet-config-title-bar .title {
color: #555555;
font-size: 1.2em;
float: left;
}

.portlet-config-title-bar ul {
display: inline; /* IE Fix */
}

.portlet-config-title-bar ul li {
float: right;
font-size: 1em;
font-weight: bold;
padding: 0.1em 0.5em 0.2em 0.5em;
}

.portlet-config-title-bar ul li.move-up {
background: url(/images/arrow-single-up-green.png) no-repeat center center;
}
.portlet-config-title-bar ul li.move-down {
background: url(/images/arrow-single-down-green.png) no-repeat center center;
}
.portlet-config-title-bar ul li.move-left {
background: url(/images/arrow-single-left-green.png) no-repeat center center;
}
.portlet-config-title-bar ul li.move-right {
background: url(/images/arrow-single-right-green.png) no-repeat center center;
}
.portlet-config-title-bar ul li.move-top {
background: url(/images/arrow-end-up-green.png) no-repeat center center;
}
.portlet-config-title-bar ul li.move-bottom {
background: url(/images/arrow-end-down-green.png) no-repeat center center;
}
.portlet-config-title-bar ul li.remove {
background: url(/images/mini-trash.png) no-repeat center center;
}
.portlet-config-title-bar ul li.edit {
background: url(/images/mini-edit.png) no-repeat center center;
}


/* == Portal Manager Toolbar == */

#manage-portal-toolbar {
background-color:#D4D0C8;
margin-bottom: 0.5em;
}

#manage-portal-toolbar ul li {
float: left;
padding: 0.1em 0.5em 0.2em 0.5em;
}

#manage-portal-toolbar #config-on-off,
#manage-portal-toolbar #manage-portal-page,
#manage-portal-toolbar #add-column {
float: right;
}

#manage-portal-toolbar #portal-page-name {
font-size: 1.5em;
font-weight: bold;
}

.manage-portal-column-toolbar #add-portlet,
.manage-portal-column-toolbar #delete-column,
.manage-portal-column-toolbar #column-width {
float: right;

}

/*=================== For the quickadd page =================================*/

.quickaddall{
float:right;
padding-bottom:1em;
padding-top:1em;
}

.quickaddtable{
display:inline-block;
clear:both;
}

.quickaddtable span {
display:inline;
float:left;
border-right:0.1em solid #999999;
border-top:0.1em solid #999999;
margin:0;
padding:0.3em;
}

.quickaddtable p {
clear:left;
height:100% !important; height:1em;
}

.quickaddtable span.pid {
width:10%;
}

.quickaddtable span.name {
width:50%;
text-align:left;
}

.quickaddtable span.listPrice {
width:10%
}

.quickaddtable span.totalPrice {
width:10%
}

.quickaddtable span.qty {
width:10%
}

/* `Widths
----------------------------------------------------------------------------------------------------*/

.input_tiny {
	width: 50px;
}

.input_small {
	width: 100px;
}

.input_medium {
	width: 150px;
}

.input_large {
	width: 200px;
}

.input_xlarge {
	width: 250px;
}

.input_xxlarge {
	width: 300px;
}

.input_full {
	width: 100%;
}

/*
	Added via JS to <textarea> and class="input_full".
	Applies to IE6, IE7. Other browsers don't need it.
*/
.input_full_wrap {
	display: block;
	padding-right: 8px;
}

/* `UI Consistency
----------------------------------------------------------------------------------------------------*/

::-moz-focus-inner {
	border: 0;
}

input[type="search"]::-webkit-search-decoration {
	display: none;
}

input,
button,
select,
textarea {
	margin: 0;
	vertical-align: middle;
}

a.buttontext,
a.buttontextbig,
.smallSubmit,
.smallSubmit:hover,
.mediumSubmit, 
.largeSubmit, 
.loginButton,
.button-style-1 a,
.button-style-1 ul a,
.button-style-2 ul a, 
.button-style-2 a, 
.button,
button,
input[type="reset"],
input[type="submit"],
input[type="button"] {
	-webkit-appearance: none;
	-moz-border-radius: 1.1em;
	-webkit-border-radius: 1.1em;
	border-radius: 1.1em;
	background: #ddd url(images/button.png) repeat-x;
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #ddd));
	background: -moz-linear-gradient(top center, #fff 0%, #ddd 100%);
	border: 0.1em solid;
	border-color: #ddd #bbb #999;
	cursor: pointer;
	color: #333;
	display:inline-block;
    font-size: 1em;
    font-weight: bold;
    outline: 0;
	overflow: visible;
	padding: 0.4em 1em 0.4em;
	text-decoration:none;
	text-shadow: #fff 0 1px 1px; /* Setting must be in px */
	/*text-transform:uppercase;*/
	width: auto;

	/* IE7 */
	*padding-top: 0.2em;
	*padding-bottom: 0;
}

button {
	/* IE7 */
	*padding-top: 0.1em;
	*padding-bottom: 0.1em;
}

a.disabled,
button[disabled],
input[type="reset"][disabled],
input[type="submit"][disabled],
input[type="button"][disabled] {
	color: #888;
	border-color: #ddd #ddd #ccc;
}

textarea,
select,
input[type="date"],
input[type="datetime"],
input[type="datetime-local"],
input[type="email"],
input[type="month"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="text"],
input[type="time"],
input[type="url"],
input[type="week"] {
	-webkit-appearance: none;
	-moz-border-radius: 0;
	-webkit-border-radius: 0;
	border-radius: 0;
	-webkit-box-sizing: border-box;
	-moz-box-sizing: border-box;
	box-sizing: border-box;
	/*background-color: #fff;*/
	border: 0.1em solid;
	border-color: #848484 #c1c1c1 #e1e1e1;
	color: #000;
	outline: 0;
	padding: 0.2em 0.3em;

	height: 1.8em;

	/* IE7 */
	*padding-top: 0.2em;
	*padding-bottom: 0.1em;
	*height: auto;
}

/*
	Separate rule for Firefox.
	Cannot stack with WebKit's.
*/
input.placeholder_text,
textarea.placeholder_text {
	color: #888;
}

::-webkit-input-placeholder {
	color: #888;
}

textarea[disabled],
select[disabled],
input[type="date"][disabled],
input[type="datetime"][disabled],
input[type="datetime-local"][disabled],
input[type="email"][disabled],
input[type="month"][disabled],
input[type="number"][disabled],
input[type="password"][disabled],
input[type="search"][disabled],
input[type="tel"][disabled],
input[type="text"][disabled],
input[type="time"][disabled],
input[type="url"][disabled],
input[type="week"][disabled] {
	background-color: #eee;
	color: #888;
}

.button-style-1 a:focus,
.button-style-1 ul a:focus,
.button-style-2 ul a:focus, 
.button-style-2 a:focus, 
.smallSubmit:focus,
button:focus,
button:active,
input:focus,
input:active,
select:focus,
select:active,
textarea:focus,
textarea:active {
	-moz-box-shadow: #5c809c 0 0 5px;
	-webkit-box-shadow: #5c809c 0 0 5px;
	box-shadow: #5c809c 0 0 5px;
	/* for Opera */
	z-index: 1;
}

.is_webkit select {
	/* Tweaks for Safari + Chrome. */
	background-image: url(images/select_arrow.gif);
	background-repeat: no-repeat;
	background-position: right center;
	padding-right: 20px;
}

textarea,
select[multiple] {
	height: auto;
}

select[multiple],
.is_webkit select[multiple] {
	background-image: none;
	padding: 0;
}

textarea {
	overflow: auto;
	resize: vertical;
	width: 100%;
}

optgroup {
	color: #000;
	font-style: normal;
	font-weight: normal;
}

/* `IE6
----------------------------------------------------------------------------------------------------*/

.ie6_button,
* html button {
	background: #ddd url(images/button.png) repeat-x;
	border: 0.1em solid;
	border-color: #ddd #bbb #999;
	cursor: pointer;
	color: #333;
	font: bold 1.2em Arial, sans-serif;
	padding: 0.2em 1em 0;
	overflow: visible;
	width: auto;
}

* html button {
	padding-top: 0.1em;
	padding-bottom: 0.1em;
}

.ie6_input,
* html textarea,
* html select {
	background: #fff;
	border: 0.1em solid;
	border-color: #848484 #c1c1c1 #e1e1e1;
	color: #000;
	padding: 0.2em 0.3em 0.1em;
	font-size: 1.3em;
	font-family: Arial, sans-serif;
	vertical-align: top;
}

* html select {
	margin-top: 0.1em;
}

.placeholder_text,
.ie6_input_disabled,
.ie6_button_disabled {
	color: #888;
}

.ie6_input_disabled {
	background: #eee;
}

/* ------------------------------- */
/*      Browse Category Style      */
/* ------------------------------- */

.browsecategorylist {
margin-left: 1em;
}

.browsecategorytext {
color: #333;
font-weight: bold;
padding-left: 10px; /* Setting must be in px */
background:url(/images/bg_bullet_full_2.gif) no-repeat 0px 0.5em;
}

A.browsecategorybutton {
color: #333;
}

.browsecategorybuttondisabled {
color: #333333;
font-weight: bold;
}

/* ----------------------------------- */
/*      Event/Error Message Style      */
/* ----------------------------------- */

.eventMessage, .errorMessage {
background-color: #FFFFEE;
border: solid #000000 0.1em;
font-size: 1.1em;
font-weight: bold;
margin: 1em;
padding: 1em;
}

.eventMessage {
color: #333;
}

.errorMessage {
color: #ff0000;
}

/* ------------------------ */
/*      Product Styles      */
/* ------------------------ */

.basePrice {
color: #000000;
}

.normalPrice {
color: #008000;
}

.salePrice {
color: #ff0000;
}
.product-prevnext {
text-align: right;
}

.productsummary-container {
border-top: #999 solid 0.1em;
margin-top: 0.5em;
margin-bottom: 0.5em;
}

.productsummary {
border-bottom: #999 solid 0.1em;
/* using min-height as an alternative to clear: both; because that, in some browsers, will clear the top-level columns and not just in this div (Mozilla based, namely) */
min-height: 6em;
overflow: visible;
padding: 0.5em;
position: relative;
}

.productsummary .smallimage {
float: left;
/* position: absolute; top: 5px; left: 5px; */
margin: 0 0.5em 0.5em 0;
}
.productsummary .smallimage img {
border: #CCC solid 0.1em;
height: 5em;
}

.productsummary .productbuy {
float: right;
margin: 0.5em;
text-align: right;
width: 13em;
}

.productsummary .productinfo {
/* margin-left: 60px; */
text-align: left;
}

#productdetail #long-description {
border-top: #999 solid 0.1em;
margin-top: 1em;
padding-top: 0.5em;
}

#productdetail #reviews {
border-top: #999 solid 0.1em;
margin-top: 1em;
padding-top: 0.5em;
}

#productdetail #associated-products {
border-top: #999 solid 0.1em;
margin-top: 1em;
padding-top: 0.5em;
}

.treeWrapper {
background-color: #ffffff;
border-top: 0.1em solid #000000;
border-left: 0.1em solid #000000;
color: #000000;
font-size: 1.6em;
font-weight: normal;
margin-left: 1.2em;
margin-top: 0.2em;
text-decoration: none;
}

/* ------------------------- */
/*      HTML Log Styles      */
/* ------------------------- */

.DEBUG {
color: #808080;
}

.WARN {
color: #0000ff;
font-weight: bold;
}

.INFO{
color: #008000;
}

.ERROR {
border: 0.2em solid #ff0000;
color: #ff0000;
font-weight: bold;
}

/* ---------------------------- */
/*     Multi-Column Styles      */
/* ---------------------------- */

#column-container {
margin: auto;
padding: 1em;
position: relative;
}

#column-container h1,
#column-container .h1,
#column-container h2,
#column-container .h2 {
margin-bottom: 0.5em;
}

#column-container h1,
#column-container .h1 {
color: #557996;
}

#column-container .left {
float: left;
/* alt: position: absolute; top: 0px; left: 0px; */
width: 22em;
margin-right: 1em;
}

#column-container .left-larger {
float: left;
/* alt: position: absolute; top: 0px; left: 0px; */
width: 25em;
margin-right: 1em;
}

.lefthalf {
float: left;
height: 1%;
left: 0;
margin: 0% 1% 1% 0%;
width: 49%;
}

.righthalf {
float: right;
height: 1%;
margin: 0 0 1% 1%;
right: 0;
width: 49%;
}

#column-container .right {
float: right;
margin-left: 1em;
width: 22em;
}

#column-container .leftonly {
margin-left: 23em;
width: auto;
}

#column-container .leftonly-larger {
margin-left: 26em;
width: auto;
}

#column-container .rightonly {
margin-right: 23em;
width: auto;
}

#column-container .center {
margin-left: 23em;
margin-right: 23em;
width: auto;
}

#column-container .nocolumns {
width: auto;
}

/* ------------------------------ */
/* Deprecated styles - DO NOT USE */
/* ------------------------------ */

.apptitle {
background-color: #333;
color: #FFFFFF;
display: block;
font-size: 1.3em;
font-weight: bold;
line-height: 2em;
width: 100%;
}

.boxhead {
color: #FFFFFF;
font-size: 1.1em;
font-weight: bold;
}

.boxlink {
float:right;
}

DIV.boxtop {
background-color: #333;
border-color: #999999;
border-style: solid;
margin: 0 auto 0 auto;
padding: 0.1em 0.4em 0.1em 0.4em;
text-align: center;
}

DIV.boxhead-left {
border: none;
color: #FFFFFF;
float: left;
font-size: 1.1em;
font-weight: bold;
width: auto;
}

DIV.boxhead-fill {
border: none;
color: #FFFFFF;
font-size: 1.1em;
font-weight: bold;
text-align: center;
width: 0;
}

DIV.boxhead-right {
border: none;
color: #FFFFFF;
float: right;
font-size: 1.1em;
font-weight: bold;
width: auto;
}

A.boxheadbutton {
color: #FFFFFF;
font-size: 1.1em;
}

A.boxheadbutton:hover {
color: #ff0000;
text-decoration: none;
}

.boxoutside {
background-color: #FFFFFF;
border: 0.1em solid #999999;
}

.boxtop {
background-color: #333;
border: 0 solid #999999;
padding: 0.1em 0.4em 0.1em 0.4em;
}

.boxbottom {
background-color: #FFFFFF;
border: 0 solid #999999;
padding: 0.4em;
}

.webToolList h3 {
  margin:0.75em 0 0.09em 0;
  text-transform:uppercase;
}

A.linktext {
color: #333;
}

A.linktext:hover {
color: #ff0000;
}

.buttontextdisabled {
color: #333333;
}

.submenutextinfo {
border-right: 0.1em solid #5886C6;
color: #ffffff;
font-size: 0.9em;
font-weight: bold;
padding-left: 0.5em;
padding-right: 0.5em;
}

.submenutext, A.submenutext, A.submenutext:visited {
border-right: 0.1em solid #5886C6;
color: #ffff00;
font-size: 0.9em;
font-weight: bold;
padding-left: 0.2em;
padding-right: 0.5em;
}

A.submenutext:hover {
color: #ffff00;
}

.submenutextdisabled, A.submenutextdisabled {
border-right: 0.1em solid #5886C6;
color: #CCCCCC;
font-size: 0.9em;
font-weight: bold;
padding-left: 0.2em;
padding-right: 0.5em;
}

A.submenutextdisabled:hover {
color: #ffff00;
}

.submenutextinforight {
color: #ffffff;
font-size: 0.9em;
font-weight: bold;
padding-left: 0.2em;
}

.submenutextright, A.submenutextright {
color: #ffff00;
font-size: 0.9em;
font-weight: bold;
padding-left: 0.2em;
}

A.submenutextright:hover {
color: #ffff00;
}

.submenutextrightdisabled, A.submenutextrightdisabled {
color: #CCCCCC;
font-size: 0.9em;
font-weight: bold;
padding-left: 0.2em;
}

A.submenutextrightdisabled:hover {
color: #ffff00;
}

A.lightbuttontext {
border: none;
color: #222;
}

A.lightbuttontext:hover {
color: #ccc;
}

A.lightbuttontextsmall {
border: none;
color: #222;
font-size: 0.8em;
}

A.lightbuttontextsmall:hover {
color: #ccc;
}

.lightbuttontextdisabled {
color: #CCCCCC;
font-weight: bold;
}

DIV.row {
background-color: #B4B0AA;
margin: 0 auto 0 auto;
text-align: center;
}

DIV.col {
border: none;
float: left;
width: auto;
}

DIV.col-fill {
background-color: #B4B0AA;
border: none;
color: #333;
font-weight: bold;
text-align: center;
width: 0;
}

DIV.col-right {
border: none;
float: right;
width: auto;
}

.leftclear{
clear: left;
height: 1%;
}

DIV.endcolumns {
/* deprecated - use .clear */
clear: both;
}

DIV.simple-right-small {
float: right;
width: 2em;
text-align: right;
}

DIV.simple-right-half {
float: right;
width: 50%;
text-align: right;
}

.left-border {
float: left;
margin-right: 1em;
width: 22em;
border-right: 0.5em dotted #ccc;
background-color: #eee;
height: 100%;
}

DIV.widget-container {
margin-bottom: 2em;
}

DIV.column-left-wide {
background-color: #CCCCCC;
border: #000000 solid 0.2em;
float: left;
overflow: auto;
width: 30em;
}

img.cssImgXLarge {
	/*border: 1px black solid;*/
	max-width: 200px;
	max-height: 150px;
}

img.cssImgLarge {
	/*border: 1px black solid;*/
	max-width: 100px;
	max-height: 75px;
}

img.cssImgStandard {
	/*border: 1px black solid;*/
	max-width: 70px;
	max-height: 52px;
}

img.cssImgSmall {
	/*border: 1px black solid;*/
	max-width: 50px;
	max-height: 37px;
}

/* From http://jqueryui.com/demos/autocomplete/maxheight.html */
/* When displaying a long list of options, you can simply set the max-height for the autocomplete menu to prevent the menu from growing too large */
.ui-autocomplete {
    max-height: 250px;
    overflow-y: auto;
    /* prevent horizontal scrollbar */
    overflow-x: hidden;
    /* add padding to account for vertical scrollbar */
    padding-right: 20px;
}
/* IE 6 doesn't support max-height
 * we use height instead, but this forces the menu to always be this tall
 */
* html .ui-autocomplete {
    height: 250px;
}

/* The custom CSS for adjust the JsTree */
.jstree-default .jstree-leaf > ins { 
 background-position:-36px 0;
 vertical-align: top;
 }
html>/**/body .jstree-default a {
white-space:normal !important;
 height: auto;
 }
/* IE6 and below */  
* html .jstree-default a { 
white-space:normal;
height: auto;
}
/* IE7 */  
*+html .jstree-default a {
white-space:normal;
height: auto;
}
