/*
 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer.
 * 2. Redistributions in binary form must reproduce the above
 *    copyright notice, this list of conditions and the following
 *    disclaimer in the documentation and/or other materials
 *    provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */

.css-named-flow-collections-view .split-view-sidebar {
    overflow-x: hidden;
}

.css-named-flow-collections-view .tabbed-pane-header {
    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(236, 236, 236)), to(rgb(217, 217, 217)));
}

.css-named-flow-collections-view .info {
    font-style: italic;
    font-size: 10px;
    margin-top: -5px;
    position: absolute;
    top: 50%;
    text-align: center;
    width: 100%;
}

.css-named-flow-collections-view .split-view-sidebar .sidebar-content {
    bottom: 0;
    left: 0;
    padding: 0;
    position: absolute;
    right: 0;
    top: 23px;
}

.css-named-flow-collections-view .split-view-sidebar .selection {
    margin-left: -12px;
    z-index: 0;
}

.css-named-flow-collections-view .split-view-contents .title {
    position: relative;
}

.css-named-flow-collections-view .split-view-sidebar .named-flow-overflow::before,
.css-named-flow-collections-view .region-empty:before,
.css-named-flow-collections-view .region-fit::before,
.css-named-flow-collections-view .region-overset::before {
    cursor: default;
    float: left;
    height: 10px;
    margin-top: 1px;
    opacity: 0.75;
    position: relative;
    vertical-align: middle;
    z-index: 1;
}

.css-named-flow-collections-view .split-view-sidebar .named-flow-overflow::before {
    content: url(Images/namedFlowOverflow.png);
    margin: 2px 3px 0 -13px;
}

.css-named-flow-collections-view .region-empty::before {
    content: url(Images/regionEmpty.png);
}

.css-named-flow-collections-view .region-fit::before {
    content: url(Images/regionFit.png);
}

.css-named-flow-collections-view .region-overset::before {
    content: url(Images/regionOverset.png);
}

.css-named-flow-collections-view .split-view-contents .named-flow-element {
    margin: 0 0 0 -24px;
}
