@use "sass:color";
@mixin paperless-green {
  // base color e.g. #17541f = hsl(128, 57%, 21%)
  --pngx-primary: 128, 57%;
  --pngx-primary-lightness: 21%;
}

:root {
  @include paperless-green;
  --pngx-primary-text-contrast: var(--bs-light);

  --bs-primary: hsl(var(--pngx-primary), var(--pngx-primary-lightness));
  --bs-border-color: var(--bs-gray-400);
  --pngx-primary-faded: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) + 76%));
  --pngx-primary-lighten-10: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) + 10%));
  --pngx-primary-lighten-30: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) + 30%));
  --pngx-primary-darken-5: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) - 5%));
  --pngx-primary-darken-15: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) - 15%));
  --pngx-primary-darken-18: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) - 18%));
  --pngx-primary-darken-27: hsl(var(--pngx-primary), calc(var(--pngx-primary-lightness) - 27%));
  --pngx-success-darken-10: hsl(152, 69%, 11%); // based on success #198754
  --pngx-bg-alt: #fff;
  --pngx-bg-darker: #f4f6f5;
  --pngx-bg-alt2: var(--bs-gray-200); // #e9ecef
  --pngx-bg-disabled: #f7f7f7;
  --pngx-card-hover-border: var(--bs-tertiary-color);
  --pngx-focus-alpha: 0.3;
  --pngx-toast-max-width: 340px;
  --bs-info: var(--pngx-bg-alt2);
  --bs-info-rgb: 233, 236, 239;
  @media screen and (min-width: 1024px) {
    --pngx-toast-max-width: 450px;
  }
}

// Dark text colors allow for maintain contrast with theme color changes
$text-color-light-bg: #212529;
$text-color-dark-bg: #abb2bf;
$text-color-dark-bg-accent: color.adjust($text-color-dark-bg, $lightness: 10%);
// url-encoded $text-color-light-bg
$text-color-light-bg-esc: "%23212529";
// Taken from bootstrap, pre-encoded
$form-check-input-checked-bg-image-dark: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='#{$text-color-light-bg-esc}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
$form-check-radio-checked-bg-image-dark: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='#{$text-color-light-bg-esc}'/%3e%3c/svg%3e");

.primary-light {
  --pngx-primary-text-contrast: #{$text-color-light-bg} !important;

  .form-check:not(.form-switch) {
    .form-check-input:checked[type=checkbox] {
      --bs-form-check-bg-image: #{$form-check-input-checked-bg-image-dark};
    }

    .form-check-input:checked[type=radio] {
      --bs-form-check-bg-image: #{$form-check-radio-checked-bg-image-dark};
    }
  }

  .toast .btn-close {
    filter: none !important;
  }
}

.primary-dark {
  --pngx-primary-text-contrast: #{$text-color-dark-bg} !important;
}

.text-primary-contrast {
  color: var(--pngx-primary-text-contrast);
}

.dropdown-menu > .list-group-flush:only-child {
  > .list-group-item:first-child {
    border-top-left-radius: var(--bs-dropdown-border-radius);
    border-top-right-radius: var(--bs-dropdown-border-radius);
  }
  > .list-group-item:last-child {
    border-bottom-left-radius: var(--bs-dropdown-border-radius);
    border-bottom-right-radius: var(--bs-dropdown-border-radius);
  }
}

// Dark mode
@mixin paperless-green-dark-mode {
  --pngx-primary-lightness: 31%;
  --bs-primary: hsl(var(--pngx-primary),var(--pngx-primary-lightness));
}

@mixin dark-mode {
  color-scheme: dark;
  --pngx-body-color-accent: #{$text-color-dark-bg-accent};
  --pngx-bg-alt: #242529;
  --pngx-bg-alt2: #232323;
  --pngx-bg-darker: #121315;
  --pngx-bg-disabled: var(--pngx-bg-alt);
  --pngx-card-hover-border: var(--bs-border-color);
  --pngx-focus-alpha: 0.6;
  --pngx-primary-faded: var(--pngx-primary-darken-15);
  --pngx-primary-text-contrast: var(--bs-body-color);
  --bs-body-color: #{$text-color-dark-bg};
  --bs-secondary-color: #6c757d;
  --bs-danger: #b71631;
  --bs-danger-rgb: 183, 22, 49;
  --bs-body-bg: #161618;
  --bs-body-bg-rgb: 22, 22, 24;
  --bs-secondary-bg: var(--pngx-bg-disabled);
  --bs-secondary-bg-rgb: 36, 37, 41;
  --bs-light: #1c1c1f;
  --bs-light-rgb: 28, 28, 31;
  --bs-info: var(--pngx-bg-alt);
  --bs-info-rgb: 36, 36, 39;
  --bs-border-color: #34373d;
  --bs-tertiary-bg: var(--pngx-bg-darker);
  --bs-dark-border-subtle: var(--pngx-bg-darker);
  --bs-border-color-translucent: rgba(0, 0, 0, .175); // override bs
  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.15); // slightly darker than bs default

  .text-dark, .text-light {
    color: var(--bs-body-color) !important;
  }

  .btn {
    --bs-btn-disabled-opacity: 0.35;
  }
  .btn.btn-link {
    --bs-btn-disabled-opacity: 0.85;
  }

  .btn-primary {
    &:hover, &:focus, &.active, &:active {
      color: var(--bs-body-color) !important;
    }
  }

  &.primary-light .btn-primary {
    &:hover, &:focus, &.active, &:active {
      color: var(--pngx-bg-darker) !important;
    }
  }

  .btn-dark {
    --bs-btn-color: $text-color-dark-bg;
    --bs-btn-bg: var(--pngx-bg-alt);
    --bs-btn-border-color: var(--pngx-bg-alt);
    --bs-btn-hover-bg: var(--bs-light);
