// SCSS implementation of high contrast color mode

@use '../variables' as vars;
@use '../colors/high-contrast' as hc;
@use '../colors/colors-base' as colors;
@use '../colors/palette' as p;
@use 'sass:color';

// Only include high contrast mode styles if enabled
@if (vars.$enable-high-contrast) {
  // High contrast theme CSS custom properties
  [data-theme='high-contrast'],
  .rs-theme-high-contrast {
    // Gray levels
    --rs-gray-0: #{hc.$B000-high-contrast};
    --rs-gray-50: #{hc.$B050-high-contrast};
    --rs-gray-100: #{hc.$B100-high-contrast};
    --rs-gray-200: #{hc.$B200-high-contrast};
    --rs-gray-300: #{hc.$B300-high-contrast};
    --rs-gray-400: #{hc.$B400-high-contrast};
    --rs-gray-500: #{hc.$B500-high-contrast};
    --rs-gray-600: #{hc.$B600-high-contrast};
    --rs-gray-700: #{hc.$B700-high-contrast};
    --rs-gray-800: #{hc.$B800-high-contrast};
    --rs-gray-900: #{hc.$B900-high-contrast};

    // Highlight levels
    --rs-primary-50: #{hc.$H050-high-contrast};
    --rs-primary-100: #{hc.$H100-high-contrast};
    --rs-primary-200: #{hc.$H200-high-contrast};
    --rs-primary-300: #{hc.$H300-high-contrast};
    --rs-primary-400: #{hc.$H400-high-contrast};
    --rs-primary-500: #{hc.$H500-high-contrast};
    --rs-primary-600: #{hc.$H600-high-contrast};
    --rs-primary-700: #{hc.$H700-high-contrast};
    --rs-primary-800: #{hc.$H800-high-contrast};
    --rs-primary-900: #{hc.$H900-high-contrast};

    // Spectrum
    --rs-color-red: #{colors.$red-high-contrast};
    --rs-color-orange: #{colors.$orange-high-contrast};
    --rs-color-yellow: #{colors.$yellow-high-contrast};
    --rs-color-green: #{colors.$green-high-contrast};
    --rs-color-cyan: #{colors.$cyan-high-contrast};
    --rs-color-blue: #{colors.$blue-high-contrast};
    --rs-color-violet: #{colors.$violet-high-contrast};

    // 使用generate-palette-vars mixin为每个光谱颜色生成调色板
    @include p.generate-palette-vars('red', colors.$red-high-contrast);
    @include p.generate-palette-vars('orange', colors.$orange-high-contrast);
    @include p.generate-palette-vars('yellow', colors.$yellow-high-contrast);
    @include p.generate-palette-vars('green', colors.$green-high-contrast);
    @include p.generate-palette-vars('cyan', colors.$cyan-high-contrast);
    @include p.generate-palette-vars('blue', colors.$blue-high-contrast);
    @include p.generate-palette-vars('violet', colors.$violet-high-contrast);

    // Stateful colors
    --rs-state-success: var(--rs-color-green);
    --rs-state-info: var(--rs-color-blue);
    --rs-state-warning: var(--rs-color-yellow);
    --rs-state-error: var(--rs-color-red);

    // Reset
    --rs-body: var(--rs-gray-900);

    // Misc
    --rs-text-link: var(--rs-primary-500);
    --rs-text-link-hover: var(--rs-primary-400);
    --rs-text-link-active: var(--rs-primary-300);
    --rs-text-primary: var(--rs-gray-50);
    --rs-text-secondary: var(--rs-gray-200);
    --rs-text-tertiary: var(--rs-gray-300);
    --rs-text-heading: var(--rs-gray-0);
    --rs-text-inverse: var(--rs-gray-800);
    --rs-text-heading-inverse: var(--rs-gray-900);
    --rs-text-active: var(--rs-primary-500);
    --rs-text-disabled: var(--rs-gray-400);
    --rs-text-highlight-bg: var(--rs-primary-500);
    --rs-border-primary: var(--rs-gray-100);
    --rs-border-secondary: var(--rs-gray-700);
    --rs-bg-card: var(--rs-gray-800);
    --rs-bg-overlay: var(--rs-gray-800);
    --rs-bg-well: var(--rs-gray-900);
    --rs-bg-active: var(--rs-primary-500);
    --rs-bg-backdrop: rgb(from var(--rs-gray-900) r g b / 80%);
    --rs-state-hover-bg: var(--rs-gray-600);
    --rs-focus-ring-color: var(--rs-gray-0);
    --rs-state-focus-shadow: 0 0 0 2px var(--rs-gray-900), 0 0 0 5px var(--rs-gray-0);
    --rs-state-focus-shadow-slim: 0 0 0 2px var(--rs-gray-0);
    --rs-state-focus-outline: 2px solid rgb(from var(--rs-primary-500) r g b / 25%);
    --rs-state-error-outline: 2px solid rgb(from var(--rs-color-red) r g b / 25%);

    // Kbd
    --rs-kbd-bg: var(--rs-gray-600);
    --rs-kbd-text: var(--rs-gray-50);
    --rs-kbd-border: var(--rs-gray-700);

    // Scrollbar
    --rs-scrollbar-bg: transparent;
    --rs-scrollbar-thumb-bg: var(--rs-gray-300);
    --rs-scrollbar-thumb-hover-bg: var(--rs-gray-400);

    // Button
    --rs-btn-default-bg: transparent;
    --rs-btn-default-text: var(--rs-primary-500);
    --rs-btn-default-border-color: var(--rs-primary-500);
    --rs-btn-default-hover-bg: transparent;
    --rs-btn-default-hover-text: var(--rs-primary-400);
    --rs-btn-default-active-bg: transparent;
    --rs-btn-default-active-text: var(--rs-primary-200);
    --rs-btn-default-disabled-bg: transparent;
    --rs-btn-default-disabled-text: var(--rs-primary-900);
    --rs-btn-default-disabled-border-color: var(--rs-gray-100);
    --rs-btn-primary-bg: var(--rs-primary-500);
    --rs-btn-primary-text: var(--rs-gray-900);
    --rs-btn-primary-hover-bg: var(--rs-primary-400);
    --rs-btn-primary-active-bg: var(--rs-primary-200);
    --rs-btn-subtle-text: var(--rs-primary-500);
    --rs-btn-subtle-hover-bg: transparent;
    --rs-btn-subtle-hover-text: var(--rs-primary-400);
    --rs-btn-subtle-active-bg: transparent;
    --rs-btn-subtle-active-text: var(--rs-primary-200);
    --rs-btn-subtle-disabled-text: var(--rs-gray-500);
    --rs-btn-ghost-border: var(--rs-primary-500);
    --rs-btn-ghost-text: var(--rs-primary-500);
    --rs-btn-ghost-hover-border: var(--rs-primary-400);
    --rs-btn-ghost-hover-text: var(--rs-primary-400);
    --rs-btn-ghost-active-border: var(--rs-primary-200);
    --rs-btn-ghost-active-text: var(--rs-primary-200);
    --rs-btn-link-text: var(--rs-primary-500);
    --rs-btn-link-hover-text: var(--rs-primary-400);
    --rs-btn-link-active-text: var(--rs-primary-200);

    // Icon Button
    --rs-iconbtn-addon: transparent;
    --rs-iconbtn-activated-addon: transparent;
    --rs-iconbtn-pressed-addon: transparent;
    --rs-iconbtn-primary-addon: var(--rs-primary-400);
    --rs-iconbtn-primary-activated-addon: var(--rs-primary-300);
    --rs-iconbtn-primary-pressed-addon: var(--rs-primary-100);

    // Divider
    --rs-divider-border: var(--rs-gray-600);

    // Loader
    --rs-loader-ring: rgb(from var(--rs-gray-50) r g b / 30%);
    --rs-loader-rotor: var(--rs-gray-0);
    --rs-loader-backdrop: rgb(from var(--rs-gray-900) r g b / 83%);
    --rs-loader-ring-inverse: rgb(from var(--rs-gray-50) r g b / 80%);
    --rs-loader-rotor-inverse: var(--rs-gray-500);
    --rs-loader-backdrop-inverse: rgb(from var(--rs-gray-0) r g b / 90%);

    // Message
    --rs-message-success-header: #fff;
    --rs-message-success-text: #fff;
    --rs-message-success-icon: #fff;
    --rs-message-success-bg: var(--rs-green-900);
    --rs-message-success-border: var(--rs-green-300);
    --rs-message-info-header: #fff;
    --rs-message-info-text: #fff;
    --rs-message-info-icon: #fff;
    --rs-message-info-bg: var(--rs-blue-900);
    --rs-message-info-border: var(--rs-blue-500);
    --rs-message-warning-header: #fff;
    --rs-message-warning-text: #fff;
    --rs-message-warning-icon: #fff;
    --rs-message-warning-bg: var(--rs-yellow-900);
    --rs-message-warning-border: var(--rs-yellow-500);
    --rs-message-error-header: #fff;
    --rs-message-error-text: #fff;
    --rs-message-error-icon: #fff;
    --rs-message-error-bg: var(--rs-red-900);
    --rs-message-error-border: var(--rs-red-300);

    // Tooltip
    --rs-tooltip-bg: var(--rs-gray-800);
    --rs-tooltip-text: var(--rs-gray-0);

    // Progress
    --rs-progress-bg: var(--rs-gray-700);
    --rs-progress-bar: var(--rs-primary-500);
    --rs-progress-bar-success: var(--rs-color-green);
    --rs-progress-bar-fail: var(--rs-color-red);

    // Placeholder
    --rs-placeholder: var(--rs-gray-600);
    --rs-placeholder-active: var(--rs-gray-500);

    // Breadcrumb
    --rs-breadcrumb-item-active-text: #fff;

    // Dropdown
    --rs-dropdown-header-text: var(--rs-gray-500);

    // Menu
    --rs-menuitem-bg-active: rgb(from var(--rs-primary-900) r g b / 20%);
    --rs-menuitem-text-active: var(--rs-primary-500);
    --rs-menuitem-active-bg: transparent;
    --rs-menuitem-active-text: var(--rs-text-primary);

    // Steps
    --rs-steps-border: var(--rs-gray-200);
    --rs-steps-state-finish: var(--rs-primary-500);
    --rs-steps-border-state-finish: var(--rs-primary-500);
    --rs-steps-state-wait: var(--rs-gray-200);
    --rs-steps-state-process: var(--rs-primary-700);
    --rs-steps-state-error: var(--rs-color-red);
    --rs-steps-border-state-error: var(--rs-color-red);
    --rs-steps-icon-state-process: var(--rs-primary-500);
    --rs-steps-icon-state-error: var(--rs-color-red);

    // Navs
    --rs-navs-text: var(--rs-gray-200);
    --rs-navs-text-hover: var(--rs-primary-500);
    --rs-navs-bg-hover: transparent;
    --rs-navs-text-active: var(--rs-primary-500);
    --rs-navs-bg-active: var(--rs-gray-400);
    --rs-navs-tab-border: var(--rs-gray-600);
    --rs-navs-subtle-border: var(--rs-gray-600);
    --rs-navs-selected: var(--rs-primary-500);

    // Nav Pills
    --rs-navs-pills-bg: var(--rs-gray-700);
    --rs-navs-pills-item-color: var(--rs-text-secondary);
    --rs-navs-pills-item-active-bg: var(--rs-gray-600);
    --rs-navs-pills-item-active-color: var(--rs-primary-500);
    --rs-navs-pills-item-disabled-color: var(--rs-gray-400);

    // Navbar
    --rs-navbar-default-bg: var(--rs-gray-800);
    --rs-navbar-default-text: var(--rs-gray-50);
    --rs-navbar-default-selected-text: var(--rs-primary-500);
    --rs-navbar-default-hover-bg: transparent;
    --rs-navbar-default-hover-text: var(--rs-primary-500);
    --rs-navbar-inverse-bg: var(--rs-gray-800);
    --rs-navbar-inverse-text: var(--rs-gray-50);
    --rs-navbar-inverse-selected-bg: transparent;
    --rs-navbar-inverse-selected-text: var(--rs-primary-500);
    --rs-navbar-inverse-hover-bg: transparent;
    --rs-navbar-inverse-hover-text: var(--rs-primary-500);
    --rs-navbar-subtle-bg: var(--rs-gray-800);
    --rs-navbar-subtle-text: var(--rs-gray-50);
    --rs-navbar-subtle-selected-text: var(--rs-primary-500);
    --rs-navbar-subtle-hover-bg: transparent;
    --rs-navbar-subtle-hover-text: var(--rs-primary-500);

    // Sidenav
    --rs-sidenav-default-bg: var(--rs-gray-800);
    --rs-sidenav-default-text: var(--rs-gray-50);
    --rs-sidenav-default-selected-text: var(--rs-primary-500);
    --rs-sidenav-default-selected-bg: transparent;
    --rs-sidenav-default-hover-bg: transparent;
    --rs-sidenav-default-hover-text: var(--rs-primary-500);
    --rs-sidenav-default-footer-border: var(--rs-gray-500);
    --rs-sidenav-default-subnav-border-color: var(--rs-gray-500);
    --rs-sidenav-inverse-bg: var(--rs-gray-800);
    --rs-sidenav-inverse-text: var(--rs-gray-50);
    --rs-sidenav-inverse-selected-bg: transparent;
    --rs-sidenav-inverse-selected-text: var(--rs-primary-500);
    --rs-sidenav-inverse-hover-bg: transparent;
    --rs-sidenav-inverse-footer-border: var(--rs-gray-500);
    --rs-sidenav-inverse-subnav-border-color: var(--rs-gray-500);
    --rs-sidenav-subtle-bg: var(--rs-gray-800);
    --rs-sidenav-subtle-text: var(--rs-gray-50);
    --rs-sidenav-subtle-selected-text: var(--rs-primary-500);
    --rs-sidenav-subtle-selected-bg: transparent;
    --rs-sidenav-subtle-hover-bg: transparent;
    --rs-sidenav-subtle-hover-text: var(--rs-primary-500);
    --rs-sidenav-subtle-footer-border: var(--rs-gray-500);
    --rs-sidenav-subtle-subnav-border-color: var(--rs-gray-500);

    // Input
    --rs-input-bg: var(--rs-gray-800);
    --rs-input-focus-border: var(--rs-primary-500);
    --rs-input-disabled-bg: var(--rs-gray-700);

    // InlineEdit
    --rs-inline-edit-hover-bg: transparent;

    // ARIA Listboxes
    --rs-listbox-option-group-bg: var(--rs-gray-800);
    --rs-listbox-option-hover-bg: transparent;
    --rs-listbox-option-hover-text: var(--rs-primary-500);
    --rs-listbox-option-selected-text: var(--rs-primary-500);
    --rs-listbox-option-selected-bg: transparent;
    --rs-listbox-option-disabled-text: var(--rs-gray-500);
    --rs-listbox-option-disabled-selected-text: var(--rs-primary-200);

    // Checkbox
    --rs-checkbox-icon: var(--rs-gray-800);
    --rs-checkbox-border: var(--rs-gray-100);
    --rs-checkbox-checked-bg: var(--rs-primary-500);
    --rs-checkbox-disabled-bg: var(--rs-gray-500);

    // Radio
    --rs-radio-marker: var(--rs-gray-800);
    --rs-radio-border: var(--rs-gray-100);
    --rs-radio-checked-bg: var(--rs-primary-500);
    --rs-radio-disabled-bg: var(--rs-gray-500);

    // RadioTile
    --rs-radio-tile-border: var(--rs-gray-300);
    --rs-radio-tile-bg: var(--rs-gray-0);
    --rs-radio-tile-checked-color: var(--rs-primary-500);
    --rs-radio-tile-checked-mark-color: var(--rs-gray-800);
    --rs-radio-tile-checked-disabled-color: var(--rs-primary-900);

    // Rate
    --rs-rate-symbol: var(--rs-gray-100);
    --rs-rate-color: var(--rs-primary-500);

    // SegmentedControl
    --rs-segmented-control-bg: var(--rs-gray-900);
    --rs-segmented-control-border-color: var(--rs-gray-900);
    --rs-segmented-control-item-active-color: var(--rs-text-primary);
    --rs-segmented-control-item-color: var(--rs-text-secondary);
    --rs-segmented-control-item-disabled-color: var(--rs-gray-500);
    --rs-segmented-control-pill-indicator-bg: var(--rs-gray-700);
    --rs-segmented-control-underline-color: var(--rs-primary-500);

    // Slider
    --rs-slider-bar: var(--rs-gray-600);
    --rs-slider-hover-bar: var(--rs-gray-600);
    --rs-slider-thumb-border: var(--rs-primary-500);
    --rs-slider-thumb-bg: var(--rs-gray-700);
    --rs-slider-thumb-hover-shadow: 0 0 0 8px rgb(from var(--rs-primary-500) r g b / 25%);
    --rs-slider-progress: var(--rs-primary-500);

    // Toggle
    --rs-toggle-bg: var(--rs-gray-800);
    --rs-toggle-thumb: var(--rs-gray-100);
    --rs-toggle-hover-bg: var(--rs-gray-800);
    --rs-toggle-disabled-bg: var(--rs-gray-800);
    --rs-toggle-disabled-thumb: var(--rs-gray-300);
    --rs-toggle-checked-bg: var(--rs-primary-500);
    --rs-toggle-checked-thumb: var(--rs-gray-800);
    --rs-toggle-checked-hover-bg: var(--rs-primary-400);
    --rs-toggle-checked-disabled-bg: var(--rs-primary-900);
    --rs-toggle-checked-disabled-thumb: var(--rs-gray-800);

    // Uploader
    --rs-uploader-item-bg: var(--rs-gray-300);
    --rs-uploader-item-hover-bg: var(--rs-gray-800);
    --rs-uploader-item-hover-text: var(--rs-primary-500);
    --rs-uploader-overlay-bg: rgb(from var(--rs-gray-600) r g b / 80%);
    --rs-uploader-dnd-bg: var(--rs-gray-700);
    --rs-uploader-dnd-border: var(--rs-gray-200);
    --rs-uploader-dnd-hover-border: var(--rs-primary-500);

    // Avatar
    --rs-avatar-bg: var(--rs-gray-400);
    --rs-avatar-text: var(--rs-gray-0);
    --rs-avatar-offset-color: var(--rs-gray-900);
    --rs-avatar-ring-color: var(--rs-avatar-bg);

    // Badge
    --rs-badge-bg: var(--rs-red-500);
    --rs-badge-text: var(--rs-gray-0);
    --rs-badge-border: var(--rs-gray-900);

    // Tag
    --rs-tag-bg: var(--rs-gray-600);

    // Card
    --rs-card-bg: var(--rs-gray-900);

    // Carousel
    --rs-carousel-bg: var(--rs-gray-600);
    --rs-carousel-indicator: rgb(from var(--rs-gray-0) r g b / 40%);
    --rs-carousel-indicator-hover: var(--rs-gray-0);
    --rs-carousel-indicator-active: var(--rs-primary-500);

    // Pagination
    --rs-pagination-item-text: var(--rs-gray-50);
    --rs-pagination-item-current-text: var(--rs-primary-500);

    // List
    --rs-list-bg: transparent;
    --rs-list-border: var(--rs-gray-700);
    --rs-list-hover-bg: var(--rs-gray-600);
    --rs-list-placeholder-bg: rgb(from var(--rs-primary-900) r g b / 20%);
    --rs-list-placeholder-border: var(--rs-primary-500);

    // Timeline
    --rs-timeline-indicator-bg: var(--rs-gray-500);
    --rs-timeline-indicator-active-bg: var(--rs-primary-500);

    // Table
    --rs-table-border-color: var(--rs-border-secondary);
    --rs-table-shadow: rgba(9, 9, 9, 0.99);
    --rs-table-sort: var(--rs-primary-500);
    --rs-table-resize: var(--rs-primary-500);
    --rs-table-scrollbar-track: var(--rs-gray-700);
    --rs-table-scrollbar-thumb: var(--rs-gray-200);
    --rs-table-scrollbar-thumb-active: var(--rs-gray-100);
    --rs-table-scrollbar-vertical-track: var(--rs-gray-700);

    // Drawer
    --rs-drawer-bg: var(--rs-gray-700);

    // Modal
    --rs-modal-border: 1px solid var(--rs-gray-100);

    // Form
    --rs-form-errormessage-text: #fff;
    --rs-form-errormessage-bg: var(--rs-red-500);
    --rs-form-errormessage-border: var(--rs-red-500);

    // Picker
    --rs-picker-value: var(--rs-primary-500);
    --rs-picker-count-bg: var(--rs-primary-500);
    --rs-picker-count-text: var(--rs-gray-900);

    // Calendar
    --rs-calendar-today-bg: var(--rs-primary-500);
    --rs-calendar-today-text: var(--rs-gray-900);
    --rs-calendar-range-bg: rgb(from var(--rs-primary-900) r g b / 50%);
    --rs-calendar-time-unit-bg: var(--rs-gray-900);
    --rs-calendar-date-selected-text: var(--rs-gray-900);
    --rs-calendar-cell-selected-hover-bg: var(--rs-gray-50);

    // Popover
    --rs-popover-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);

    // Tree
    --rs-tree-indent-line-color: rgba(255, 255, 255, 0.1);

    // ScrollView
    --rs-scroll-view-shadow-color: rgba(0, 0, 0, 0.99);

    // Stat
    --rs-stat-body-bg: var(--rs-gray-900);

    // CSS relative color syntax is not supported
    // https://developer.chrome.com/blog/css-relative-color-syntax/
    @supports not (color: rgb(from white r g b)) {
      // Misc
      --rs-bg-backdrop: #{p.fade(hc.$B900-high-contrast, 80)};
      --rs-state-focus-outline: 3px solid #{p.fade(hc.$H500-high-contrast, 25)};

      // Loader
      --rs-loader-ring: #{p.fade(hc.$B050-high-contrast, 30)};
      --rs-loader-backdrop: #{p.fade(hc.$B900-high-contrast, 83)};
      --rs-loader-ring-inverse: #{p.fade(hc.$B050-high-contrast, 80)};
      --rs-loader-backdrop-inverse: #{p.fade(hc.$B000-high-contrast, 90)};

      // Dropdown
      --rs-menuitem-bg-active: #{p.fade(hc.$H900-high-contrast, 20)};

      // Slider
      --rs-slider-thumb-hover-shadow: 0 0 0 8px #{p.fade(hc.$H500-high-contrast, 25)};

      // Uploader
      --rs-uploader-overlay-bg: #{p.fade(hc.$B600-high-contrast, 80)};

      // Carousel
      --rs-carousel-indicator: #{p.fade(hc.$B000-high-contrast, 40)};

      // List
      --rs-list-placeholder-bg: #{p.fade(hc.$H900-high-contrast, 20)};

      // Calendar
      --rs-calendar-range-bg: #{p.fade(hc.$H900-high-contrast, 50)};

      // Placeholder
      --rs-placeholder-active: #{color.mix(white, hc.$B600-high-contrast, 5%)};
    }
  }
}
