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

html, body {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
    font-family: Lucida Sans,Lucida Grande,Arial !important;
    font-size: 13px !important;
    background: white;
    color: #333;
}

body {
    overflow-y: auto;
    overflow-x: hidden;
}

#pageLayout, #main {
    height: 100%;
    padding: 0;
    margin: 0px;
    overflow: visible;
}

#main {
    width:80%;
    padding:5px;
    overflow: visible;
}

#tree {
    width:20%;
}

#tree, #tree .dijitTree {
    overflow: visible;
}

.clear {
    clear: both;
}

.hidden {
    display: none;
}

button {
	-webkit-transition: background-color 0.2s linear;
	border-radius:4px;
	-moz-border-radius: 4px 4px 4px 4px;
	-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
	background-color: #E4F2FF;
	background-position: center top;
	background-repeat: repeat-x;
	border: 1px solid #769DC0;
	padding: 2px 8px 4px;
	font-size:1em;
}

button:hover {
	background-color: #AFD9FF;
	color: #000000;
}

h1 {
	font-size:1.5em;
}

#header {
    height:100px;
    background:url("../images/qpid-logo.png") left center no-repeat;
    float: left;
    width: 300px;
}

.logo {
    text-align:left;
    vertical-align: top;
    font-weight:600;
    height: 90px;
    padding-left: 200px;
    padding-top: 1px;
    padding-bottom: 10px;
    font-size:14px;
    font-family:"Verdana", cursive;
}

.footer {
    color:#000000;
    clear:both;
    text-align:center;
    font-size:11px;
    line-height:17px;

}

div .messages {
	width: 100%;
	height: 350px;
}

.formBox {
    margin: 10px 5px;
}

.formBox legend {
    font-weight: bold;
    margin-left: 5px;
    background-color: white;
}

.formBox fieldset {
    padding: 5px;
    border: .1em solid lightgrey;
    border-radius: 5px;
}

.formLabel-labelCell, .tableContainer-labelCell {
    width: 300px;
    font-weight: bold;
}

.tableContainer-labelCell {
    float: none;
}

.formLabel-labelCell {
    margin-left: 5px;
    float: left;
   }

.formValue-valueCell {
    float: left;
}

.formBox .addPermittedNodeList {
    width: 15em;
}

.formBox .addPermittedNodeList select {
    width: 100%;
}

.formLabel-controlCell {
  padding: 1px;
  float: left;
}


.columnDefDialogButtonIcon {
  background: url("../dojo/dojox/grid/enhanced/resources/images/sprite_icons.png") no-repeat;
    background-position: -260px 2px;
    width: 14px;
    height: 14px;
}

.logViewerIcon {
  background: url("../images/log-viewer.png") no-repeat;
    width: 14px;
    height: 16px;
}

.downloadLogsIcon {
  background: url("../images/download.png") no-repeat;
    width: 14px;
    height: 14px;
}

.dojoxGridFBarClearFilterButtontnIcon
{
    background: url("../dojo/dojox/grid/enhanced/resources/images/sprite_icons.png") no-repeat;
    background-position: -120px -18px;
    width: 14px;
    height: 14px;
}

.rowNumberLimitIcon
{
    background: url("../dojo/dojox/grid/enhanced/resources/images/sprite_icons.png") no-repeat;
    background-position: -240px -18px;
    width: 14px;
    height: 14px;
}

.gridRefreshIcon
{
    background: url("../images/refresh.png") no-repeat;
    width: 16px;
    height: 16px;
}

.gridAutoRefreshIcon
{
    background: url("../images/auto-refresh.png") no-repeat;
    width: 16px;
    height: 16px;
}

