@use "sass:map";
@use "sass:string";

@use "variables";
@use "mixins";

*,
*:after,
*:before {
  box-sizing: border-box;
  outline-color: var(--theme-primary-default);

  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}

*:focus {
  outline: none;
}

html,
body {
  height: 100%;
  width: 100%;
  padding: 0;
  margin: 0;
}

body {
  background: var(--background-color);
  color: var(--text-trans-default);
  font-family: var(--font-family);
  font-variant-numeric: tabular-nums;
  font-size: var(--font-size-default);
  line-height: var(--line-height);
}

*::-webkit-scrollbar {
  width: 12px;
  height: 12px;
  //border: 1px solid var(--background-color);
  border-radius: 8px;
}

*::-webkit-scrollbar-thumb {
  background-color: var(--theme-gray-light);
  border-radius: 8px;
  background-clip: padding-box;
  border: 2px solid transparent;
}

*::-webkit-scrollbar-track {
  &:hover {
    background-color: var(--theme-gray-lighter);
    border-radius: 8px;
    background-clip: padding-box;
    border: 2px solid transparent;
  }
}

*::-webkit-scrollbar-corner {
  background: transparent;
}

hr {
  border: none;
  height: 1px;
  background-color: var(--border-color-lighter);
  width: 100%;
  display: block;
}

p {
  margin: 0;
}

pre,
code {
  font-size: var(--font-size-default);
  line-height: var(--line-height);
  margin: 0;
}

pre {
  font-family: var(--font-family);
  font-variant-numeric: tabular-nums;
}

code {
  font-family: var(--font-family-monospace);
  font-variant-numeric: tabular-nums;
}

small {
  vertical-align: top;
}

sub {
  display: inline-block;
  overflow: visible;
  height: 0;
}

form {
  display: inline;
}

/**[hidden] {
  display: none !important;
}*/

//-- FONT SIZE

@each $h in (h1, h2, h3, h4, h5, h6) {
  #{$h} {
    font-size: var(--font-size-#{$h});
    line-height: var(--line-height);
    margin: 0;
  }
}

@each $key, $val in map.get(variables.$vars, font-size) {
  .ft-size-#{$key} {
    font-size: var(--font-size-#{$key}) !important;
    line-height: var(--line-height) !important;
  }
}

//-- BACKGROUND COLOR

@each $key, $val in map.get(variables.$vars, theme) {
  @each $key1, $val1 in $val {
    .bg-theme-#{$key}-#{$key1} {
      background: var(--theme-#{$key}-#{$key1}) !important;
    }
  }
}

@each $key, $val in map.get(variables.$vars, trans) {
  .bg-trans-#{$key} {
    background: var(--trans-#{$key}) !important;
  }
}

.bg-default {
  background: var(--background-color) !important;
}

.bg-control {
  background: var(--control-color) !important;
}

//-- TEXT COLOR

@each $key, $val in map.get(variables.$vars, text-trans) {
  .tx-trans-#{$key} {
    color: var(--text-trans-#{$key}) !important;
  }
}

@each $key, $val in map.get(variables.$vars, theme) {
  @each $key1, $val1 in $val {
    .tx-theme-#{$key}-#{$key1} {
      color: var(--theme-#{$key}-#{$key1}) !important;
    }
  }
}

//-- TEXT STYLE

.tx-line-through {
  text-decoration: line-through;
}
.tx-underline {
  text-decoration: underline;
}

//-- BORDER

.bd {
  border: 1px solid !important;
}

@each $key, $val in map.get(variables.$vars, theme) {
  @each $key1, $val1 in $val {
    .bd-theme-#{$key}-#{$key1} {
      border-color: var(--theme-#{$key}-#{$key1}) !important;
    }
  }
}

@each $key, $val in map.get(variables.$vars, trans) {
  .bd-trans-#{$key} {
    border-color: var(--trans-#{$key}) !important;
  }
}

@each $key, $val in map.get(variables.$vars, border-color) {
  .bd-color-#{$key} {
    border-color: var(--border-color-#{$key}) !important;
  }
}

.bd-none {
  border: none !important;
}

.bd-trans {
  border-color: transparent !important;
}

@each $dir in (top, right, bottom, left) {
  $d: string.slice($dir, 1, 1);
  .bd#{$d} {
    border-#{$dir}: 1px solid !important;
  }

  @each $key, $val in map.get(variables.$vars, theme) {
    @each $key1, $val1 in $val {
      .bd#{$d}-theme-#{$key}-#{$key1} {
        border-#{$dir}-color: var(--theme-#{$key}-#{$key1}) !important;
      }
    }
  }

  @each $key, $val in map.get(variables.$vars, trans) {
    .bd#{$d}-trans-#{$key} {
      border-#{$dir}-color: var(--trans-#{$key}) !important;
    }
  }

  @each $key, $val in map.get(variables.$vars, border-color) {
    .bd#{$d}-color-#{$key} {
      border-#{$dir}-color: var(--border-color-#{$key}) !important;
    }
  }

  .bd#{$d}-none {
    border-#{$dir}: none !important;
  }

  .bd#{$d}-trans {
    border-#{$dir}-color: transparent !important;
  }
}

