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

.header-area {
    left: 0;
    position: absolute;
    width: 100%;
    z-index: 999;
    top: 40px;
    padding: 0 15px;
    height: 120px;
    background-color: transparent;
    -webkit-transition-duration: 700ms;
    transition-duration: 700ms;
}

.menu-area {
    position: relative;
    z-index: 2;
}

.menu-area #nav .nav-link {
    color: #1b1464;
    display: block;
    font-size: 15px;
    -webkit-transition-duration: 500ms;
    transition-duration: 500ms;
    padding: 0 15px;
}

.menu-area .dropdown-menu.show {
    border: none;
    box-shadow: 3px 5px 12px rgba(0, 0, 0, 0.15);
}

.menu-area .dropdown-item {
    font-size: 14px;
    font-weight: 700;
    color: #9597a6;
}

.menu-area #nav .nav-link:hover,
.menu-area #nav .nav-item.active .nav-link,
.menu-area .dropdown-item:hover {
    color: rgb(57,181,74);
}

.nav-item {
    margin: 2px;
}

.navbar-nav {
    -webkit-transition-duration: 500ms;
    transition-duration: 500ms;
}

.header-area.sticky {
    background-color: white;
    box-shadow: 0 10px 10px -10px rgba(0, 0, 0, 0.15);
    height: 80px;
    position: fixed;
    top: 40px;
    z-index: 999;
}

.dropdown-menu {
    min-width:15rem;
}

.header-social-buttons a {
    font-size:16pt;
    color:#1b1464;
    margin-left:8px;
    margin-right:8px;
}