.#{$prefix}root {
    -webkit-text-size-adjust: none;

    @if $enable-font-smoothing {
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }

    &, *, :after, :before {
        box-sizing: border-box;
    }
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

html.#{$prefix}has-viewport,
.#{$prefix}has-viewport > body {
    margin: 0;
    width: 100%;
    height: 100%;
}

html.#{$prefix}fixed-viewport,
.#{$prefix}fixed-viewport > body {
    // position: fixed serves a couple of purposes:
    //
    // 1. on iOS it prevents elastic overscroll of the viewport but it can only be used
    // when the viewport is not scalable, i.e. user-scalable=no, because the viewport will
    // not size correctly if the body is "position: fixed" and zoom level != 1
    //
    // 2. On android it prevents the url bar from scrolling out of view.  This is necessary
    // to ensure the viewport sizes correctly when zoomed in.
    // https://sencha.jira.com/browse/EXTJS-26132
    position: fixed;
}

@media print {
    // If the body is position: fixed it will only print the first page.
    // https://sencha.jira.com/browse/EXTJS-25494
    html.#{$prefix}has-unscalable-viewport,
    .#{$prefix}has-unscalable-viewport > body {
        position: static;
    }
}

.#{$prefix}user-selectable-all {
    -webkit-user-select: all;
    -moz-user-select: all;
    -ms-user-select: all;
    user-select: all;
}

.#{$prefix}user-selectable-auto {
    -webkit-user-select: auto;
    -moz-user-select: auto;
    -ms-user-select: text;
    user-select: auto;
}

.#{$prefix}user-selectable-none {
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

.#{$prefix}user-selectable-text {
    -webkit-user-select: text;
    -moz-user-select: text;
    -ms-user-select: text;
    user-select: text;
}

.#{$prefix}focused {
    outline: none;
}

.#{$prefix}maximized {
    width: 100% !important;
    height: 100% !important;

    max-width: 100% !important;
    max-height: 100% !important;

    left: 0 !important;
    top: 0 !important;

    // to handle csstransform translatables (like floated components)
    transform: translate3d(0, 0, 0) !important;
}

@-ms-viewport {
    // prevent scaling on windows8 tablets when using portrait orientation
    width: device-width;
}

@-webkit-keyframes x-loading-spinner-rotate {
    0%{     -webkit-transform: rotate(0deg);   }
    8.32%{  -webkit-transform: rotate(0deg);   }

    8.33%{  -webkit-transform: rotate(30deg);  }
    16.65%{ -webkit-transform: rotate(30deg);  }

    16.66%{ -webkit-transform: rotate(60deg);  }
    24.99%{ -webkit-transform: rotate(60deg);  }

    25%{    -webkit-transform: rotate(90deg);  }
    33.32%{ -webkit-transform: rotate(90deg);  }

    33.33%{ -webkit-transform: rotate(120deg); }
    41.65%{ -webkit-transform: rotate(120deg); }

    41.66%{ -webkit-transform: rotate(150deg); }
    49.99%{ -webkit-transform: rotate(150deg); }

    50%{    -webkit-transform: rotate(180deg); }
    58.32%{ -webkit-transform: rotate(180deg); }

    58.33%{ -webkit-transform: rotate(210deg); }
    66.65%{ -webkit-transform: rotate(210deg); }

    66.66%{ -webkit-transform: rotate(240deg); }
    74.99%{ -webkit-transform: rotate(240deg); }

    75%{    -webkit-transform: rotate(270deg); }
    83.32%{ -webkit-transform: rotate(270deg); }

    83.33%{ -webkit-transform: rotate(300deg); }
    91.65%{ -webkit-transform: rotate(300deg); }

    91.66%{ -webkit-transform: rotate(330deg); }
    100%{   -webkit-transform: rotate(330deg); }
}

@keyframes x-loading-spinner-rotate {
    0%{     transform: rotate(0deg);   }
    8.32%{  transform: rotate(0deg);   }

    8.33%{  transform: rotate(30deg);  }
    16.65%{ transform: rotate(30deg);  }

    16.66%{ transform: rotate(60deg);  }
    24.99%{ transform: rotate(60deg);  }

    25%{    transform: rotate(90deg);  }
    33.32%{ transform: rotate(90deg);  }

    33.33%{ transform: rotate(120deg); }
    41.65%{ transform: rotate(120deg); }

    41.66%{ transform: rotate(150deg); }
    49.99%{ transform: rotate(150deg); }

    50%{    transform: rotate(180deg); }
    58.32%{ transform: rotate(180deg); }

    58.33%{ transform: rotate(210deg); }
    66.65%{ transform: rotate(210deg); }

    66.66%{ transform: rotate(240deg); }
    74.99%{ transform: rotate(240deg); }

    75%{    transform: rotate(270deg); }
    83.32%{ transform: rotate(270deg); }

    83.33%{ transform: rotate(300deg); }
    91.65%{ transform: rotate(300deg); }

    91.66%{ transform: rotate(330deg); }
    100%{   transform: rotate(330deg); }
}

