@use "sass:map";
@use "sass:meta";

// Configuration
//
// Variables and settings not related to theme, components, and more go here. It does include layout.

// Merge overrides on top of defaults, stripping null entries.
// Null values let users remove map keys via @use ... with().
// Accepts a list as $defaults (converted to a map with `true` values).
@function defaults($defaults, $overrides) {
  @if meta.type-of($defaults) == "list" {
    $map: ();
    @each $key in $defaults {
      $map: map.merge($map, ($key: true));
    }
    $defaults: $map;
  }
  $merged: map.merge($defaults, $overrides);
  @each $key, $value in $merged {
    @if $value == null {
      $merged: map.remove($merged, $key);
    }
  }
  @return $merged;
}

$enable-rounded:              true !default;
$enable-shadows:              true !default;
$enable-gradients:            true !default;
$enable-transitions:          true !default;
$enable-reduced-motion:       true !default;
$enable-smooth-scroll:        false !default;
$enable-grid-classes:         true !default;
$enable-container-classes:    true !default;
$enable-cssgrid:              true !default;
$enable-button-pointers:      true !default;
$enable-deprecation-messages: true !default;

$color-mode-type:          "media-query" !default;
$color-contrast-dark:      #000 !default;
$color-contrast-light:     #fff !default;
$min-contrast-ratio:         4.5 !default;

// scss-docs-start spacer-variables-maps
$spacer: 1rem !default;
$spacers: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$spacers: defaults(
  (
    0: 0,
    1: $spacer * .25,
    2: $spacer * .375,
    3: $spacer * .5,
    4: $spacer * .75,
    5: $spacer * 1,
    6: $spacer * 1.25,
    7: $spacer * 1.5,
    8: $spacer * 1.75,
    9: $spacer * 2,
    10: $spacer * 2.25,
    11: $spacer * 2.5,
    12: $spacer * 3,
  ),
  $spacers
);

$negative-spacers: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$negative-spacers: defaults(
  (
    "-1": $spacer * -.25,
    "-2": $spacer * -.5,
  ),
  $negative-spacers
);
// scss-docs-end spacer-variables-maps

$sizes: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$sizes: defaults(
  (
    1: $spacer,
    2: $spacer * 2,
    3: $spacer * 3,
    4: $spacer * 4,
    5: $spacer * 5,
    6: $spacer * 6,
    7: $spacer * 7,
    8: $spacer * 8,
    9: $spacer * 9,
    10: $spacer * 10,
    11: $spacer * 11,
    12: $spacer * 12,
  ),
  $sizes
);

// scss-docs-start radius-variables-maps
$radius: .5rem !default;
$radii: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$radii: defaults(
  (
    0: 0,
    1: $radius * .25,
    2: $radius * .375,
    3: $radius * .5,
    4: $radius * .75,
    5: $radius,
    6: $radius * 1.25,
    7: $radius * 1.5,
    8: $radius * 1.75,
    9: $radius * 2,
  ),
  $radii
);
// scss-docs-end radius-variables-maps

// Breakpoints
//
// Define the minimum dimensions at which your layout will change,
// adapting to different screen sizes, for use in media queries.

// scss-docs-start breakpoints
$breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 1024px,
  xl: 1280px,
  2xl: 1536px
) !default;
// scss-docs-end breakpoints

// @include _assert-ascending($breakpoints, "$breakpoints");
// @include _assert-starts-at-zero($breakpoints, "$breakpoints");

// Grid columns
//
// Set the number of columns and specify the width of the gutters.

$grid-columns: 12 !default;
$grid-gutter-x: 1.5rem !default;
$grid-gutter-y: 0 !default;
$grid-row-columns: 6 !default;

$gutters: $spacers !default;

// Grid containers
//
// Define the maximum width of `.container` for different screen sizes.

// scss-docs-start container-max-widths
$container-max-widths: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$container-max-widths: defaults(
  (
    sm: 540px,
    md: 720px,
    lg: 960px,
    xl: 1200px,
    2xl: 1440px
  ),
  $container-max-widths
);
// scss-docs-end container-max-widths

$container-padding-x: $grid-gutter-x !default;

$utilities: () !default;

// Characters which are escaped by the escape-svg function
$escaped-characters: (
  ("<", "%3c"),
  (">", "%3e"),
  ("#", "%23"),
  ("(", "%28"),
  (")", "%29"),
) !default;

// Gradient
//
// The gradient which is added to components if `$enable-gradients` is `true`
// This gradient is also added to elements with `.bg-gradient`
// scss-docs-start variable-gradient
$gradient: linear-gradient(180deg, color-mix(var(--white) 15%, transparent), color-mix(var(--white) 0%, transparent)) !default;
// scss-docs-end variable-gradient

// Position
//
// Define the edge positioning anchors of the position utilities.

// scss-docs-start position-map
$position-values: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$position-values: defaults(
  (
    0: 0,
    50: 50%,
    100: 100%
  ),
  $position-values
);
// scss-docs-end position-map


// Components
//
// Define common padding and border radius sizes and more.

// scss-docs-start border-variables
$border-width:                1px !default;
$border-widths: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$border-widths: defaults(
  (
    keyline: .5px,
    1: 1px,
    2: 2px,
    3: 3px,
    4: 4px,
    5: 5px
  ),
  $border-widths
);
$border-style:                solid !default;
$border-color:                color-mix(in oklch, var(--gray-100), var(--gray-200)) !default;
// scss-docs-end border-variables

