/*
 * Copyright 2016-present Open Networking Foundation
 *
 * 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 -- Topology View (layout) -- CSS file
 */

#mast {
    position: relative;
    z-index: 1000;
}

/* --- Base SVG Layer --- */

#ov-topo2 svg {
    /* prevents the little cut/copy/paste square that would appear on iPad */
    -webkit-user-select: none;
}


/* --- "No Devices" Layer --- */

#ov-topo2 svg #topo2-noDevsLayer {
    visibility: hidden;
}

#ov-topo2 svg #topo2-noDevsLayer text {
    font-size: 60pt;
    font-style: italic;
}

#breadcrumbs {
    font-size: 13px;
    position: absolute;
    padding: 10px 20px;
    left: 0;
    top: 48px;
    width: 100%;
}

#breadcrumbs .breadcrumb {
    display: inline-block;
    margin-right: 5px;
}

#breadcrumbs .breadcrumb a {
    cursor: pointer;
}

#breadcrumbs .breadcrumb:after {
    content: '»';
    pointer-events: none;
    line-height: 20px;
    margin-left: 5px;
}

#breadcrumbs .breadcrumb:last-child a {
    pointer-events: none;
    font-weight: 600;
}

#breadcrumbs .breadcrumb:last-child:after {
    display: none;
}

#topo2-p-instance.floatpanel {
    top: 104px;
}

.breadcrumb--hidden #topo2-p-instance.floatpanel {
    top: 64px;
}

#topo2-p-instance .instTitle {
    font-size: 11pt;
    font-weight: bold;
    font-variant: small-caps;
    text-transform: uppercase;
}

/* -- Base Device Styles -- */
#ov-topo2 svg .node {
    cursor: pointer;
    fill-rule: evenodd;
}

/* --- Topo Summary Panel --- */

#topo2-p-summary {
    padding: 16px;
}


/* --- Topo Detail Panel --- */

#topo2-p-detail {
    padding: 16px;
    top: 370px;
}
html[data-platform='iPad'] #topo2-p-detail {
    top: 386px;
}

#topo2-p-detail .actionBtns .actionBtn {
    display: inline-block;
}
#topo2-p-detail .actionBtns .actionBtn svg {
    width: 28px;
    height: 28px;
}


/* --- general topo2-panel styling --- */

.topo2-p div.header {
    margin-bottom: 10px;
}

.topo2-p div.header div.icon {
    vertical-align: middle;
    display: inline-block;
}
.topo2-p div.body {
    overflow-y: scroll;
}

.topo2-p div.body::-webkit-scrollbar {
    display: none;
}

.topo2-p svg {
    display: inline-block;
    width: 26px;
    height: 26px;
}


.topo2-p h2 {
    padding: 0 0 0 10px;
    margin: 0;
    font-weight: lighter;
    word-wrap: break-word;
    display: inline-block;
    vertical-align: middle;
}

.topo2-p h3 {
    padding: 0 4px;
    margin: 0;
    word-wrap: break-word;
    top: 20px;
    left: 50px;
}

.topo2-p p,
.topo2-p table {
    padding: 0;
    margin: 0;
    width: 100%;
}

.topo2-p td {
    word-wrap: break-word;
}
.topo2-p td.label {
    font-weight: bold;
    padding: 0 10px 0 0;
}
.topo2-p td.value {
    padding: 0;
}

#topo2-p-summary  td.label {
    width: 50%;
}

#topo2-p-detail  div.actionBtns {
    padding-top: 6px;
}

.topo2-p hr {
    height: 1px;
    border: 0;
    margin: 4px -3px;
}

/* --- Toolbar --- */

#toolbar-topo2-toolbar {
    padding: 6px;
}

#toolbar-topo2-toolbar .tbar-row.right {
    width: 100%;
}

#toolbar-topo2-toolbar .tbar-row-text {
    height: 21px;
    text-align: right;
    padding: 8px 60px 0 0;
    font-style: italic;
}