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

header, footer, aside, nav, article, section {
  display: block;
}

header {
	margin:10px 0;
  height:100px;
  background-color:white;
  font-size:300%;
}

body { 
  font:13px/1.231 Helvetica,Arial,sans-serif;
  *font-size:small; 
  margin: 0 auto;
  min-width: 1024px;
  font-size: 75%;
  color: #454545;
  height:100%;
  overflow:auto;
}

h1 {
  font-size: 175%; 
  font-weight: bolder; 
  text-align: center; 
}

header img {
        height:93px;
        width:241px;
	float:left;
}
#headerText {
        font-weight:bold;
        padding:30px 0 0 400px;
}

footer {
	border-top:1px solid #e5e5e5;
	padding:40px 0;
	background-color:#fff;
    color:#666666;
}

footer a:link, footer a:visited {
    color:#666666;
    text-decoration:underline;
}

a:link {
  color: blue;
}

a:visited {
  color: blue;
}

select {
  width:250px;
  background-color:#DBDBDB;
}

#blackScreenDivId, #loadingBlackScreenDivId {
  position:fixed;
  background-color:black;
  opacity:0.8;
  height:100%;
  width:100%;
  top:0px;
  left:0px;
}

#loadingImgId {
  /*
  margin-left: auto;
  margin-right: auto;
  */
  position: fixed; 
  left: 50%; 
  top: 50%;
  width: 100px;
  height: 100px;
  margin-top: -50px;
  margin-left: -50px;
}

#installationWizardDivId {
  margin-left:auto;
  margin-right:auto;
  border:1px;
  background-color:#FFF;
  padding:20px 20px 20px;
  width:940px;
}

#installationWizardDivId h2 {
	margin-bottom:10px;
}

#installationWizardDivId h3 {
	margin-bottom:10px;
}

#installationSideBarDivId {
  display:block;
  float:left;
}

#installationMainFormsDivId {
  display:block;
}

#displayLogsContentDivId {
  height: 500px;
  width: 600px;
  padding: 5px;
  background-color: white;
  overflow: auto;
}

table {
  width:80%;
  margin-left:auto;
  margin-right:auto;
  padding-left:20px;
  font-size:1em;
  cellspacing:10px;
  cellpadding:10px;
  border:1px solid #DBDBDB;
}

caption {
  font-weight:bold;
  font-size:1.3em;
  padding:10px;
  color:green;
}

thead {
  font-size:13px;
  font-weight:bold;
  color:white;
  background-color:#65B642;
  border-bottom:1px solid #7A7A7A;
}

thead tr {
}

thead tr:hover {
  background-color:#65B642;
}

th {
  padding:10px;
}

tr {
  transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98);
  -moz-transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98);    /* FF3.7+ */
  -o-transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98) ;      /* Opera 10.5 */
  -webkit-transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98) ; /* Saf3.2+, Chrome */
}

tr:hover {
  background-color:#DBDBDB;
  height:30px;
}

td {
  padding:10px;
}

.contextualHelp {
  margin-left:10px;
  width:300px;
  display:inline-block;
  font-size:12px;
  visibility:hidden;
}

.formElement:hover .contextualHelp {
  visibility:visible;
}

.pageSummary {
  min-height: 20px;
  padding: 19px;
  margin: 30px 0 20px 0;
  background-color: #f5f5f5;
  border: 1px solid #eee;
  border: 1px solid rgba(0, 0, 0, 0.05);
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}

.pageSumary h2 {
	margin-bottom:10px;
}

.container {
  width:980px!important;
  margin:0 auto;
}

#ContentDivId {
  width:980px;
  margin:0 auto;
  padding:0;
  background-color:#fff;
  min-height:100%;
  padding-top:0px;
}

#selectServicesCoreDivId label {
	font-size:16px;
	margin-bottom:10px;
}

#selectServicesCoreDivId div.description {
	font-style:italic;
	margin:0 0 20px 20px;
}

#selectServicesCoreDivId span.description {
	font-style:italic;
	margin:0;
	font-size:12px;
}

