/*
 * Copyright 2016-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 (theme) -- CSS file
 */

.light #app-dialog p {
    color: darkred;
}
.dark #app-dialog p {
    color: #c55;
}

.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;
}

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

.light .close-btn svg.embeddedIcon .icon.plus .glyph {
    fill: #aaa;
}
.dark .close-btn svg.embeddedIcon .icon.plus .glyph {
    fill: #ccc;
}

#application-details-panel td.label,
#application-details-panel .app-url i {
    /* works for both light and dark themes ... */
    color: #777;
}

.light #application-details-panel hr {
    opacity: .5;
    border-color: #FFF;
}
.dark #application-details-panel hr {
    border-color: #666;
}

.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;
}

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

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