/*
 * Copyright 2015-present Open Networking Laboratory
 *
 * Licensed 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.
 */

/*
 ONOS GUI -- Applications View -- CSS file
 */

#ov-app h2 {
    display: inline-block;
}

#ov-app div.ctrl-btns {
    width: 290px;
}

#ov-app form#inputFileForm,
#ov-app input#uploadFile {
    display: none;
}

#app-dialog p {
    font-size: 12pt;
}
.light #app-dialog p {
    color: darkred;
}
.dark #app-dialog p {
    color: #c55;
}

#app-dialog p.strong {
    font-weight: bold;
}
.light #app-dialog p.strong {
    color: red;
    background-color: #ff0;
}
.dark #app-dialog p.strong {
    color: #c55;
    background-color: #dd4;
}


.light #app-dialog.floatpanel.dialog {
    background-color: #fff;
}
.dark #app-dialog.floatpanel.dialog {
    background-color: #444;
}

#application-details-panel.floatpanel {
    -moz-border-radius: 0;
    border-radius: 0;
    z-index: 0;
}

.light #application-details-panel.floatpanel {
    background-color: rgb(229, 234, 237);
}
.dark #application-details-panel.floatpanel {
    background-color: #3A4042;
}

#application-details-panel .container {
    padding: 0 10px;
}

#application-details-panel .close-btn {
    position: absolute;
    right: 10px;
    top: 0;
    cursor: pointer;
}
.light .close-btn svg.embeddedIcon .icon.plus .glyph {
    fill: #aaa;
}
.dark .close-btn svg.embeddedIcon .icon.plus .glyph {
    fill: #ccc;
}

#application-details-panel .app-icon {
    display: inline-block;
    padding: 0 6px 0 0;
    vertical-align: middle;
}

#application-details-panel h2 {
    display: inline-block;
    margin: 8px 0;
    font-size: 12pt;
}

#application-details-panel .top .app-title {
    width: 90%;
    height: 45px;
    font-size: 22pt;
    font-weight: bold;
    overflow: hidden;
    white-space: nowrap;
    padding: 0 12px 0 0;
}

#application-details-panel .top div.left {
    float: left;
    padding: 0 12px 0 0;
}
#application-details-panel .top div.right {
    display: inline-block;
    overflow: hidden;
    width: 320px;
}

#application-details-panel td.label,
#application-details-panel .app-url i {
    font-style: italic;
    padding-right: 12px;
    /* works for both light and dark themes ... */
    color: #777;
}

#application-details-panel td.value-bold {
    font-weight: bold;
}

#application-details-panel .app-url {
    padding: 10px 6px 6px;
}

#application-details-panel hr {
    width: 95%;
    margin: 10px auto;
}
.light #application-details-panel hr {
    opacity: .5;
    border-color: #FFF;
}
.dark #application-details-panel hr {
    border-color: #666;
}

#application-details-panel .bottom table {
    border-spacing: 0;
    width: 100%;
}

#application-details-panel .bottom td {
    padding: 6px 12px;
    text-align: left;
}

.light #application-details-panel .bottom tr:nth-child(odd) {
    background-color: #f9f9f9;
}
.light #application-details-panel .bottom tr:nth-child(even) {
    background-color: #EBEDF2;
}
.dark #application-details-panel .bottom tr:nth-child(odd) {
    background-color: #333;
}
.dark #application-details-panel .bottom tr:nth-child(even) {
    background-color: #555;
}

.dropping {

}

.light div.dropping {
    border: solid 3px deepskyblue;
}

.dark div.dropping {
    border: solid 3px deepskyblue;
}