.pageContent {
	margin:40px 0 0 40px;
}

div.formElement {
	clear:both;
	font-size:12px;
}

.formElement input {
  vertical-align:top; 
}

#configureClusterAdvancedCoreDivId label,
#deployDynamicRenderDivId label,
#deployCoreDivId label {
	float:left;
	width:300px;
	text-align:right;
	margin-right:20px;
	padding-top:4px;
}

#deployDynamicRenderDivId input {
	display:block!important;
	float:left;
}

#labelForSelectAllId {
	font-size:12px!important;
}

#configureClusterAdvancedCoreDivId input {
  float:left;
}

input.unit, input[readonly].unit {
	width:80px;
}

label.unit {
  margin-top:3px;
  margin-left:4px;
  width:auto!important;  
}

a.btn {
	color:#333;
}

.btn-large .iconic-stop:before {
    margin-top: -1px;
}

#yumMirrorSupportFormButtonWrapperId {
	margin-bottom:20px;
}

#yumMirrorSupportFormFieldsId input[type=text] {
	width:500px;
	margin-bottom:20px;
}

div.separator {
	margin-bottom:20px;
}
#selectServicesCoreDivId ul {
	list-style:none outside none;
}
#masterServices {
	margin-top:40px;
}

#masterServices select {
	width:auto;
	max-width:330px;
	background-color:#fff;
}
#masterServices a {
	margin-left:165px;
}

/*
#masterServices label {
	width:240px;
	float:left;
	line-height: 28px;
    margin-right: 10px;
    text-align: right;
}
*/
#masterServices .hostInfo {
	margin-left:10px;
	font-size:14px;
	font-weight:normal;
}

#masterServicesToHostsContainer {
	margin:0 10px 40px 0;
	width:520px;
	float:left;
}

.masterServiceSelect {
	margin-bottom:10px;	
}
.masterServiceSelect select {
	margin-bottom:0;
}

.masterServiceSelect label {
	font-size:14px;
	float:left;
	width:160px;
	margin-right:5px;
	line-height:30px;
	text-align:right;
}
#hostsToMasterServices {
	width:auto;
	float:left;
}
.hostToMasterServices, .hostToServices, #configureClusterMountPointsDisplayDivId .formElement {
    background-color: #F7F7F5;
    border: 2px solid rgba(0, 0, 0, 0.25);
    border-radius: 4px 4px 4px 4px;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) inset;
    margin: 0 0 10px;
    min-height: 20px;
    padding: 10px 20px;
    width:360px;
}
.hostToServices {
	width:auto;
}
.hostToMasterServices > h3, .hostToServices > h3 {
	font-size:14px;
	margin-bottom:4px!important;
	line-height:14px;
}
.hostToServices > h3 {
  font-weight:normal;
}
.hostToMasterServices ul, .hostToServices ul {
	margin-left:0;
	margin-bottom:0;
	list-style:none;
}
.hostToMasterServices ul:after, .hostToServices ul:after {
	clear:both;
}
.hostToMasterServices li, .hostToServices li, .masterLegend, .clientLegend {
	float:left;
	background-color:#65B642;
	padding:4px 6px;
	color:#fff;
	margin-right:10px;
	margin-top:6px;
	border-radius:4px;
	-webkit-border-radius:4px;
	-moz-border-radius:4px;
}
.hostToServices li.client, .clientLegend {
  background-color:#0088CC;
}
#serviceLegend {
  float:right;
}
#clusterHostRoleMappingDivId {
  margin-top:20px;
  width:500px;
  margin-left:20px;
}

#clusterHostRoleMappingDivId h2 {
  font-size:16px;
  float:left;
  margin-bottom:10px;
  font-weight:normal;
}
/* BEGIN TOP NAV */
.navbar {
  font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;
}
.navbar .brand {
    color: #666666;
    display: block;
    float: left;
    font-size: 16px;
    font-weight: normal;
    line-height: 1;
    margin-left: 0;
    margin-right: 40px;
    margin-top: 3px;
    padding: 14px 10px;
}

