/*
 * 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;
    font-family: Roboto;
    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;
    }
}
