/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

panel-collapsible {
    display: flex;
    flex-direction: column;
    border-radius: 0 0 4px 4px;
    background-color: #ffffff;
    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2);

    &[disabled] {
        opacity: 0.5;
    }

    .#{&}__status-icon {
        margin-right: 10px;
        color: #757575;
    }

    .#{&}__heading {
        padding: 30px 20px 30px;
        color: #393939;
        display: flex;
        flex-direction: row;
        align-items: baseline;
        user-select: none;
        cursor: pointer;
        line-height: 1.42857;
    }

    .#{&}__title {
        font-size: 16px;
        margin-right: 8px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    .#{&}__description {
        font-size: 12px;
        color: #757575;
        flex: 1 1;
    }

    .#{&}__actions {
        margin-left: auto;
        flex: 0 0 auto;

        & > panel-actions {
            display: flex;
            flex-direction: row;

            & > * {
                flex: 0 0 auto;
                margin-left: 10px;
            }
        }
    }

    .#{&}__content {
        border-top: 1px solid #dddddd;
        padding: 15px 20px;
        contain: content;
    }
}