.navbar-inner {
	background: linear-gradient(#FAFAFA, #EAEAEA) repeat scroll 0 0 transparent;
	background: -moz-linear-gradient(#FAFAFA, #EAEAEA) repeat scroll 0 0 transparent;
	background: -webkit-linear-gradient(#FAFAFA, #EAEAEA) repeat scroll 0 0 transparent;
	border-radius:0;
	border:1px solid #bbb;
	border-width:0 0 1px 0;
}
.navbar .nav {
  float:none;
  overflow:hidden;
}
.navbar .nav .active > a, .navbar .nav .active > a:hover {
  background-color: #999999;
  color: #FFFFFF;
  text-decoration: none;
}
.navbar .nav > li > a {
	border-radius:8px;
	-webkit-border-radius: 8px;
	-moz-border-radius: 8px;
  color: #666666;
  float: none;
  font-size: 13px;
  font-weight: bold;
  line-height: 19px;
  margin: 6px 10px 6px 0;
  padding: 8px 14px;
  text-decoration: none;
  text-shadow: none;
}
.navbar .nav > li > a:hover {
  background-color: transparent;
  color: #999999;
  text-decoration: none;
}
.navbar .brand {
	margin-right:40px;
}
.navbar #logo {
	float:left;
	padding-top:7px;
	height:36px;
}
.navbar .nav > li.right {
  float:right; 
}
/* END TOPNAV */
/* BEGIN SUBNAV */
#subnav a {
  color:#666;
  font-size:13px;
}
#subnav a:active, #subnav .active a {
  color:#65B642;
  font-size:13px;
}
/* END SUBNAV */
/* BEGIN progress box styles */
#txnProgressBox {
  width:auto;
  border: 1px solid rgba(0, 0, 0, 0.10);
  border-radius: 4px 4px 4px 4px;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) inset;
  background-color:#ffffff;
  min-height:80px;
}
#txnProgressBox ul {
  list-style-type:none;
  width:500px;
  margin:0;
  padding:20px;
  font-size:13px;
}
#txnProgressBox ul li {
  margin-bottom:3px;
  text-align:right;
  clear:both;  
}
#txnProgressBox ul label {
  width:150px;
  float:left;
  margin-right:8px;
}
#txnProgressBox ul.wrapped li {
  margin-bottom:18px;
  text-align:left;
  clear:both;  
}
#txnProgressBox ul.wrapped li:last-child {
  margin-bottom:0px;
}
#txnProgressBox ul.wrapped label {
  width:auto;
  float:none;
  background:none;
  box-shadow:none;
  margin-bottom:2px;
}
#txnProgressBox ul .progress {
  /*height:10px;*/
  width:240px;
}
#txnProgressBox ul.wrapped .progress {
  width:100%;
}
#txnProgressBox #buttonArea {
  background-color:#fefefe;
  padding:6px 20px;
}
#txnProgressBox ul .progress {
  height:12px;
  margin-top:3px;
  margin-bottom:0;
  float:left;
}
#txnProgressBox ul.wrapped .progress {
  margin-bottom:0;
  float:none;
}
#txnProgressBox label.txnProgressStatePending {
  color:#999;
}
#txnProgressBox label.txnProgressStateDone {
}
#txnProgressBox label.txnProgressStateError {
  color:red;
}
#txnProgressBox label.txnProgressStateInProgress {
  color:#333;
  font-weight:bold;
}
#txnProgressBox .progress .bar {
  width:0;
}
#txnProgressBox .progress.active .bar {
  width:auto;
}
#txnProgressBox .progress.progress-success .bar {
  width:auto;
}
#txnProgressBox .progress.progress-danger .bar {
  width:auto;
}
#txnProgressBox .status {
  margin-left:8px;
  float:left; 
}
#txnProgressBox .status.txnProgressStatePending {
  color:#999;
}
#txnProgressBox .status.txnProgressStateDone {
  color:green;
}
#txnProgressBox .status.txnProgressStateInProgress {
  color:#149BDF;
  font-weight:bold;
}
#txnProgressBox .status.txnProgressStateError {
  color:red;
}
#txnProgressBox #successInfoLinkId {
  margin-left:20px;
}
#txnProgressHeader {
  background-color:#f0f0f0;
  border-bottom: 1px solid #DDDDDD;
  box-shadow: 0 1px 0 #FFFFFF inset;
  color:#333333;
  font-size:18px;
  font-weight:bold; 
  padding:9px 15px;
  min-width:500px;
}
#activeProgressBar.wrapped {
  width:500px;
  height:12px;
  float:none;
}
#activeProgressBar {
  margin-top:3px;
  width:240px;
  height:12px;
  float:none;
}
.wrapped #activeProgressBarContainer {
  height:12px;
  float:none;
}
#activeProgressBarContainer {
  height:12px;
  float:left;
}
/* END progress popup styles */
#deployAddedNodesSubmitButtonId {
  margin-left:20px; 
}
/* BEGIN common2 */
hr {
  clear:both;
  color: #FFF;
}

