    @use "sass:selector";

    @mixin root($child) {
        @at-root #{selector.unify(&, $child)} {
            @content;
        }
    }   

    // placeholder input
    @mixin tp-placeholder {
        &::-webkit-input-placeholder { /* Chrome/Opera/Safari */
            @content;
        }
        &::-moz-placeholder { /* Firefox 19+ */
            @content;
        }
        &:-moz-placeholder { /* Firefox 4-18 */
            @content;
        }
        &:-ms-input-placeholder { /* IE 10+  Edge*/
            @content;
        }
        &::placeholder{ /* MODERN BROWSER */
            @content;
        }
    }

    // keyframes 
    @mixin tp-keyframes($name) {
        @-webkit-keyframes #{$name} {
            @content; 
        }
        @-moz-keyframes #{$name} {
            @content;
        }
        @-ms-keyframes #{$name} {
            @content;
        }
        @keyframes #{$name} {
            @content;
        } 
    }

    // gradient 
    @mixin tp-gradient($value, $type : "linear") {

        @if $type == linear {
            background-image: -webkit-linear-gradient($value);
            background-image: -moz-linear-gradient($value);
            background-image: -ms-linear-gradient($value);
            background-image: -o-linear-gradient($value);
            background-image:   linear-gradient($value);
          } @else {
            background-image: -webkit-radial-gradient($value);
            background-image: -moz-radial-gradient($value);
            background-image: -ms-radial-gradient($value);
            background-image: -o-radial-gradient($value);
            background-image:   radial-gradient($value);
        }
    }

    // animate 
    @mixin animation($property) {
        -webkit-animation: $property;
           -moz-animation: $property;
            -ms-animation: $property;
             -o-animation: $property;
                animation: $property;
    }

    //backgroud 
    @mixin tp-background {
        background-position: center;
        background-size: cover;
        background-repeat: no-repeat;
    }
      
    // transition specific
    @mixin tp-transition($property: all, $time: .3s,  $func : ease-out) {
        -webkit-transition: $property $time $func;
        -moz-transition: $property $time $func;
        -ms-transition: $property $time $func;
        -o-transition: $property $time $func;
        transition: $property $time $func;
    }
      
    // transition multiple
    @mixin tp-transition-mul($property) {
        -webkit-transition: $property;
        -moz-transition: $property;
        -ms-transition: $property;
        -o-transition: $property;
        transition: $property ;
    }
    
    
    // transform
    @mixin tp-transform($transforms) {
        -webkit-transform: $transforms;
        -moz-transform: $transforms;
        -ms-transform: $transforms;
        -o-transform: $transforms;
        transform: $transforms;
    }

    // Flexbox display
    @mixin flexbox() {
        display: -webkit-box;
        display: -moz-box;
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
    }
        
    