////
/// @group root/variables-cxo
////

@import "components/functions.scss";

 /***************************/
/** Vaadin/Valo-Variables **/

$v-app-loading-text: "OSBP";
$v-unit-size: 32px;

$v-textfield-disabled-opacity: 1;

/* $v-luminance-threshold: 150 !default; */

/* $v-background-color: #3d3b3c; */
$v-app-background-color: #fff;

//// Don't load fontawesome via valo theme
$v-font-awesome: false; 

/// Main color accent of theme; not available as valo variable.
$os-base-color: #2364aa;
/* $valo-menu-background-color: $os-base-color;	//scale-color($v-app-background-color, $lightness: if(color-luminance($v-app-background-color) < 10, 15%, -70%)) !default; */
/* $v-table-background-color: $v-app-background-color; */
$v-focus-color: #ffd210;
$v-font-family: Arial;
/* $v-font-size: 12px; */
$v-line-height: $v-font-size * 1.75; //$os-line-height-factor: 1.6;

$v-loading-indicator-bar-height: $v-unit-size;
$v-loading-indicator-color: transparent;
/* $v-error-indicator-color: #E3DC95; */

/* $v-table-row-height: $v-unit-size; */
$v-default-field-width: make_even($v-unit-size * 11.4); //$v-unit-size * 5 !default;


/// Overriding default-value 0.75 (affects v-grid)
$v-scaling-factor--tiny: 1 !default; //0.75
$v-scaling-factor--small: 0.85 !default;
$v-scaling-factor--large: 1.4 !default;	//1.2
$v-scaling-factor--huge: 1.8 !default; //1.6
/* $os-l-font-factor: 1.4; */
/* $os-xl-font-factor: 1.8; */

/* $v-border: $os-border-width $os-border-style $os-border-color !default; */
/// $v-border default is useless, v-shade doesn't compile for some reason
$v-border: 1px solid get_contrast($strength: 17, $v-app-background-color, $desaturate: false) !default;
/* $v-border-radius: 0px; */

/// Set this for v-layout-margin-* when you're too lazy to type the same value four times.
$os-layout-margin: $v-unit-size;
$v-layout-margin-top:    $os-layout-margin;
$v-layout-margin-left:   $os-layout-margin;
$v-layout-margin-right:  $os-layout-margin;
$v-layout-margin-bottom: $os-layout-margin;
$v-layout-spacing-vertical: make_even($v-unit-size/3) !default;
$v-layout-spacing-horizontal: make_even($v-unit-size/3) !default;

$v-tabsheet-content-animation-enabled: false; //default: true

/// When v-gradient is set to false, still set a gradient in some places.
/* $os-gradient: v-linear 5%; */
/* $v-gradient: false; */
$v-bevel: false;
$os-shadow-range: 7px;
$v-shadow: 1px 3px $os-shadow-range  transparentize(#000, 0.9);
/* $v-textfield-shadow: false; */
/* $v-shadow-opacity: 20% !default; */
/* $v-focus-style: 0 0 0 1px transparent;	//Focus-shadow/glow-color. Default = glow  // 0 0 0 2px rgba($v-focus-color, .5) !default; */
/*$v-hover-styles-enabled: false /*true !default;*/

$v-table-border-radius: $v-border-radius;

 /****************************************/
/*** ADDITIONAL OS-SPECIFIC VARIABLES ***/

/// Can be set and used in places where a theme-variant needs deviating style definitions.
$os-theme-desig: "cxo";

$os-loading-animation: url('load_bar_2.gif');
$os-login-background-image: url('U68NITW3EI_s.jpg');

/** Switches **/
$os-button-uppercase: true;
$os-img-size-override: false;
$os-bordered: true;
$os-cash-zoom-factor: 2;
$os-cash-display-zoom-factor: 3;

$os-odd-highlight: $v-focus-color;
$os-button-as-tab: $v-app-background-color;	//header

$os-light-contrast: get_contrast($strength: 7, $v-app-background-color, $desaturate: false);
$os-mid-contrast: get_contrast($strength: 37, $v-app-background-color, $desaturate: false);
$os-dark-contrast: get_contrast($strength: 67, $v-app-background-color, $desaturate: false);

/* textfield background, table background */

$os-button-color: $os-base-color;
$os-color-contrast: #f8f5f0;
$os-textfield-shade: #f8f5f0;

/// Lighter version of $v-focus-color as textfield background.
$os-focus-color: get_color_mix($v-focus-color, #fff, 50);
$os-base-color-light: get_color_mix($os-base-color, #fff, 50);

$os-splitter-shade: #b2d0e9;
$os-main-header-bg: $os-light-contrast;
$os-sub-header-bg: $os-light-contrast;
$os-h2-shade: $os-base-color;
$os-header-shade-1: $v-focus-color;
$os-header-shade-2: #fffb8e;

/// Used to determine the correct size of font icons according to unit.
$os-font-unit: px;

/// Valo default is border-width. Not enough.
$os-splitter-size: make_even($v-unit-size/2);

/// Override valo defaults.
$os-button-height: $v-unit-size + floor($v-unit-size/2);
/// @todo figure out if this is needed.
$os-button-width: $v-unit-size*7;

/// Only used once so far, but probably still useful.
$os-shadow-reversed: 1px 3px 7px  transparentize(#000, 0.9);
/// @todo replace with valo-text-shadow;
$os-text-shadow: 0px 1px 1px transparentize(#000, 0.8);