legend {
  padding: 0.2em 0.5em;
  color:green;
  font-size:120%;
  text-align:left;
}

.submitButton:hover {
  background-color:#00CC00;
  cursor:pointer;
  border:1px solid green;
  color:white;
}

.submitButton {
  -moz-box-shadow:inset 0px 1px 20px -2px #caefab;
  -webkit-box-shadow:inset 0px 1px 20px -2px #caefab;
  box-shadow:inset 0px 1px 20px -2px #caefab;
  background-color: #39E639;
  -moz-border-radius:6px;
  -webkit-border-radius:6px;
  border-radius:6px;
  border:1px solid grey;
  color:black;
  margin-top:6px;
  margin-bottom:6px;
  font-family:Arial;
  font-size:14px;
  font-weight:bold;
  padding:6px 20px;
  text-decoration:none;
  float:right;
}

.submitButton:active {
  position:relative;
  top:1px;
}

input[readonly] {
  width:300px;
  /*
    color:green;
  */
  box-shadow:none;
  border:0px;
  background-color:#F0F0E8;
  vertical-align:top;
}

#formElement {
  height: 35px;
}
/* END common2 */
/* BEGIN common3 */
span.installationWizardStageNumber {
  color: rgb(157,157,157);
  font-size: 20px;
  font-weight: bold;
  text-align: center;
  width: 100%;
  left: 1px;
  background-color: transparent;
  background-image: none;
  background-repeat: repeat;
  background-attachment: scroll;
  background-position: 0% 0%;
  background-clip: border-box;
  background-origin: padding-box;
  background-size: auto auto;
}

#installationWizardProgressBarDivId {
  width: 100%;
  margin: 0px auto;
  margin-bottom: 8px;
}

#installationWizardProgressBarListId {
  margin:0;
  padding:0;
  height:50px;
}

#installationWizardProgressBarListId li {
  display: inline-block;
  width: auto;
  padding: 5px;
  margin: 2px;
  cursor: default;
}

.installationWizardUnvisitedStage, #installationWizardProgressBarListId li.installationWizardUnvisitedStage {
  background-color: rgb(190,190,190);
  color: white;
  border-radius:4px;
  -moz-border-radius:4px;
  -webkit-border-radius:4px;
  padding:10px;
}

.installationWizardVisitedStage, #installationWizardProgressBarListId li.installationWizardVisitedStage {
  background-color: grey;
  color: #fff;
  padding:10px;
  font-weight:bold;
  font-size: 12px;
  border-radius:4px;
  -moz-border-radius:4px;
  -webkit-border-radius:4px;
  cursor: pointer;
}

.installationWizardCurrentStage, #installationWizardProgressBarListId li.installationWizardCurrentStage {
  background-color:#65B642;
  color: white;
  margin:4px;
  padding:10px;
  font-weight:bolder;
  font-size: 14px;
  border-radius:4px;
  -moz-border-radius:4px;
  -webkit-border-radius:4px;
}