.#{$prefix}shim {
    position: absolute;
    left: 0;
    top: 0;
    overflow: hidden;
    @include opacity(0);
}

.#{$prefix}css-shadow {
    position: absolute;
    @include border-radius($css-shadow-border-radius);
}

.#{$prefix}shadow {
    -webkit-box-shadow: $shadow;
    box-shadow: $shadow;
}

@if ($enable-floated-shadows) {
    .#{$prefix}floated {
        @extend .#{$prefix}shadow;
    }
}

.#{$prefix}no-shadow {
    -webkit-box-shadow: none !important;
    box-shadow: none !important;
}

.#{$prefix}floating {
    position: absolute !important;
}

.#{$prefix}center {
    @include absolute-position();
    display: flex;
    align-items: center;
    justify-content: center;

    > * {
        position: relative;
    }

    > .#{$prefix}floating {
        position: relative !important;
	}
}

.#{$prefix}fullscreen {
    position: absolute !important;
}

@if ($enable-status-bar-padding) {
    // Must a native iOS app (not standalone)
    // Must not be phone AND landscape (status bar disappears in landscape for phones)
    .#{$prefix}ios-native:not(.#{$prefix}phone.#{$prefix}landscape) {
        padding-top: 20px;
    }
}

.#{$prefix}font-icon {
    font-weight: normal;
    // Flexbox layout is used to vertically center the icon inside the element.
    // The pseudo el below may or may not be the same size as the icon element's font-size
    // therefore we cannot rely on line-height: 1 to vertically center the icon.
    // If block behavior is needed, use flex instead of inline-flex.
    display: inline-flex;
    vertical-align: top;
    align-items: center;
    justify-content: center;

    &:before {
        display: flex;
        line-height: 1;
        font-style: normal;
        text-transform: none;
        letter-spacing: normal;
        word-wrap: normal;
        white-space: nowrap;
        direction: ltr;

        /* Support for all WebKit browsers. */
        -webkit-font-smoothing: antialiased;

        /* Support for Firefox. */
        -moz-osx-font-smoothing: grayscale;

        /* Roboto uses ligatures.  Android and IE seem to need this */
        font-feature-settings: 'liga';

        /* Support for Safari and Chrome. */
        text-rendering: optimizeLegibility;
    }
}

.#{$prefix}noborder-l {
    border-left-width: 0 !important;
}

.#{$prefix}noborder-b {
    border-bottom-width: 0 !important;
}

.#{$prefix}noborder-bl {
    border-bottom-width: 0 !important;
    border-left-width: 0 !important;
}

.#{$prefix}noborder-r {
    border-right-width: 0 !important;
}

.#{$prefix}noborder-rl {
    border-right-width: 0 !important;
    border-left-width: 0 !important;
}

.#{$prefix}noborder-rb {
    border-right-width: 0 !important;
    border-bottom-width: 0 !important;
}

.#{$prefix}noborder-rbl {
    border-right-width: 0 !important;
    border-bottom-width: 0 !important;
    border-left-width: 0 !important;
}

.#{$prefix}noborder-t {
    border-top-width: 0 !important;
}

.#{$prefix}noborder-tl {
    border-top-width: 0 !important;
    border-left-width: 0 !important;
}

.#{$prefix}noborder-tb {
    border-top-width: 0 !important;
    border-bottom-width: 0 !important;
}

.#{$prefix}noborder-tbl {
    border-top-width: 0 !important;
    border-bottom-width: 0 !important;
    border-left-width: 0 !important;
}

.#{$prefix}noborder-tr {
    border-top-width: 0 !important;
    border-right-width: 0 !important;
}

.#{$prefix}noborder-trl {
    border-top-width: 0 !important;
    border-right-width: 0 !important;
    border-left-width: 0 !important;
}

.#{$prefix}noborder-trb {
    border-top-width: 0 !important;
    border-right-width: 0 !important;
    border-bottom-width: 0 !important;
}

.#{$prefix}noborder-trbl {
    border-width: 0 !important;
}

// Reset default button element focus styling.
// This class is used by many components: Button, Tab, Tool, etc;
// hence shared in base Component SASS
.#{$prefix}button-reset {
    margin: 0;
    padding: 0;
    border: none;
    font: inherit;
    color: inherit;
    background: none;
    
    &:focus {
        outline: none;
    }
    
    // See https://bugzilla.mozilla.org/show_bug.cgi?id=140562
    .#{$prefix}gecko &::-moz-focus-inner {
        padding: 0;
        border: none;
    }
}

.#{$prefix}component {
    position: relative;
}
