@use 'sass:map';
@use 'config' as *;

:root,
:host {
  // Direction multiplier for physical transforms (1 = LTR, -1 = RTL)
  --dir: 1;

  // Fonts
  --font-monospace: #{$font-family-monospace};
  --font-sans-serif: #{$font-family-sans-serif};
  --font-serif: #{$font-family-serif};
  --font-comic: #{$font-family-comic};

  // Gray colors
  --gray-50: #{$gray-50};
  --gray-100: #{$gray-100};
  --gray-200: #{$gray-200};
  --gray-300: #{$gray-300};
  --gray-400: #{$gray-400};
  --gray-500: #{$gray-500};
  --gray-600: #{$gray-600};
  --gray-700: #{$gray-700};
  --gray-800: #{$gray-800};
  --gray-900: #{$gray-900};
  --gray-950: #{$gray-950};

  --white: #{$white};
  --white-lt: color-mix(in oklab, var(--white) 10%, transparent);
  --black: #{$black};
  --gray: #{$gray-600};
  --gray-dark: #{$gray-800};
  // `.shape-*` runs over `$colors`, which carries these three on top of the
  // theme colors; the `-lt` tint below is generated for the theme colors only.
  --black-lt: color-mix(in oklab, var(--black) 10%, transparent);
  --gray-lt: color-mix(in oklab, var(--gray) 10%, transparent);
  --gray-dark-lt: color-mix(in oklab, var(--gray-dark) 10%, transparent);
  --dark: #{$dark};
  --light: #{$light};

  // Brand colors
  --brand: #{$primary};

  // Theme colors
  @each $name, $color in map.merge($theme-colors, $social-colors) {
    --#{$name}: #{$color};
    --#{$name}-fg: #{if(sass(contrast-ratio($color) > $min-contrast-ratio): var(--light); else: var(--dark))};
    --#{$name}-darken: #{adjust-lightness-css(var(--#{$name}), -6%)};
    --#{$name}-lt: color-mix(in oklab, var(--#{$name}) 10%, transparent);
    --#{$name}-200: color-mix(in oklab, var(--#{$name}) 20%, transparent);
  }

  // Gray colors
  @each $name, $color in $gray-colors {
    --#{$name}-fg: var(--#{$name});
  }

  // Spacers
  @each $name, $value in $spacers {
    --spacer-#{$name}: #{$value};
  }

  // Icons
  --icon-size: #{$icon-size};

  // Font sizes
  @each $name, $value in $font-weights {
    --font-weight-#{$name}: #{$value};
  }

  @each $name, $value in $font-sizes {
    --font-size-h#{$name}: #{$value};
  }

  @each $name, $value in $line-heights {
    --line-height-#{$name}: #{$value};
  }

  // Shadows
  --shadow-color: #{$box-shadow-color};
  @each $name, $value in $box-shadows {
    --shadow#{if(sass($name): '-#{$name}'; else: '')}: #{$value};
  }

  // Border radiuses
  --border-radius-scale: 1;
  @each $name, $value in $border-radiuses {
    @if $name {
      --border-radius-#{$name}: calc(#{$value} * var(--border-radius-scale, 1));
    } @else {
      --border-radius: #{$value};
    }
  }

  // Buttons and form controls: one scale, in the names Bootstrap 6 uses
  // scss-docs-start btn-input-css-vars
  --btn-input-fg: var(--body-color);
  --btn-input-bg: var(--bg-forms);
  --btn-input-padding-y: #{$input-btn-padding-y};
  --btn-input-padding-x: #{$input-btn-padding-x};
  --btn-input-font-size: #{$input-btn-font-size};
  --btn-input-line-height: #{$input-btn-line-height};
  --btn-input-border-radius: var(--border-radius);
  --btn-input-min-height: calc(var(--btn-input-line-height) + var(--btn-input-padding-y) * 2 + #{$input-btn-border-width} * 2);

  --btn-input-sm-padding-y: #{$input-btn-padding-y-sm};
  --btn-input-sm-padding-x: #{$input-btn-padding-x-sm};
  --btn-input-sm-font-size: #{$input-btn-font-size-sm};
  --btn-input-sm-line-height: #{$input-btn-line-height-sm};
  --btn-input-sm-border-radius: var(--border-radius-sm);
  --btn-input-sm-min-height: calc(var(--btn-input-sm-line-height) + var(--btn-input-sm-padding-y) * 2 + #{$input-btn-border-width} * 2);

  --btn-input-lg-padding-y: #{$input-btn-padding-y-lg};
  --btn-input-lg-padding-x: #{$input-btn-padding-x-lg};
  --btn-input-lg-font-size: #{$input-btn-font-size-lg};
  --btn-input-lg-line-height: #{$input-btn-line-height-lg};
  --btn-input-lg-border-radius: var(--border-radius-lg);
  --btn-input-lg-min-height: calc(var(--btn-input-lg-line-height) + var(--btn-input-lg-padding-y) * 2 + #{$input-btn-border-width} * 2);

  --btn-input-xl-padding-y: #{$input-btn-padding-y-xl};
  --btn-input-xl-padding-x: #{$input-btn-padding-x-xl};
  --btn-input-xl-font-size: #{$input-btn-font-size-xl};
  --btn-input-xl-line-height: #{$input-btn-line-height-xl};
  --btn-input-xl-border-radius: var(--border-radius);
  --btn-input-xl-min-height: calc(var(--btn-input-xl-line-height) + var(--btn-input-xl-padding-y) * 2 + #{$input-btn-border-width} * 2);
  // scss-docs-end btn-input-css-vars

  // Checks, radios and switches: shared state colors, in the names Bootstrap 6 uses
  // scss-docs-start control-state-css-vars
  --control-checked-bg: #{$form-check-input-checked-bg-color};
  --control-checked-border-color: #{$form-check-input-checked-border-color};
  --control-disabled-bg: #{$input-disabled-bg};
  --control-disabled-opacity: #{$form-check-input-disabled-opacity};
  // scss-docs-end control-state-css-vars

  // Backdrops
  --backdrop-opacity: #{$backdrop-opacity};
  --backdrop-bg: #{$backdrop-bg};
  @each $name, $value in $backdrops {
    --backdrop-bg#{if(sass($name): '-#{$name}'; else: '')}: #{$value};
  }
  --backdrop-blur: #{$backdrop-blur};
  --backdrop-filter: blur(var(--backdrop-blur));
}

[dir='ltr'] {
  --dir: 1;
}

[dir='rtl'] {
  --dir: -1;
}