.txnNoOpMsg {
  padding: 4px;
  font-weight: bolder;
  font-size: 150%;
  text-align: center;
}

.logEntry {
  border:1px solid #B2B299 ;
  background-color:#F0F0E8;
  margin:30px;
}

.logEntryHeader {
  font-weight:bold;
  font-size:larger;
  background-color:#B2B299;
  color:white;
}

.logEntryBody {
  padding:5px;
}

#txnProgressStatusDivId {
  width: auto;
  max-width:500px;
  /-*height: 2em;*-/
  border-style: solid;
  border-width: 2px;
  border-radius:2px;
  -moz-border-radius:2px;
  -webkit-border-radius:2px;
  padding-top: 6px;
  padding-bottom: 6px;
  font-size: 13px;
  /*text-align: center;*/
  margin-bottom:0;
  text-align:right;
}

.formStatusBar {
    background-color: #FCF8E3;
    border: 1px solid #FBEED5;
    border-radius: 4px 4px 4px 4px;
    color: #C09853;
    font-size:14px;
    margin-bottom: 18px;
    padding: 8px 20px;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
}

.formStatusBarZeroOpacity {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s 5s, opacity 3s linear;
  -moz-transition: visibility 0s 5s, opacity 3s linear;
}

#txnProgressCoreDivId {
  /* Float above all else*/
  z-index:15;
  position:absolute;
  top:180px;
  left:50%;
  margin-left:-270px;

  /* Leave some space at the bootom for long progress-lists */
  padding-bottom:100px;
}

#txnProgressStatusDivId p {
  font-size:14px;
  margin:0;
  /*margin-top:10px;*/
}

#txnProgressFieldSetId {
  width:auto;
  background-color:white;
  border-radius:0px 0px 15px 15px;
}

.statusOk {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #468847;
}

.statusError {
    background-color: #F2DEDE;
    border-color: #EED3D7;
    color: #B94A48;
}

.statusWarning {
  background-color: #FCF8E3;
  border-color: #FBEED5;
  color: #C09853;
}

/* configureServices */
#configureClusterAdvancedCoreDivId .nav-tabs > li > a {
  color:#0088CC;
  outline: 0 none;
  font-size:13px;
}
#configureClusterAdvancedCoreDivId .nav-tabs > .active > a, #configureClusterAdvancedCoreDivId .nav-tabs > .active > a:hover {
  font-weight:bold;
  color:#65B642;
}
#configureClusterAdvancedCoreDivId #buttonAreaDivId {
  background-color:#f0f0f0;
  border:1px solid #dddddd;
  border-width:0 1px 1px 1px;
  border-radius:0 0 4px 4px;
}
#configureClusterAdvancedDynamicRenderDivId #configureServicesTabs {
  margin-top:20px;
}

#configureClusterAdvancedDynamicRenderDivId .tab-content {
  /* height:300px; */
  border:1px solid #dddddd;
  border-width:0 1px 1px 1px;
  padding:40px 0;
}

#configureClusterAdvancedFormId {
  margin:0;
}

#configureClusterAdvancedDynamicRenderDivId .nav {
  margin-bottom:0;
}

#configureClusterAdvancedDynamicRenderDivId .formInputErrorReason {
  color: red;
  display: inline-block;
  margin-bottom: 20px;
  margin-left: 320px;
}
#configureClusterAdvancedCoreDivId #buttonGroupDivId {
  float:right;
  padding:6px 20px;
}
#configureClusterAdvancedCoreDivId #backNextDivId {
  float:left;
  margin-right:20px;
}
#configureClusterAdvancedCoreDivId #configureClusterAdvancedSubmitButtonId {
  /* width:100px; */
  width:300px;
}
#configureClusterAdvancedCoreDivId .contextualHelp {
  width:280px;
}
/* END configure services */


/* Add a scrollbar only to the body of the YUI Panel, keeping the locations of
 * the Header and Footer fixed (and always visible).
 */