//-- BORDER WIDTH
@each $key, $val in map.get(variables.$vars, gap) {
  .bd-width-#{$key} {
    border-width: var(--gap-#{$key}) !important;
  }

  @each $dir in (top, right, bottom, left) {
    $d: string.slice($dir, 1, 1);
    .bd#{$d}-width-#{$key} {
      border-#{$dir}-width: var(--gap-#{$key}) !important;
    }
  }
}

//-- BORDER RADIUS

@each $key, $val in map.get(variables.$vars, border-radius) {
  .bd-radius-#{$key} {
    border-radius: var(--border-radius-#{$key}) !important;
  }

  .bdt-radius-#{$key} {
    border-top-right-radius: var(--border-radius-#{$key}) !important;
    border-top-left-radius: var(--border-radius-#{$key}) !important;
  }

  .bdb-radius-#{$key} {
    border-bottom-right-radius: var(--border-radius-#{$key}) !important;
    border-bottom-left-radius: var(--border-radius-#{$key}) !important;
  }

  .bdl-radius-#{$key} {
    border-top-left-radius: var(--border-radius-#{$key}) !important;
    border-bottom-left-radius: var(--border-radius-#{$key}) !important;
  }

  .bdr-radius-#{$key} {
    border-top-right-radius: var(--border-radius-#{$key}) !important;
    border-bottom-right-radius: var(--border-radius-#{$key}) !important;
  }
}

//-- PADDING, MARGIN

@each $key, $val in map.get(variables.$vars, gap) {
  .p-#{$key} {
    padding: var(--gap-#{$key}) !important;
  }

  .m-#{$key} {
    margin: var(--gap-#{$key}) !important;
  }
}

@each $key, $val in map.get(variables.$vars, gap) {
  @each $key1, $val1 in map.get(variables.$vars, gap) {
    .p-#{$key}-#{$key1} {
      padding: var(--gap-#{$key}) var(--gap-#{$key1}) !important;
    }

    .m-#{$key}-#{$key1} {
      margin: var(--gap-#{$key}) var(--gap-#{$key1}) !important;
    }
  }
}

@each $key, $val in map.get(variables.$vars, gap) {
  .pv-#{$key} {
    padding-top: var(--gap-#{$key}) !important;
    padding-bottom: var(--gap-#{$key}) !important;
  }

  .ph-#{$key} {
    padding-left: var(--gap-#{$key}) !important;
    padding-right: var(--gap-#{$key}) !important;
  }

  .mv-#{$key} {
    margin-top: var(--gap-#{$key}) !important;
    margin-bottom: var(--gap-#{$key}) !important;
  }

  .mh-#{$key} {
    margin-left: var(--gap-#{$key}) !important;
    margin-right: var(--gap-#{$key}) !important;
  }
}

@each $key, $val in map.get(variables.$vars, gap) {
  .sw-#{$key} {
    width: var(--gap-#{$key}) !important;
  }

  .sh-#{$key} {
    height: var(--gap-#{$key}) !important;
  }
}

@each $key, $val in map.get(variables.$vars, gap) {
  @each $dir in (top, right, bottom, left) {
    $d: string.slice($dir, 1, 1);

    .p#{$d}-#{$key} {
      padding-#{$dir}: var(--gap-#{$key}) !important;
    }

    .m#{$d}-#{$key} {
      margin-#{$dir}: var(--gap-#{$key}) !important;
    }

    .#{$d}-#{$key} {
      #{$dir}: var(--gap-#{$key}) !important;
    }
  }
}

//-- TEXT ALIGN

@each $align in (left, right, center) {
  .tx-#{$align} {
    text-align: #{$align} !important;
  }
}

//-- ETC

.sh-topbar {
  height: var(--topbar-height) !important;
}

.sw-sidebar {
  width: var(--sidebar-width) !important;
}

.form-control {
  @include mixins.form-control-base();
}

.help {
  @include mixins.help();
}

.control-header {
  line-height: var(--line-height);
  font-size: var(--font-size-sm);
  color: var(--theme-gray-default);
}

.page-header {
  line-height: var(--line-height);
  margin-bottom: var(--gap-sm);
  color: var(--theme-gray-default);

  padding-bottom: var(--gap-xxs);
  font-size: var(--font-size-sm);
}

/*
.active-effect {
  @include active-effect(true);
}*/

.sd-theme-dark {
  img {
    filter: invert(1) hue-rotate(180deg);
  }
}

.sticky-top {
  position: sticky !important;
  top: 0;
  z-index: 1;
}

.overflow-auto {
  overflow: auto;
}

.position-relative {
  position: relative;
}

.nowrap {
  white-space: nowrap;
}

.fill {
  height: 100%;
  width: 100%;
  overflow: auto;
}

@each $key, $val in map.get(variables.$vars, gap) {
  .gap-#{$key} {
    gap: var(--gap-#{$key});
  }
}

@each $val in [start, end, center] {
  .main-align-#{$val} {
    justify-content: $val;
  }

  .cross-align-#{$val} {
    align-items: $val;
  }
}
