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

/* Radios */

@mixin fds-radios-theme($theme) {
    $primaryColor: map-get(map-get($theme, primary), 500);
    $primaryColorHover: map-get(map-get($theme, primary), 100);
    $accentColor: map-get(map-get($theme, accent), 500);
    $accentColorHover: map-get(map-get($theme, accent), 100);

    body[fds] .mat-radio-container {
        height: 12px;
        width: 12px;
    }

    body[fds] .mat-radio-outer-circle {
        height: 12px;
        width: 12px;
        background-color: #fff;
        border: 1px solid $grey7;
    }

    body[fds] .mat-radio-outer-circle:hover {
        background-color: $accentColorHover;
        border-color: $accentColorHover;
    }

    body[fds] .mat-radio-checked .mat-radio-outer-circle {
        border: 1px solid $accentColor;
        background-color: $accentColor;
    }

    body[fds] .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle {
        border-color: $accentColor;
    }

    body[fds] .mat-radio-inner-circle {
        height: 10px;
        width: 10px;
        left: 1px;
        top: 1px;
        background-color: #fff;
    }

    body[fds] .mat-radio-checked .mat-radio-inner-circle {
        background-color: #fff;
    }
}