#informationalPanelContainerDivId .yui3-widget-bd {
    max-height:400px;
    min-height:80px;
    padding:15px;
    overflow-x:hidden;
    overflow-y:auto;
}

#informationalPanelContainerDivId .yui3-widget-hd {
  background: #f0f0f0;
  border-bottom: 1px solid #DDDDDD;
  box-shadow: 0 1px 0 #FFFFFF inset;
  border-radius:6px 6px 0 0;
  padding: 9px 15px;
  font-size: 18px;
  line-height: 27px;
  color:#333333;
  font-weight:bold;
}

#informationalPanelContainerDivId .yui3-widget-ft {
  background-color: #F5F5F5;
  border-radius: 0 0 6px 6px;
  border-top: 1px solid #DDDDDD;
  box-shadow: 0 1px 0 #FFFFFF inset;
  margin-bottom: 0;
  padding: 14px 15px 15px;
  text-align: right;
}

#informationalPanelContainerDivId .yui3-widget-ft .yui3-button {
    -moz-border-bottom-colors: none;
    -moz-border-image: none;
    -moz-border-left-colors: none;
    -moz-border-right-colors: none;
    -moz-border-top-colors: none;
    background-color: #F5F5F5;
    background-image: -ms-linear-gradient(top, white, #E6E6E6);
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white),
     to(#E6E6E6) );
    background-image: -webkit-linear-gradient(top, white, #E6E6E6);
    background-image: -o-linear-gradient(top, white, #E6E6E6);
    background-image: linear-gradient(top, white, #E6E6E6);
    background-image: -moz-linear-gradient(top, white, #E6E6E6);
    background-repeat: repeat-x;
    border-color: #CCCCCC #CCCCCC #B3B3B3;
    border-radius: 4px 4px 4px 4px;
    border-style: solid;
    border-width: 1px;
    box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
    color: #333333;
    cursor: pointer;
    display: inline-block;
    font-size: 13px;
    line-height: 18px;
    margin-bottom: 0;
    padding: 4px 10px;
    text-align: center;
    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
    vertical-align: middle;
}

#informationalPanelContainerDivId .yui3-widget-ft .yui3-button:hover {
  color: #333333;
  text-decoration: none;
  background-color: #e6e6e6;
  *background-color: #d9d9d9;
  /* Buttons in IE7 don't get borders, so darken on hover */

  background-position: 0 -15px;
  -webkit-transition: background-position 0.1s linear;
  -moz-transition: background-position 0.1s linear;
  -ms-transition: background-position 0.1s linear;
  -o-transition: background-position 0.1s linear;
  transition: background-position 0.1s linear;
}

#informationalPanelContainerDivId .yui3-widget-ft .yui3-button:active {
  background-color: #e6e6e6;
  background-color: #d9d9d9 \9;
  background-image: none;
  outline: 0;
  -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
  -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
  box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
}

#informationalPanelContainerDivId .yui3-widget-ft .okButton {
  color: #FFFFFF;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #5bb75b;
  background-image: -moz-linear-gradient(top, #62c462, #51a351);
  background-image: -ms-linear-gradient(top, #62c462, #51a351);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
  background-image: -o-linear-gradient(top, #62c462, #51a351);
  background-image: linear-gradient(top, #62c462, #51a351);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
  border-color: #51a351 #51a351 #387038;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  *background-color: #51a351;
  /* Darken IE7 buttons by default so they stand out more given they won't have borders */

  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
}

#informationalPanelContainerDivId .yui3-widget-ft .okButton:hover,
#informationalPanelContainerDivId .yui3-widget-ft .okButton:active {
  color: #FFFFFF;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #51a351;
  *background-color: #499249;
}

#informationalPanelContainerDivId .yui3-panel-content {
  box-shadow:none;
  border:none;  
  border-radius:6px;
}

#informationalPanelContainerDivId .yui3-widget-content-expanded {
  height:auto;
}

#informationalPanelContainerDivId .yui3-widget-mask {
  opacity:0.7;
}

.yui3-panel:focus {
  outline:0 none;
}

#confirmationDataPanelBodyContent {
  font-size:13px;
}