// Each layer's alpha is base * strength * opacity, so shadow-color retints
// (e.g. .shadow-primary), shadow-opacity dims or boosts (.shadow-opacity-*),
// and shadow-strength deepens every shadow in dark mode. Color and opacity
// each read a local, non-inheriting override set by their utility
// (scss/_utilities.scss)—var(--sc, var(--shadow-color)) and var(--so, 1)—so
// neither leaks to nested .shadow-* descendants; --sc falls back to the
// cascading global --shadow-color token (scss/_root.scss) when unset.
// scss-docs-start box-shadow-variables
$shadows: (
  null: #{(
    "0 .125rem .25rem -.0625rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.04 * var(--shadow-strength) * var(--so, 1)))",
    "0 .375rem .75rem -.125rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.05 * var(--shadow-strength) * var(--so, 1)))",
    "0 .75rem 1.5rem -.25rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.06 * var(--shadow-strength) * var(--so, 1)))"
  )},
  xs: 0 .0625rem .125rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.04 * var(--shadow-strength) * var(--so, 1))),
  sm: #{(
    "0 .0625rem .125rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.04 * var(--shadow-strength) * var(--so, 1)))",
    "0 .125rem .375rem -.0625rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.05 * var(--shadow-strength) * var(--so, 1)))"
  )},
  lg: #{(
    "0 .125rem .375rem -.0625rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.05 * var(--shadow-strength) * var(--so, 1)))",
    "0 .375rem 1rem -.1875rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.06 * var(--shadow-strength) * var(--so, 1)))",
    "0 .75rem 2rem -.375rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.07 * var(--shadow-strength) * var(--so, 1)))",
    "0 1.5rem 3.5rem -.75rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.08 * var(--shadow-strength) * var(--so, 1)))"
  )},
  xl: #{(
    "0 .1875rem .5rem -.0625rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.05 * var(--shadow-strength) * var(--so, 1)))",
    "0 .5rem 1.25rem -.1875rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.06 * var(--shadow-strength) * var(--so, 1)))",
    "0 1rem 2.5rem -.375rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.07 * var(--shadow-strength) * var(--so, 1)))",
    "0 2rem 5rem -.75rem oklch(from var(--sc, var(--shadow-color)) l c h / calc(.09 * var(--shadow-strength) * var(--so, 1)))"
  )},
  inset: inset 0 1px 2px light-dark(oklch(from var(--sc, var(--shadow-color)) l c h / calc(8% * var(--so, 1))), oklch(from var(--sc, var(--shadow-color)) l c h / calc(26% * var(--so, 1)))),
) !default;
// scss-docs-end box-shadow-variables

// scss-docs-start aspect-ratios
$aspect-ratios: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$aspect-ratios: defaults(
  (
    "auto": auto,
    "1x1": #{"1 / 1"},
    "4x3": #{"4 / 3"},
    "16x9": #{"16 / 9"},
    "21x9": #{"21 / 9"}
  ),
  $aspect-ratios
);
// scss-docs-end aspect-ratios

// scss-docs-start font-weights
$font-weights: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$font-weights: defaults(
  (
    lighter: lighter,
    light: 300,
    normal: 400,
    medium: 500,
    semibold: 600,
    bold: 700,
    bolder: bolder
  ),
  $font-weights
);
// scss-docs-end font-weights

// scss-docs-start font-sizes
$font-sizes: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$font-sizes: defaults(
  (
    "xs": (
      "font-size": .75rem,
      "line-height": 1.25
    ),
    "sm": (
      "font-size": .875rem,
      "line-height": 1.5
    ),
    "md": (
      "font-size": 1rem,
      "line-height": 1.5
    ),
    "lg": (
      "font-size": clamp(1.125rem, 1rem + .625vw, 1.25rem),
      "line-height": 1.5
    ),
    "xl": (
      "font-size": clamp(1.5rem, 1.1rem + .75vw, 1.75rem),
      "line-height": calc(2.5 / 1.75)
    ),
    "2xl": (
      "font-size": clamp(1.75rem, 1.3rem + 1vw, 2rem),
      "line-height": calc(3 / 2.25)
    ),
    "3xl": (
      "font-size": clamp(2rem, 1.5rem + 1.875vw, 2.5rem),
      "line-height": 1.2
    ),
    "4xl": (
      "font-size": clamp(2.25rem, 1.75rem + 2.5vw, 3rem),
      "line-height": 1.1
    ),
    "5xl": (
      "font-size": clamp(3rem, 2rem + 5vw, 4rem),
      "line-height": 1.1
    ),
    "6xl": (
      "font-size": clamp(3.75rem, 2.5rem + 6.25vw, 5rem),
      "line-height": 1
    ),
  ),
  $font-sizes
);
// scss-docs-end font-sizes

// Z-index master list
//
// Warning: Avoid customizing these values. They're used for a bird's eye view
// of components dependent on the z-axis and are designed to all work together.

// scss-docs-start zindex-levels-map
$zindex-levels: (
  n1: -1,
  0: 0,
  1: 1,
  2: 2,
  3: 3,
  menu: 1000,
  sticky: 1010,
  fixed: 1020,
  drawer: 1030,
  dialog: 1040,
  popover: 1050,
  tooltip: 1060,
  toast: 1070,
) !default;
// scss-docs-end zindex-levels-map
