/*
 * Copyright 2015 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 -- Group View -- CSS file
 */

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

#ov-group div.ctrl-btns {
}

.light #ov-group .current-view use {
    fill: white;
}
.dark #ov-group .current-view use {
    fill: #304860;
}

.light #ov-group .current-view rect {
    fill: deepskyblue;
}
.dark #ov-group .current-view rect {
    fill: #eee;
}

.light #ov-group tr:nth-child(4n + 1),
.light #ov-group tr:nth-child(4n + 2) {
    background-color: #eee;
}
.light #ov-group tr:nth-child(4n + 3),
.light #ov-group tr:nth-child(4n) {
    background-color: #ddd;
}
.dark #ov-group tr:nth-child(4n + 1),
.dark #ov-group tr:nth-child(4n + 2) {
    background-color: #444;
}
.dark #ov-group tr:nth-child(4n + 3),
.dark #ov-group tr:nth-child(4n) {
    background-color: #333;
}

/* highlighted color */
.light #ov-group tr:nth-child(4n + 1).data-change,
.light #ov-group tr:nth-child(4n + 2).data-change,
.light #ov-group tr:nth-child(4n + 3).data-change,
.light #ov-group tr:nth-child(4n).data-change {
    background-color: #FDFFDC;
}
.dark #ov-group tr:nth-child(4n + 1).data-change,
.dark #ov-group tr:nth-child(4n + 2).data-change,
.dark #ov-group tr:nth-child(4n + 3).data-change,
.dark #ov-group tr:nth-child(4n).data-change {
    background-color: #5A5600;
}

#ov-group td.buckets {
    padding-left: 36px;
    opacity: 0.65;
}