#manageServicesDisplayDepsOnAction {
  margin-top:30px;
}

.loadingImg {
  display: block;
  margin: auto;
}

.centered {
  position: fixed; 
  left: 50%; 
  top: 50%;
}

#configureClusterInputContainerDivId {
  float:left;
  width:400px;
  margin:20px 0 0 80px;
}

#configureClusterDisplayDivId {
  float:left;
  width:40%;
  opacity: 0.7;
  margin-left:10px;
}

#configureClusterCoreDivId #previewLinkId {
  color:#0088CC;
  font-size:13px; 
}

#configureClusterMountPointsDisplayDivId {
  margin:20px; 
}

#configureClusterMountPointsDisplayDivId label {
  font-weight:bold;
  font-size:14px;
}

#configureClusterMountPointsDisplayDivId .formElement {
  margin-top:20px;
  width:auto;
}

.formInputError, input[type="text"].formInputError {
  border-color: #F53907;
  /*background-color: #F17879;*/
}

.formInputErrorReason {
  display: inline-block;
  margin-left: 10px;
  color: red;
}

#configureClusterAdvancedDynamicRenderDivId .formInputErrorReason {
  color: red;
    display: inline-block;
    margin-bottom: 20px;
    margin-left: 320px;
}
/* END common3 */
/* BEGIN selectHosts */
#serviceMastersLinksDivId {
  width:40%;
  float:left;
}

.aServiceMasterLink {
  display:block;
  border: 1px solid #B2B299;
  clear:left;
  float: left;
  width:100%;
  height:35px;
  background-color: #DBDBDB;
  color:white;
  margin-bottom:15px;
}

.aServiceMasterLinkVisited {
  display:block;
  border: 1px solid #B2B299;
  clear:left;
  float: left;
  width:100%;
  height:35px;
  background-color: green;
  color:white;
  margin-bottom:15px;
  font-weight:bold;
}

#nodeGroupsCoreDivId {
  border: 1px solid #B2B299;
  float:left;
  width:100%;
}

#nodeListDynamicId {
  border: 1px solid #B2B299;
  text-align:center;
  /* display:inline-block; */
}

#nodeGroupsTable {
  margin:5px;
  overflow:auto;
}

.nodeGroupTitle {
  font-weight:bold;
  font-size:1.2em;
  padding:5px;
  background-color:#B2B299;
  color:white;
}

.nodeList {
  display:block;
  margin:5px;
  width:40%;
  margin-left:50%;
}

.aNodeGroup {
  /*overflow:auto;*/
  padding:10px;
  width:500px;
  float:left;
}

.slotBucket {
  margin:5px;
  display:block;
  float:left;
}

.slotTitle {
  display:block;
}

.slot {
  border: 1px solid #B2B299;
  min-height:50px;

  /* Color transition */
  transition: background-color 1s cubic-bezier(.09, .99, .37, .98);
  -moz-transition: background-color 1s cubic-bezier(.09, .99, .37, .98);    /* FF3.7+ */
  -o-transition: background-color 1s cubic-bezier(.09, .99, .37, .98) ;      /* Opera 10.5 */
  -webkit-transition: background-color 1s cubic-bezier(.09, .99, .37, .98) ; /* Saf3.2+, Chrome */
}

.slotHover {
  border: 1px solid #B2B299;
  min-height:50px;
 /* background-color: #00CC00; */
  background-color:#F0F0E8;
}

.yui3-dd-drop-over {
 /* background-color: #00CC00; */
  background-color:#F0F0E8;
}

.masterDiv {
  border:1px solid green;
  margin:3px;
  padding:10px;
  cursor:move;
  /* background-color: #00CC00; */
  background-color:#65B642;
  border-radius:4px 4px 4px 4px;
  color:white;
  font-weight:bold;
  width:180px;
}

#selectServiceMastersSubmitButtonId {
  clear:both;
}

