/*
 * 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.
 */

web-console-footer {
    font-size: 12px;

    .#{&}__legal {
        color: rgba(0, 0, 0, 0.54);
    }

    &.web-console-footer__sidebar-closed {
        width: var(--width-narrow);
        border-top: 1px solid #dddddd;
    
        a {
            color: var(--inactive-link-color);
            margin-left: auto;
            margin-right: auto;
            width: 40px;
            height: 40px;
            display: inline-flex;
            align-items: center;
            justify-content: center;

            &:hover, &:focus {
                color: var(--active-link-color);
            }
            [ignite-icon] {
                transform: scale(1.25);
            }
        }
    
        .web-console-footer__sidebar-stuff {
            position: sticky;
            display: grid;
            grid-row-gap: 15px;
            padding-top: 20px;
            padding-bottom: 20px;
        }
    
        .web-console-footer__regular-stuff {
            display: none;
        }
    }

    &.web-console-footer__sidebar-opened {
        width: var(--width-wide);
        display: flex;
        flex-direction: column;
        padding: 27px 18px 27px 27px;

        .web-console-footer__sidebar-stuff {
            display: none;
        }        
    
        .web-console-footer__regular-stuff {
            display: block;
        }
    }
}

.web-console-footer__page-bottom {
    grid-area: footer;
    color: #fafafa;
    background: #393939;
    font-size: 12px;
    font-weight: 300;
    padding: 12px var(--page-side-padding);

    .web-console-footer__sidebar-stuff {
        display: none;
    }

    p {
        margin: 0;
    }

    a {
        color: #ee8e89 !important;
        &:hover, &:focus {
            color: #ee2b27 !important;
        }
    }

    .web-console-footer__legal {
        color: inherit;
    }    
}