.redBackground tr{ background-color:#ffdcd7 !important; background-image: none !important;}
.yellowBackground tr{background-color:#fbfddf !important; background-image: none !important;}
.grayBackground tr{background-color:#eeeeee !important; background-image: none !important;}
.dojoxGridRowOdd.grayBackground tr{ background-color:#e9e9e9 !important; background-image: none !important;}
.dojoxGridRowOdd.yellowBackground tr{background-color:#fafdd5 !important; background-image: none !important;}
.dojoxGridRowOdd.redBackground tr{background-color:#f4c1c1 !important; background-image: none !important;}

.preferencesIcon
{
    background: url("../images/gear.png") no-repeat;
    width: 16px;
    height: 16px;
}

.helpIcon
{
    background: url("../images/help.png") no-repeat;
    width: 16px;
    height: 16px;
}

.loadingIcon
{
    background: url("../dojo/dojox/image/resources/images/loading.gif") no-repeat;
    width: 16px;
    height: 16px;
    background-size: contain;
    display: inline-block;
}

.loadedIcon
{
    background: url("../dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png") no-repeat;
    background-position: -352px -0px;
    width: 16px;
    height: 16px;
    display: inline-block;
}

.fileUpload
{
    float: right;
    padding: 5px;
}

.infoMessage
{
    padding: 5px;
    font-style: italic;
}

.alignLeft {
    float: left !important;
    display: inline-block;
}

.alignRight {
    float: right !important;
    display: inline-block;
}

.multiLineValue {
    display: inline-block;
}

.haOptionLabel {
    font-weight: bold;
    margin-left: 5px;
}

.editNoteBanner {
    font-style: italic;
    margin: 0px 0px 10px 5px;
}

#errorDialog {
    overflow: auto;
    width: 400px;
}

.errorDialogErrorPrimary {
    font-weight: bold;
    margin-bottom: 10px;
    max-width: 350px;
}

.errorDialogErrorSecondary {
    font-style: italic;
}

/* Required to keep queue type radio buttons on one line when dialog adds scrollbar */
#addQueue {
    overflow: auto;
    width: 630px;
}

#authenticatedUserControls {
    max-width: 300px;
}

.claro .dojoxCheckedMultiSelectWrapper  {
    height: auto;
}

.claro .dojoxCheckedMultiSelect .dojoxCheckedMultiSelectWrapper {
    border: none;
    background-color: transparent;
}

.dijitMultiSelect {
    width : 14.75em;
}

.highlightedText
{
    font-weight: bold;
}

.normalText
{
    font-weight: normal;
}

.contextEditor
{
    margin-left:5px;
    margin-right:5px;
}

.editorPanel
{
    margin:5px;
}

.dialogGrid
{
    width:100%;
    max-height: 140px;
    overflow: auto;
}

.qpidDialogPaneActionBar
{
    margin-left:-10px;
    margin-right:-10px;
    margin-bottom:-10px;
    margin-top:5px;
}

.warningPane
{
    font-weight: bold;
    color: #f44444;
    padding: 1em 0em 1em 3.2em;
    background: url("../images/warning-yellow.svg") left center no-repeat;
    background-size: 3em;
    vertical-align: middle;
    width: 100%;
    height: 100%;
}

.infoPane
{
    margin-left: 5px;
    padding: 5px 5px 5px 1.2em;
    font-style: italic;
    background:url("../images/notification.svg") no-repeat left center;
    background-size: 1em;
    width:100%;
    height:100%;
}

.dgrid-column-selected
{
    width: 2em;
}

.dgrid-column-attributeName
{
   width: auto;
}

.selectGrid
{
    height:20em;
}

.criteriaPanelTitle
{
    padding:0px !important;
}

.criteriaPanelTitleText
{
    vertical-align: middle !important;
}

.criteriaPanelTitleButton
{
  margin: 0px !important;
}

.criteriaControl
{
    margin-bottom: 5px !important;
}

.criteriaControl.dijitTextBoxReadOnly
{
  width:100%;
}

.criteriaControl.dijitTextBoxReadOnly,
.claro .criteriaControl.dijitTextBoxReadOnly,
.claro .criteriaControl.dijitTextBoxReadOnlyFocused .dijitInputContainer
{
  background-color: #efefef !important;
  background-image: none !important;
}

.advancedSearchItem
{
   width: 100%;
   margin: 0px;
   padding: 2px 0px 2px 0px;
   vertical-align: middle;
}
.searchLabel {
   text-align: right;
   vertical-align: middle;
   padding: 0.2em;
   min-width: 3.5em;
}

col.searchLabel, td.searchLabel {
     width: 3.5em;
}

td.advancedSearchField, col.autoWidth {
    width: auto;
}

.claro.qpid #message-content-preview textarea,
.claro.qpid .formLabel-controlCell textarea,
.claro.qpid .advancedSearchField textarea {
    width: 100%;
    padding: 0px;
    box-sizing: border-box;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    -ms-box-sizing: border-box;
    resize: vertical;
}

.claro.qpid .advancedSearchField textarea {
    height: 1.6em;
}

.criteriaCondition
{
  vertical-align: top;
}

.informationMessage
{
    font-weight: bold;
    padding: 1em 0em 1em 3.2em;
    background: url("../images/notification.svg") left center no-repeat;
    background-size: 3em;
    vertical-align: middle;
    width: 100%;
    height: 100%;
}

.confirmationMessage
{
    font-weight: bold;
    padding: 1em 0em 1em 3.2em;
    background: url("../images/question.svg") left center no-repeat;
    background-size: 3em;
    vertical-align: middle;
    width: 100%;
    height: 100%;
}

.queryToolBar {
    background-color: #efefef;
    background-image: linear-gradient(rgba(255, 255, 255, 0.7) 0%, rgba(255, 255, 255, 0) 100%);
    background-repeat: repeat-x;
    border-bottom: 1px solid #b5bcc7;
    padding: 2px 0 2px 4px;
}

.queryToolBar .dijitToolbar
{
    padding: 0px; !important;
    border-bottom: none !important;
    background-image:  none !important;
    background-color: inherit !important;
    background-repeat: inherit !important;
}

.claro.qpid .dgrid-header .dgrid-cell { font-weight: normal; }
.virtualHostConnections .field-name { width: 20%; }
.virtualHostConnections .field-principal { width: 10% }
.virtualHostConnections .field-port { width: 10% }
.virtualHostConnections .field-transport { width: 10% }
.virtualHostConnections .field-sessionCount { width: 10% }
.virtualHostConnections .field-msgInRate { width: 10% }
.virtualHostConnections .field-bytesInRate { width: 10% }
.virtualHostConnections .field-msgOutRate { width: 10% }
.virtualHostConnections .field-bytesOutRate { width: 10% }

.radioButtonIndent {
    padding-left: 20px;
    padding-top: 5px;
    padding-bottom: 5px;
}

.claro.qpid .dgrid-pagination .dgrid-page-link {
    color: #5D88AF;
    font-weight: normal;
}

.claro.qpid .dgrid-pagination .dgrid-page-disabled {
    color: black;
    font-weight: bold;
}

.claro.qpid  .dgrid-hider-toggle {
      background-position: -32px -192px;
}

.claro #login.dijitToolbar {
    padding-bottom: 5px;
    padding-top: 4px;
}

.userIcon.ui-icon {
    background-position: -146px -98px;
}

.advancedViewIcon.ui-icon {
    background-position: -176px -112px;
    width: 16px;
    height: 16px;
}

.trashIcon.ui-icon {
    background-position: -180px -98px;
}

.claro .searchBox {
    padding-right: 16px;
    padding-left: 16px;
    position: relative;
    width: 12.5em;
}

.claro .searchBox span.search.ui-icon {
    width: 16px;
    height: 16px;
    z-index: 1000;
    background-position: -160px -112px;
    position: absolute;
    left: 0px;
    top: 0px;
    -moz-transform: scaleX(-1);
    -o-transform: scaleX(-1);
    -webkit-transform: scaleX(-1);
    transform: scaleX(-1);
    filter: FlipH;
    -ms-filter: "FlipH";
}

.claro .searchBox a.clear.ui-icon {
    display: block;
    overflow: hidden;
    text-indent: -1000px;
    position: absolute;
    right: 0px;
    top: 0px;
    z-index: 1000;
    cursor: pointer;
    width: 16px;
    height: 16px;
    background-position: -80px -128px;
}

.claro .searchBox a.clear:hover {
    background: url('../dojo/dgrid/css/images/ui-icons_ffffff_256x240.png')  no-repeat;
    background-position: -80px -128px;
    background-color: #D3D3D3;
}

.includeNoDataWarning .dgrid-no-data {
    color: #aaa;
    font-size: 3em;
    padding: 3em;
    text-align: center;
}

.claro .dojoxPortletIcon.preferenceAccessIcon,
.claro .dojoxPortletIcon.preferenceAccessHoverIcon
{
    background: url("../dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png") no-repeat;
    background-position: -240px;
    width: 15px;
    height: 15px;
}

.claro .dojoxPortletIcon.dashboardWidgetSettingsIcon,
.claro .dojoxPortletIcon.dashboardWidgetSettingsHoverIcon
{
    background: url("../dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png") no-repeat;
    background-position: -112px;
    width: 15px;
    height: 15px;
}

/*
 This establish new block formatting context
 See https://www.w3.org/TR/CSS21/visuren.html#block-formatting
*/
.fillRemaining
{
    overflow:hidden;
    float:none;
}

.addIcon
{
    background: url("../images/plus.svg") left center no-repeat;
    width: 15px;
    height: 15px;
    background-size: 1em;
}

#message-content-preview{
    width: 100%;
    height: 10.2em;
}

#message-content-preview .dgrid,
#message-content-preview textarea
{
    height: 10em;
}