.nodeAssignmentWrapper {
  display:block;
  padding:3px;

  /* Color transition */
  transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98);
  -moz-transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98);    /* FF3.7+ */
  -o-transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98) ;      /* Opera 10.5 */
  -webkit-transition: background-color 0.5s cubic-bezier(.09, .99, .37, .98) ; /* Saf3.2+, Chrome */
}

.nodeAssignmentWrapperHover {
  display:block;
  padding:3px;
  /* background-color: #00CC00; */
  background-color: #F0F0E8;
}

.nodeAssignment {
  display:inline-block;
}

.nodeAssignmentHover {
  display:inline-block;
}
/* END selectHosts */
/* BEGIN clusters */
#clustersNavigationLinksDivId {
  width: 100%;
  text-align: center;
  margin: 0px auto;
  margin-bottom: 8px;
}

#clustersNavigationLinksListId {
  margin:0;
  padding:0;
  text-align:center;
  height:50px;
}

#clustersNavigationLinksListId li {
  display: inline-block;
  width: auto;
  padding: 5px;
  margin: 2px;
  cursor: default;
}

#clustersHostRoleMappingFieldsetId {
  margin-left: auto;
  margin-right: auto;
  width: 300px;
}
/* END clusters */
/* BEGIN manageServices */
#serviceManagementCoreDivId {
  width: 400px;
  margin-left:20px;
}

.serviceManagementGroup {
  margin-bottom:20px;
}

.serviceManagementGroup h2 {
  font-size:16px;
}

.serviceManagementEntry {
padding: 14px 14px;
margin: 0 0 10px;
list-style: none;
background-color: #FBFBFB;
background-image: -moz-linear-gradient(top, white, whiteSmoke);
background-image: -ms-linear-gradient(top, white, whiteSmoke);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), to(whiteSmoke));
background-image: -webkit-linear-gradient(top, white, whiteSmoke);
background-image: -o-linear-gradient(top, white, whiteSmoke);
background-image: linear-gradient(top, white, whiteSmoke);
background-repeat: repeat-x;
border: 1px solid #DDD;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
filter: progid:dximagetransform.microsoft.gradient(startColorstr='white', endColorstr='whiteSmoke', GradientType=0);
-webkit-box-shadow: inset 0 1px 0 white;
-moz-box-shadow: inset 0 1px 0 white;
box-shadow: inset 0 1px 0 white;
}

.serviceManagementEntry:hover {
}

.serviceManagementEntry:hover a {
}

.serviceManagementEntryStarted {
  color: green;
}

.serviceManagementEntryStopped {
  color:red;
}

.serviceManagementEntryInstalled {
  color: green;
}

.serviceManagementEntryUninstalled {
  color:red;
  opacity: 0.3;

  /* Make links within .serviceManagementEntryUninstalled not look like links. */
  pointer-events: none;
  cursor: text;
}

.serviceManagementEntryNameContainer {
  /* Reznor's
  font-weight: bold;
  font-size: 20px;
  */
  font-size: 15px;
}

a.serviceManagementEntryName {
  display:inline-block;
  border:0px solid black;
  width:180px;
  color:#333333;
 
/* Temporarily make links within .serviceManagementEntryName not look like links. */
  pointer-events: none;
  text-decoration: none;
  cursor: text;
}


.serviceManagementEntryStateContainer {
  display:inline-block;
  font-size:15px;
  margin-left:0px;
  border:0px solid black;
}

.serviceManagementEntryActionsContainer {
  float: right;
  margin-top:-4px;
}

.serviceManagementEntryActionStart {
  width:20px;
  margin-right:4px;
}

.serviceManagementEntryActionStop {
  width:20px;
  margin-right:4px;
}

.serviceManagementEntryActionReconfigure {
  width:20px;
}

.serviceManagementEntryActionReconfigure.disabled {
  visibility:hidden;
}


#serviceManagementGlobalActionsDivId {
  margin-left:90px;
}

ul#serviceManagementListId,
.serviceManagementGroup ul {
  list-style:none outside none;
  margin:0;
}
/* END manageServices */
