// Utilities

$utilities: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$utilities: map-merge(
  (
    // scss-docs-start utils-vertical-align
    'align': (
        property: vertical-align,
        class: align,
        values: baseline top middle bottom text-bottom text-top,
      ),
    // scss-docs-end utils-vertical-align
    // scss-docs-start utils-float
    'float': (
        responsive: true,
        property: float,
        values: (
          start: left,
          end: right,
          none: none,
        ),
      ),
    // scss-docs-end utils-float
    // Opacity utilities
    // scss-docs-start utils-opacity
    'opacity': (
        property: opacity,
        values: (
          0: 0,
          25: 0.25,
          50: 0.5,
          75: 0.75,
          100: 1,
        ),
      ),
    // scss-docs-end utils-opacity
    // scss-docs-start utils-overflow
    'overflow': (
        property: overflow,
        values: auto hidden visible scroll,
      ),
    // scss-docs-end utils-overflow
    // scss-docs-start utils-display
    'display': (
        responsive: true,
        print: true,
        property: display,
        class: d,
        values: inline inline-block block grid table table-row table-cell flex inline-flex none,
      ),
    // scss-docs-end utils-display
    // scss-docs-start utils-shadow
    'shadow': (
        property: box-shadow,
        class: shadow,
        values: (
          null: $box-shadow,
          sm: $box-shadow-sm,
          lg: $box-shadow-lg,
          none: none,
        ),
      ),
    // scss-docs-end utils-shadow
    // scss-docs-start utils-position
    'position': (
        property: position,
        values: static relative absolute fixed sticky,
      ),
    'top': (
      property: top,
      values: $position-values,
    ),
    'bottom': (
      property: bottom,
      values: $position-values,
    ),
    'start': (
      property: left,
      class: start,
      values: $position-values,
    ),
    'end': (
      property: right,
      class: end,
      values: $position-values,
    ),
    'translate-middle': (
      property: transform,
      class: translate-middle,
      values: (
        null: translate(-50%, -50%),
        x: translateX(-50%),
        y: translateY(-50%),
      ),
    ),
    // scss-docs-end utils-position
    // scss-docs-start utils-borders
    'border': (
        property: border,
        values: (
          null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
            var(--#{$prefix}border-color),
          0: 0,
        ),
      ),
    'border-top': (
      property: border-top,
      values: (
        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
          var(--#{$prefix}border-color),
        0: 0,
      ),
    ),
    'border-end': (
      property: border-right,
      class: border-end,
      values: (
        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
          var(--#{$prefix}border-color),
        0: 0,
      ),
    ),
    'border-bottom': (
      property: border-bottom,
      values: (
        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
          var(--#{$prefix}border-color),
        0: 0,
      ),
    ),
    'border-start': (
      property: border-left,
      class: border-start,
      values: (
        null: var(--#{$prefix}border-width) var(--#{$prefix}border-style)
          var(--#{$prefix}border-color),
        0: 0,
      ),
    ),
    'border-color': (
      property: border-color,
      class: border,
      local-vars: (
        'border-opacity': 1,
      ),
      values: $utilities-border-colors,
    ),
    'border-width': (
      css-var: true,
      css-variable-name: border-width,
      class: border,
      values: $border-widths,
    ),
    'border-opacity': (
      css-var: true,
      class: border-opacity,
      values: (
        10: 0.1,
        25: 0.25,
        50: 0.5,
        75: 0.75,
        100: 1,
      ),
    ),
    // scss-docs-end utils-borders
    // Sizing utilities
    // scss-docs-start utils-sizing
    'width': (
        property: width,
        class: w,
        values: (
          25: 25%,
          50: 50%,
          75: 75%,
          100: 100%,
          auto: auto,
        ),
      ),
    'max-width': (
      property: max-width,
      class: mw,
      values: (
        100: 100%,
      ),
    ),
    'viewport-width': (
      property: width,
      class: vw,
      values: (
        100: 100vw,
      ),
    ),
    'min-viewport-width': (
      property: min-width,
      class: min-vw,
      values: (
        100: 100vw,
      ),
    ),
    'height': (
      property: height,
      class: h,
      values: (
        25: 25%,
        50: 50%,
        75: 75%,
        100: 100%,
        auto: auto,
      ),
    ),
    'max-height': (
      property: max-height,
      class: mh,
      values: (
        100: 100%,
      ),
    ),
    'viewport-height': (
      property: height,
      class: vh,
      values: (
        100: 100vh,
      ),
    ),
    'min-viewport-height': (
      property: min-height,
      class: min-vh,
      values: (
        100: 100vh,
      ),
    ),
    // scss-docs-end utils-sizing
    // Flex utilities
    // scss-docs-start utils-flex
    'flex': (
        responsive: true,
        property: flex,
        values: (
          fill: 1 1 auto,
        ),
      ),
    'flex-direction': (
      responsive: true,
      property: flex-direction,
      class: flex,
      values: row column row-reverse column-reverse,
    ),
    'flex-grow': (
      responsive: true,
      property: flex-grow,
      class: flex,
      values: (
        grow-0: 0,
        grow-1: 1,
      ),
    ),
    'flex-shrink': (
      responsive: true,
      property: flex-shrink,
      class: flex,
      values: (
        shrink-0: 0,
        shrink-1: 1,
      ),
    ),
    'flex-wrap': (
      responsive: true,
      property: flex-wrap,
      class: flex,
      values: wrap nowrap wrap-reverse,
    ),
    'justify-content': (
      responsive: true,
      property: justify-content,
      values: (
        start: flex-start,
        end: flex-end,
        center: center,
        between: space-between,
        around: space-around,
        evenly: space-evenly,
      ),
    ),
    'align-items': (
      responsive: true,
      property: align-items,
      values: (
        start: flex-start,
        end: flex-end,
        center: center,
        baseline: baseline,
        stretch: stretch,
      ),
    ),
    'align-content': (
      responsive: true,
      property: align-content,
      values: (
        start: flex-start,
        end: flex-end,
        center: center,
        between: space-between,
        around: space-around,
        stretch: stretch,
      ),
    ),
    'align-self': (
      responsive: true,
      property: align-self,
      values: (
        auto: auto,
        start: flex-start,
        end: flex-end,
        center: center,
        baseline: baseline,
        stretch: stretch,
      ),
    ),
    'order': (
      responsive: true,
      property: order,
      values: (
        first: -1,
        0: 0,
        1: 1,
        2: 2,
        3: 3,
        4: 4,
        5: 5,
        last: 6,
      ),
    ),
    // scss-docs-end utils-flex
    // Margin utilities
    // scss-docs-start utils-spacing
    'margin': (
        responsive: true,
        property: margin,
        class: m,
        values: map-merge(
            $spacers,
            (
              auto: auto,
            )
          ),
      ),
    'margin-x': (
      responsive: true,
      property: margin-right margin-left,
      class: mx,
      values: map-merge(
          $spacers,
          (
            auto: auto,
          )
        ),
    ),
    'margin-y': (
      responsive: true,
      property: margin-top margin-bottom,
      class: my,
      values: map-merge(
          $spacers,
          (
            auto: auto,
          )
        ),
    ),
    'margin-top': (
      responsive: true,
      property: margin-top,
      class: mt,
      values: map-merge(
          $spacers,
          (
            auto: auto,
          )
        ),
    ),
    'margin-end': (
      responsive: true,
      property: margin-right,
      class: me,
      values: map-merge(
          $spacers,
          (
            auto: auto,
          )
        ),
    ),
    'margin-bottom': (
      responsive: true,
      property: margin-bottom,
      class: mb,
      values: map-merge(
          $spacers,
          (
            auto: auto,
          )
        ),
    ),
    'margin-start': (
      responsive: true,
      property: margin-left,
      class: ms,
      values: map-merge(
          $spacers,
          (
            auto: auto,
          )
        ),
    ),
    // Negative margin utilities
    'negative-margin': (
        responsive: true,
        property: margin,
        class: m,
        values: $negative-spacers,
      ),
    'negative-margin-x': (
      responsive: true,
      property: margin-right margin-left,
      class: mx,
      values: $negative-spacers,
    ),
    'negative-margin-y': (
      responsive: true,
      property: margin-top margin-bottom,
      class: my,
      values: $negative-spacers,
    ),
    'negative-margin-top': (
      responsive: true,
      property: margin-top,
      class: mt,
      values: $negative-spacers,
    ),
    'negative-margin-end': (
      responsive: true,
      property: margin-right,
      class: me,
      values: $negative-spacers,
    ),
    'negative-margin-bottom': (
      responsive: true,
      property: margin-bottom,
      class: mb,
      values: $negative-spacers,
    ),
    'negative-margin-start': (
      responsive: true,
      property: margin-left,
      class: ms,
      values: $negative-spacers,
    ),
    // Padding utilities
    'padding': (
        responsive: true,
        property: padding,
        class: p,
        values: $spacers,
      ),
    'padding-x': (
      responsive: true,
      property: padding-right padding-left,
      class: px,
      values: $spacers,
    ),
    'padding-y': (
      responsive: true,
      property: padding-top padding-bottom,
      class: py,
      values: $spacers,
    ),
    'padding-top': (
      responsive: true,
      property: padding-top,
      class: pt,
      values: $spacers,
    ),
    'padding-end': (
      responsive: true,
      property: padding-right,
      class: pe,
      values: $spacers,
    ),
    'padding-bottom': (
      responsive: true,
      property: padding-bottom,
      class: pb,
      values: $spacers,
    ),
    'padding-start': (
      responsive: true,
      property: padding-left,
      class: ps,
      values: $spacers,
    ),
    // Gap utility
    'gap': (
        responsive: true,
        property: gap,
        class: gap,
        values: $spacers,
      ),
    // scss-docs-end utils-spacing
    // Text
    // scss-docs-start utils-text
    'font-family': (
        property: font-family,
        class: font,
        values: (
          monospace: var(--#{$prefix}font-monospace),
        ),
      ),
    'font-size': (
      rfs: true,
      property: font-size,
      class: fs,
      values: $font-sizes,
    ),
    'font-style': (
      property: font-style,
      class: fst,
      values: italic normal,
    ),
    'font-weight': (
      property: font-weight,
      class: fw,
      values: (
        light: $font-weight-light,
        lighter: $font-weight-lighter,
        normal: $font-weight-normal,
        bold: $font-weight-bold,
        semibold: $font-weight-semibold,
        bolder: $font-weight-bolder,
      ),
    ),
    'line-height': (
      property: line-height,
      class: lh,
      values: (
        1: 1,
        sm: $line-height-sm,
        base: $line-height-base,
        lg: $line-height-lg,
      ),
    ),
    'text-align': (
      responsive: true,
      property: text-align,
      class: text,
      values: (
        start: left,
        end: right,
        center: center,
      ),
    ),
    'text-decoration': (
      property: text-decoration,
      values: none underline line-through,
    ),
    'text-transform': (
      property: text-transform,
      class: text,
      values: lowercase uppercase capitalize,
    ),
    'white-space': (
      property: white-space,
      class: text,
      values: (
        wrap: normal,
        nowrap: nowrap,
      ),
    ),
    'word-wrap': (
      property: word-wrap word-break,
      class: text,
      values: (
        break: break-word,
      ),
      rtl: false,
    ),
    // scss-docs-end utils-text
    // scss-docs-start utils-color
    'color': (
        property: color,
        class: text,
        local-vars: (
          'text-opacity': 1,
        ),
        values: map-merge(
            $utilities-text-colors,
            (
              'muted': $text-muted,
              'black-50': rgba($black, 0.5),
              // deprecated
              'white-50': rgba($white, 0.5),
              // deprecated
              'reset': inherit,
            )
          ),
      ),
    'text-opacity': (
      css-var: true,
      class: text-opacity,
      values: (
        25: 0.25,
        50: 0.5,
        75: 0.75,
        100: 1,
      ),
    ),
    // scss-docs-end utils-color
    // scss-docs-start utils-bg-color
    'background-color': (
        property: background-color,
        class: bg,
        local-vars: (
          'bg-opacity': 1,
        ),
        values: map-merge(
            $utilities-bg-colors,
            (
              'transparent': transparent,
            )
          ),
      ),
    'bg-opacity': (
      css-var: true,
      class: bg-opacity,
      values: (
        10: 0.1,
        25: 0.25,
        50: 0.5,
        75: 0.75,
        100: 1,
      ),
    ),
    // scss-docs-end utils-bg-color
    'gradient': (
        property: background-image,
        class: bg,
        values: (
          gradient: var(--#{$prefix}gradient),
        ),
      ),
    // scss-docs-start utils-interaction
    'user-select': (
        property: user-select,
        values: all auto none,
      ),
    'pointer-events': (
      property: pointer-events,
      class: pe,
      values: none auto,
    ),
    // scss-docs-end utils-interaction
    // scss-docs-start utils-border-radius
    'rounded': (
        property: border-radius,
        class: rounded,
        values: (
          null: var(--#{$prefix}border-radius),
          0: 0,
          1: var(--#{$prefix}border-radius-sm),
          2: var(--#{$prefix}border-radius),
          3: var(--#{$prefix}border-radius-lg),
          4: var(--#{$prefix}border-radius-xl),
          5: var(--#{$prefix}border-radius-2xl),
          circle: 50%,
          pill: var(--#{$prefix}border-radius-pill),
        ),
      ),
    'rounded-top': (
      property: border-top-left-radius border-top-right-radius,
      class: rounded-top,
      values: (
        null: var(--#{$prefix}border-radius),
      ),
    ),
    'rounded-end': (
      property: border-top-right-radius border-bottom-right-radius,
      class: rounded-end,
      values: (
        null: var(--#{$prefix}border-radius),
      ),
    ),
    'rounded-bottom': (
      property: border-bottom-right-radius border-bottom-left-radius,
      class: rounded-bottom,
      values: (
        null: var(--#{$prefix}border-radius),
      ),
    ),
    'rounded-start': (
      property: border-bottom-left-radius border-top-left-radius,
      class: rounded-start,
      values: (
        null: var(--#{$prefix}border-radius),
      ),
    ),
    // scss-docs-end utils-border-radius
    // scss-docs-start utils-visibility
    'visibility': (
        property: visibility,
        class: null,
        values: (
          visible: visible,
          invisible: hidden,
        ),
      ) // scss-docs-end utils-visibility
  ),
  $utilities
);
