| /** | 
 |  * Should the tabsheet content changes be animated. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | $v-tabsheet-content-animation-enabled: $v-animations-enabled !default; | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the global selectors and properties for the TabSheet component - styles which are  | 
 |  * considered mandatory for the component to work properly. | 
 |  * | 
 |  * @param {string} $primary-stylename (v-tabsheet) - the primary style name for the selectors | 
 |  * | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-global ($primary-stylename: v-tabsheet) { | 
 |   .#{$primary-stylename}-hidetabs > .#{$primary-stylename}-tabcontainer, | 
 |   .#{$primary-stylename}-spacertd, | 
 |   .v-disabled .#{$primary-stylename}-scroller, | 
 |   .#{$primary-stylename} .v-disabled .#{$primary-stylename}-caption-close { | 
 |     display: none; | 
 |   } | 
 |  | 
 |   .#{$primary-stylename} { | 
 |     overflow: visible !important; | 
 |     position: relative; | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-tabcontainer { | 
 |     table, | 
 |     tbody, | 
 |     tr { | 
 |       display: inline-block; | 
 |       border-spacing: 0; | 
 |       border-collapse: collapse; | 
 |       vertical-align: top; | 
 |     } | 
 |  | 
 |     td { | 
 |       display: inline-block; | 
 |       padding: 0; | 
 |     } | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-tabs { | 
 |     white-space: nowrap; | 
 |     @include box-sizing(border-box); | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-content { | 
 |     position: relative; | 
 |  | 
 |     > div > .v-scrollable { | 
 |       @include valo-panel-adjust-content-margins; | 
 |     } | 
 |   } | 
 |  | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the selectors and properties for the TabSheet component. | 
 |  * | 
 |  * @param {string} $primary-stylename (v-tabsheet) - the primary style name for the selectors | 
 |  * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component | 
 |  * | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet ($primary-stylename: v-tabsheet, $include-additional-styles: contains($v-included-additional-styles, tabsheet)) { | 
 |   .#{$primary-stylename} { | 
 |     &:not(.v-has-width) { | 
 |       width: auto !important; | 
 |     } | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-spacertd { | 
 |     display: none !important; | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-tabcontainer { | 
 |     @include valo-tabsheet-tabcontainer-style($primary-stylename); | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-tabitemcell { | 
 |     @include valo-tabsheet-tabitemcell-style($primary-stylename); | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-scroller { | 
 |     @include valo-tabsheet-scroller-style($primary-stylename); | 
 |   } | 
 |  | 
 |  | 
 |   @if $v-tabsheet-content-animation-enabled { | 
 |     .#{$primary-stylename}-tabsheetpanel > .v-scrollable > .v-widget { | 
 |       @include valo-animate-in-fade(300ms); | 
 |     } | 
 |  | 
 |     $spinner-size: round($v-unit-size/2); | 
 |     $spinner-size: $spinner-size + $spinner-size % 2; | 
 |  | 
 |     .#{$primary-stylename}-deco { | 
 |       @include valo-spinner($size: $spinner-size); | 
 |       display: none; | 
 |       position: absolute; | 
 |       z-index: 1; | 
 |       bottom: 50%; | 
 |       margin-bottom: round($v-unit-size/-2) - $spinner-size/2; | 
 |       left: 50%; | 
 |       margin-left: $spinner-size/-2; | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-loading .#{$primary-stylename}-deco { | 
 |       display: block; | 
 |     } | 
 |   } | 
 |  | 
 |  | 
 |   @if $include-additional-styles { | 
 |     .#{$primary-stylename}-equal-width-tabs { | 
 |       @include valo-tabsheet-equal-width-tabs-style($flex: false); | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-framed { | 
 |       @include valo-tabsheet-framed-style; | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-centered-tabs { | 
 |       @include valo-tabsheet-align-tabs-style($align: center); | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-right-aligned-tabs { | 
 |       @include valo-tabsheet-align-tabs-style($align: right); | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-padded-tabbar { | 
 |       @include valo-tabsheet-padded-tabbar-style; | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-icons-on-top { | 
 |       @include valo-tabsheet-icons-on-top-style; | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-compact-tabbar { | 
 |       > .#{$primary-stylename}-tabcontainer-compact-tabbar .v-caption { | 
 |         line-height: 1.8; | 
 |       } | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-only-selected-closable { | 
 |       @include valo-tabsheet-only-selected-closable-style; | 
 |     } | 
 |   } | 
 |  | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for the tabcontainer element of a tabsheet. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-tabcontainer-style ($primary-stylename: v-tabsheet) { | 
 |   position: relative; | 
 |   @include box-sizing(border-box); | 
 |  | 
 |   &:before { | 
 |     content: ""; | 
 |     position: absolute; | 
 |     height: 0; | 
 |     // iOS panics with background color, creating black line artifacts | 
 |     border-top: max(1px, first-number($v-border)) solid first-color(valo-border($color: $v-app-background-color, $strength: 0.5)); | 
 |     bottom: 0; | 
 |     left: 0; | 
 |     right: 0; | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-tabs { | 
 |     position: relative; | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for the tabitemcell element of a tabsheet. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-tabitemcell-style ($primary-stylename: v-tabsheet) { | 
 |   vertical-align: bottom; | 
 |  | 
 |   .#{$primary-stylename}-tabitem { | 
 |     line-height: 0; | 
 |     overflow: hidden; | 
 |   } | 
 |  | 
 |   .v-caption { | 
 |     margin-left: round($v-unit-size/2); | 
 |     padding: 0 round($v-unit-size/10); | 
 |     @include box-sizing(border-box); | 
 |     cursor: pointer; | 
 |     text-align: center; | 
 |     line-height: $v-unit-size; | 
 |     font-size: round($v-font-size * 0.95); | 
 |     font-weight: $v-font-weight; | 
 |     color: valo-font-color($v-app-background-color, 0.58); | 
 |     width: auto !important; | 
 |     overflow: hidden; | 
 |     text-overflow: ellipsis; | 
 |     border-bottom: max(1px, first-number($v-border))*2 solid transparent; | 
 |     position: relative; | 
 |  | 
 |     @if $v-animations-enabled { | 
 |       @include transition(border-bottom 200ms, color 200ms); | 
 |     } | 
 |  | 
 |     .v-captiontext { | 
 |       display: inline; | 
 |     } | 
 |  | 
 |     .v-icon + .v-captiontext { | 
 |       margin-left: round($v-unit-size/4); | 
 |     } | 
 |  | 
 |     &:hover { | 
 |       color: $v-selection-color; | 
 |     } | 
 |  | 
 |     &.v-disabled { | 
 |       @include opacity($v-disabled-opacity); | 
 |       cursor: default; | 
 |       color: inherit !important; | 
 |     } | 
 |   } | 
 |  | 
 |   &:first-child .v-caption, | 
 |   &[aria-hidden="true"] + td .v-caption { | 
 |     margin-left: 0; | 
 |   } | 
 |  | 
 |   &:focus { | 
 |     outline: none; | 
 |  | 
 |     .v-caption { | 
 |       color: $v-selection-color; | 
 |     } | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-tabitem-selected .v-caption.v-caption { | 
 |     border-bottom-color: $v-selection-color; | 
 |     color: $v-selection-color; | 
 |   } | 
 |  | 
 |   .v-caption-closable { | 
 |     padding-right: round($v-unit-size/10) + round($v-font-size * 1.1); | 
 |   } | 
 |  | 
 |   &.icons-on-top .v-caption-closable { | 
 |     padding-right: round($v-unit-size/10); | 
 |   } | 
 |  | 
 |   .#{$primary-stylename}-caption-close { | 
 |     position: absolute; | 
 |     right: 0; | 
 |     top: 50%; | 
 |     margin: round($v-font-size / -2) 0 0; | 
 |     font-size: round($v-font-size * 1.1); | 
 |     line-height: round($v-font-size * 1.1); | 
 |     width: round($v-font-size * 1.1); | 
 |     text-align: center; | 
 |     border-radius: round($v-border-radius/2); | 
 |     color: valo-font-color($v-app-background-color, 0.4); | 
 |  | 
 |     &:hover { | 
 |       background: rgba(#000, .03); | 
 |       color: $v-selection-color; | 
 |     } | 
 |  | 
 |     &:active { | 
 |       background: $v-selection-color; | 
 |       color: valo-font-color($v-selection-color); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for the tab scroller element of a tabsheet. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-scroller-style ($primary-stylename: v-tabsheet) { | 
 |   $border-color: first-color(valo-border($strength: 0.5)); | 
 |  | 
 |   position: absolute; | 
 |   top: 0; | 
 |   right: 0; | 
 |   bottom: 0; | 
 |   padding-left: round($v-unit-size/2); | 
 |   @include linear-gradient(to left, $v-background-color 70%, rgba($v-background-color, 0) 100%, $fallback: transparent); | 
 |   pointer-events: none; | 
 |  | 
 |   &:after { | 
 |     content: ""; | 
 |     height: first-number($v-border); | 
 |     position: absolute; | 
 |     bottom: 0; | 
 |     left: 0; | 
 |     right: 0; | 
 |     display: block; | 
 |     @include linear-gradient(to left, $border-color 70%, rgba($border-color, 0) 100%, $fallback: transparent); | 
 |   } | 
 |  | 
 |   .v-ie8 &, | 
 |   .v-ie9 & { | 
 |     background-color: $v-background-color; | 
 |  | 
 |     &:after { | 
 |       background-color: $border-color; | 
 |     } | 
 |   } | 
 |  | 
 |   button { | 
 |     @include appearance(none); | 
 |     border: none; | 
 |     background: transparent; | 
 |     font: inherit; | 
 |     color: inherit; | 
 |     height: 100%; | 
 |     margin: 0; | 
 |     padding: 0 round($v-unit-size/4); | 
 |     outline: none; | 
 |     cursor: pointer; | 
 |     pointer-events: auto; | 
 |     @include opacity(.5); | 
 |  | 
 |     &:hover { | 
 |       @include opacity(1); | 
 |       color: $v-selection-color; | 
 |     } | 
 |  | 
 |     &:active { | 
 |       @include opacity(.7); | 
 |       color: $v-selection-color; | 
 |     } | 
 |  | 
 |     &::-moz-focus-inner { | 
 |       padding: 0; | 
 |       border: 0 | 
 |     } | 
 |   } | 
 |  | 
 |   [class*="Next"] { | 
 |     padding-left: round($v-unit-size/8); | 
 |     &:before { | 
 |       @include valo-tabsheet-scroller-next-icon-style; | 
 |     } | 
 |   } | 
 |  | 
 |   [class*="Prev"] { | 
 |     padding-right: round($v-unit-size/8); | 
 |     &:before { | 
 |       @include valo-tabsheet-scroller-prev-icon-style; | 
 |     } | 
 |   } | 
 |  | 
 |   [class*="disabled"] { | 
 |     cursor: default; | 
 |     color: inherit !important; | 
 |     @include opacity(.1, true); | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the font icon styles for the previous button element of a tabsheet scroller. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-scroller-prev-icon-style { | 
 |   font-family: ThemeIcons; | 
 |   content: "\f053"; | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the font icon styles for the next button element of a tabsheet scroller. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-scroller-next-icon-style { | 
 |   font-family: ThemeIcons; | 
 |   content: "\f054"; | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for the framed tabsheet style. | 
 |  *  | 
 |  * @param {string} $primary-stylename (v-tabsheet) - The primary style name for the selectors | 
 |  * @param {bool} $frame-inactive-tabs (true) - Should inactive tabs be framed as well (the active tab is always framed with this style) | 
 |  * @param {bool} $outer-frame (true) - Should the frame contain the whole tabsheet (i.e. tabbar and tab content). If false, works like a "borderless" style. | 
 |  * @param {size} $tab-spacing ($v-unit-size/10) - The spacing between tabs | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-framed-style ($primary-stylename: v-tabsheet, $frame-inactive-tabs: true, $outer-frame: true, $tab-spacing: round($v-unit-size/10)) { | 
 |   > .#{$primary-stylename}-tabcontainer { | 
 |     .v-caption { | 
 |       margin-left: $tab-spacing or first-number($v-border) * -1; | 
 |       padding: 0 $v-layout-spacing-horizontal; | 
 |       background-color: $v-app-background-color; | 
 |       border: first-number($v-border) solid transparent; | 
 |       line-height: $v-unit-size - first-number($v-border); | 
 |       border-radius: $v-border-radius $v-border-radius 0 0; | 
 |       font-weight: $v-font-weight + 100; | 
 |  | 
 |       @if $v-animations-enabled { | 
 |         @include transition(background-color 160ms); | 
 |       } | 
 |  | 
 |       &:hover { | 
 |         background-color: darken($v-app-background-color, 3%); | 
 |         border-bottom-color: first-color(valo-border($color: $v-app-background-color, $strength: 0.5)); | 
 |       } | 
 |  | 
 |       &.v-disabled:hover { | 
 |         background-color: $v-app-background-color; | 
 |       } | 
 |     } | 
 |  | 
 |     .v-caption-closable { | 
 |       padding-right: $v-layout-spacing-horizontal + round($v-font-size * 1.1); | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-caption-close { | 
 |       top: round($v-font-size/4); | 
 |       right: round($v-font-size/4); | 
 |       margin-top: 0; | 
 |     } | 
 |  | 
 |     td:first-child .v-caption, | 
 |     [aria-hidden="true"] + td .v-caption { | 
 |       margin-left: 0; | 
 |     } | 
 |  | 
 |     @if $frame-inactive-tabs { | 
 |       .#{$primary-stylename}-tabitem .v-caption { | 
 |         border-color: first-color(valo-border($color: $v-app-background-color, $strength: 0.5)); | 
 |       } | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-tabitem-selected .v-caption { | 
 |       background: $v-panel-background-color; | 
 |       border-color: first-color(valo-border($color: $v-app-background-color, $strength: 0.5)); | 
 |       border-bottom: none; | 
 |       padding-bottom: first-number($v-border); | 
 |     } | 
 |   } | 
 |  | 
 |   > .#{$primary-stylename}-content { | 
 |     // iOS panics with black line artifacts, | 
 |     // moving the background color to an inner element fixes it | 
 |     > div { | 
 |       background: $v-panel-background-color; | 
 |     } | 
 |  | 
 |     @if $outer-frame { | 
 |       border: valo-border($color: $v-app-background-color, $strength: 0.5); | 
 |       border-top: none; | 
 |     } | 
 |   } | 
 |  | 
 |   &.padded-tabbar { | 
 |     > .#{$primary-stylename}-tabcontainer { | 
 |       @if $outer-frame { | 
 |         border: valo-border($color: $v-app-background-color, $strength: 0.5); | 
 |         border-bottom: none; | 
 |       } | 
 |  | 
 |       background: $v-background-color; | 
 |       padding-top: round($v-unit-size/6); | 
 |     } | 
 |   } | 
 |  | 
 |   &.icons-on-top { | 
 |     > .#{$primary-stylename}-tabcontainer .#{$primary-stylename}-tabitem-selected .v-caption { | 
 |       padding-bottom: round($v-unit-size/6) + first-number($v-border); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for a tabsheet where the tabs are aligned to the position specified by the parameter in the tabbar. | 
 |  *  | 
 |  * @param {string} $primary-stylename (v-tabsheet) - The primary style name for the selectors | 
 |  * @param {string} $align (center) - The alignment of the tabs inside the tabbar. Possible values: left, right, center. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-align-tabs-style ($primary-stylename: v-tabsheet, $align: center) { | 
 |   > .#{$primary-stylename}-tabcontainer { | 
 |     text-align: $align; | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for a tabsheet where all tabs in the tabbar have equal width and span the entire width of the tabbar. | 
 |  *  | 
 |  * @param {string} $primary-stylename (v-tabsheet) - The primary style name for the selectors | 
 |  * @param {bool} $flex (false) - Should the size of the tabs be proportional to their content, i.e. should the available space in the tabbar be distributed to the tabs in relation to their content sizes. | 
 |  *  | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-equal-width-tabs-style ($primary-stylename: v-tabsheet, $flex: false) { | 
 |   > .#{$primary-stylename}-tabcontainer { | 
 |     table, | 
 |     tbody, | 
 |     tr { | 
 |       width: 100%; | 
 |     } | 
 |  | 
 |     tr { | 
 |       display: table; | 
 |       @if $flex == false { | 
 |         table-layout: fixed; | 
 |       } | 
 |     } | 
 |  | 
 |     td { | 
 |       display: table-cell; | 
 |     } | 
 |  | 
 |     .v-caption { | 
 |       margin: 0; | 
 |       display: block; | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for a tabsheet where the icons of individual tabs are on top of the tab captions. | 
 |  *  | 
 |  * @param {string} $primary-stylename (v-tabsheet) - The primary style name for the selectors | 
 |  *   | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-icons-on-top-style ($primary-stylename: v-tabsheet) { | 
 |   > .#{$primary-stylename}-tabcontainer { | 
 |     .v-caption { | 
 |       padding-top: round($v-unit-size/6); | 
 |       padding-bottom: round($v-unit-size/6); | 
 |       line-height: 1.2; | 
 |     } | 
 |  | 
 |     .v-icon { | 
 |       display: block; | 
 |  | 
 |       + .v-captiontext.v-captiontext { | 
 |         margin-left: 0; | 
 |       } | 
 |     } | 
 |  | 
 |     .v-caption-closable { | 
 |       padding-right: $v-layout-spacing-horizontal; | 
 |     } | 
 |  | 
 |     .#{$primary-stylename}-caption-close { | 
 |       top: round($v-font-size/4); | 
 |       margin-top: 0; | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for a tabsheet where only the selected tab has the close button visible.  | 
 |  * Note that the other tabs can still be closed programmatically. | 
 |  *  | 
 |  * @param {string} $primary-stylename (v-tabsheet) - The primary style name for the selectors | 
 |  *   | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-only-selected-closable-style ($primary-stylename: v-tabsheet) { | 
 |   > .#{$primary-stylename}-tabcontainer .#{$primary-stylename}-caption-close { | 
 |     visibility: hidden; | 
 |   } | 
 |  | 
 |   > .#{$primary-stylename}-tabcontainer .#{$primary-stylename}-tabitem-selected .#{$primary-stylename}-caption-close { | 
 |     visibility: visible; | 
 |   } | 
 | } | 
 |  | 
 |  | 
 | /** | 
 |  * Outputs the styles for a tabsheet where the tabbar has increased padding to separate the tabs  | 
 |  * inside it from their surrounding container. | 
 |  *  | 
 |  * @param {string} $primary-stylename (v-tabsheet) - The primary style name for the selectors | 
 |  *   | 
 |  * @group tabsheet | 
 |  */ | 
 | @mixin valo-tabsheet-padded-tabbar-style ($primary-stylename: v-tabsheet) { | 
 |   > .#{$primary-stylename}-tabcontainer .#{$primary-stylename}-tabs { | 
 |     padding: 0 round($v-unit-size/4); | 
 |   } | 
 | } |