/* Combobox Component */

/* Component-specific custom properties */
.c-combobox {
  /* Base properties */
  --c-combobox-background: var(--ds-color-surface);
  --c-combobox-border-color: var(--ds-color-border);
  --c-combobox-border-color-hover: var(--ds-color-border-hover);
  --c-combobox-border-color-focus: var(--ds-color-accent);
  --c-combobox-border-color-error: var(--ds-color-status-danger);
  --c-combobox-border-width: 1px;
  --c-combobox-border-radius: var(--ds-radius-s);
  --c-combobox-shadow-focus: var(--ds-focus-ring);
  --c-combobox-transition: all var(--ds-duration-fast) var(--ds-ease-out);
  
  /* Input */
  --c-combobox-input-padding: var(--ds-space-s) var(--ds-space-m);
  --c-combobox-input-font-size: var(--ds-font-size-m);
  --c-combobox-input-line-height: var(--ds-line-height-m);
  --c-combobox-input-text-color: var(--ds-color-text);
  --c-combobox-input-text-color-disabled: var(--ds-color-text-weakest);
  --c-combobox-input-placeholder-color: var(--ds-color-text-weaker);
  --c-combobox-input-background: transparent;
  --c-combobox-input-background-disabled: var(--ds-color-surface-lowered);
  
  /* Label */
  --c-combobox-label-font-size: var(--ds-font-size-s);
  --c-combobox-label-font-weight: var(--ds-font-weight-medium);
  --c-combobox-label-text-color: var(--ds-color-text);
  --c-combobox-label-margin-bottom: var(--ds-space-xs);
  
  /* Wrapper */
  --c-combobox-wrapper-min-height: 2.5rem;
  --c-combobox-wrapper-padding-right: 3rem;
  
  /* Toggle button */
  --c-combobox-toggle-width: 2.5rem;
  --c-combobox-toggle-background: transparent;
  --c-combobox-toggle-background-hover: var(--ds-color-surface-raised);
  --c-combobox-toggle-border: none;
  --c-combobox-toggle-icon-color: var(--ds-color-icon);
  --c-combobox-toggle-icon-color-hover: var(--ds-color-icon-hover);
  --c-combobox-toggle-icon-color-disabled: var(--ds-color-text-weakest);
  --c-combobox-toggle-transition: var(--c-combobox-transition);
  
  /* Clear button */
  --c-combobox-clear-width: 2rem;
  --c-combobox-clear-background: transparent;
  --c-combobox-clear-background-hover: var(--ds-color-surface-raised);
  --c-combobox-clear-icon-color: var(--ds-color-icon);
  --c-combobox-clear-icon-color-hover: var(--ds-color-icon-hover);
  
  /* Dropdown */
  --c-combobox-dropdown-background: var(--ds-color-surface);
  --c-combobox-dropdown-border: 1px solid var(--ds-color-border);
  --c-combobox-dropdown-border-radius: var(--ds-radius-s);
  --c-combobox-dropdown-shadow: var(--ds-shadow-popout);
  --c-combobox-dropdown-max-height: 16rem;
  --c-combobox-dropdown-z-index: 1000;
  --c-combobox-dropdown-margin-top: var(--ds-space-xs);
  
  /* Options */
  --c-combobox-option-padding: var(--ds-space-s) var(--ds-space-m);
  --c-combobox-option-font-size: var(--ds-font-size-m);
  --c-combobox-option-line-height: var(--ds-line-height-m);
  --c-combobox-option-text-color: var(--ds-color-text);
  --c-combobox-option-background: transparent;
  --c-combobox-option-background-hover: var(--ds-color-surface-raised);
  --c-combobox-option-background-selected: var(--ds-color-accent);
  --c-combobox-option-text-color-selected: var(--ds-color-text-on-accent);
  --c-combobox-option-background-focused: var(--ds-color-surface-raised);
  --c-combobox-option-transition: var(--c-combobox-transition);
  
  /* Tags (for multiple selection) */
  --c-combobox-tag-background: var(--ds-color-button);
  --c-combobox-tag-border: 1px solid var(--ds-color-border);
  --c-combobox-tag-border-radius: var(--ds-radius-s);
  --c-combobox-tag-padding: var(--ds-space-xs) var(--ds-space-s);
  --c-combobox-tag-font-size: var(--ds-font-size-s);
  --c-combobox-tag-text-color: var(--ds-color-text);
  --c-combobox-tag-gap: var(--ds-space-xs);
  --c-combobox-tag-remove-size: 1rem;
  --c-combobox-tag-remove-color: var(--ds-color-icon);
  --c-combobox-tag-remove-color-hover: var(--ds-color-icon-hover);
  
  /* Error state */
  --c-combobox-error-text-color: var(--ds-color-status-danger);
  --c-combobox-error-font-size: var(--ds-font-size-s);
  --c-combobox-error-margin-top: var(--ds-space-xs);
  
  /* Spinner */
  --c-combobox-spinner-color: var(--ds-color-accent);
  --c-combobox-spinner-size: 1rem;
}

/* Base combobox styles */
.c-combobox {
  position: relative;
  width: 100%;
}

/* Label */
.c-combobox__label {
  display: block;
  font-size: var(--c-combobox-label-font-size);
  font-weight: var(--c-combobox-label-font-weight);
  color: var(--c-combobox-label-text-color);
  margin-bottom: var(--c-combobox-label-margin-bottom);
}

/* Wrapper */
.c-combobox__wrapper {
  position: relative;
  display: flex;
  align-items: center;
  background-color: var(--c-combobox-background);
  border: var(--c-combobox-border-width) solid var(--c-combobox-border-color);
  border-radius: var(--c-combobox-border-radius);
  min-height: var(--c-combobox-wrapper-min-height);
  transition: var(--c-combobox-transition);
}

.c-combobox__wrapper:hover {
  border-color: var(--c-combobox-border-color-hover);
}

.c-combobox__wrapper:focus-within {
  border-color: var(--c-combobox-border-color-focus);
  box-shadow: var(--c-combobox-shadow-focus);
}

/* Input */
.c-combobox__input {
  flex: 1;
  background: var(--c-combobox-input-background);
  border: none;
  padding: var(--c-combobox-input-padding);
  padding-right: var(--c-combobox-wrapper-padding-right);
  font-size: var(--c-combobox-input-font-size);
  line-height: var(--c-combobox-input-line-height);
  color: var(--c-combobox-input-text-color);
  outline: none;
  transition: var(--c-combobox-transition);
}

.c-combobox__input::placeholder {
  color: var(--c-combobox-input-placeholder-color);
}

.c-combobox__input:disabled {
  background: var(--c-combobox-input-background-disabled);
  color: var(--c-combobox-input-text-color-disabled);
  cursor: not-allowed;
}

/* Tags container */
.c-combobox__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--c-combobox-tag-gap);
  padding: var(--ds-space-xs) var(--ds-space-s);
  margin-right: var(--ds-space-s);
}

/* Tag */
.c-combobox__tag {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-xs);
  background: var(--c-combobox-tag-background);
  border: var(--c-combobox-tag-border);
  border-radius: var(--c-combobox-tag-border-radius);
  padding: var(--c-combobox-tag-padding);
  font-size: var(--c-combobox-tag-font-size);
  color: var(--c-combobox-tag-text-color);
  white-space: nowrap;
}

.c-combobox__tag-text {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.c-combobox__tag-remove {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--c-combobox-tag-remove-size);
  height: var(--c-combobox-tag-remove-size);
  background: transparent;
  border: none;
  border-radius: var(--ds-radius-s);
  color: var(--c-combobox-tag-remove-color);
  cursor: pointer;
  transition: var(--c-combobox-transition);
  padding: 0;
}

.c-combobox__tag-remove:hover {
  color: var(--c-combobox-tag-remove-color-hover);
  background: var(--ds-color-surface-raised);
}

/* Toggle button */
.c-combobox__toggle {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  width: var(--c-combobox-toggle-width);
  background: var(--c-combobox-toggle-background);
  border: var(--c-combobox-toggle-border);
  border-radius: 0 var(--c-combobox-border-radius) var(--c-combobox-border-radius) 0;
  color: var(--c-combobox-toggle-icon-color);
  cursor: pointer;
  transition: var(--c-combobox-toggle-transition);
  display: flex;
  align-items: center;
  justify-content: center;
}

.c-combobox__toggle:hover {
  background: var(--c-combobox-toggle-background-hover);
  color: var(--c-combobox-toggle-icon-color-hover);
}

.c-combobox__toggle:disabled {
  color: var(--c-combobox-toggle-icon-color-disabled);
  cursor: not-allowed;
}

/* Clear button */
.c-combobox__clear {
  position: absolute;
  right: var(--c-combobox-toggle-width);
  top: 50%;
  transform: translateY(-50%);
  width: var(--c-combobox-clear-width);
  height: var(--c-combobox-clear-width);
  background: var(--c-combobox-clear-background);
  border: none;
  border-radius: var(--ds-radius-s);
  color: var(--c-combobox-clear-icon-color);
  cursor: pointer;
  transition: var(--c-combobox-transition);
  display: flex;
  align-items: center;
  justify-content: center;
}

.c-combobox__clear:hover {
  background: var(--c-combobox-clear-background-hover);
  color: var(--c-combobox-clear-icon-color-hover);
}

/* Spinner */
.c-combobox__spinner {
  position: absolute;
  right: var(--c-combobox-toggle-width);
  top: 50%;
  transform: translateY(-50%);
  width: var(--c-combobox-clear-width);
  height: var(--c-combobox-clear-width);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  visibility: hidden;
  transition: var(--c-combobox-transition);
}

.c-combobox__spinner-icon {
  width: var(--c-combobox-spinner-size);
  height: var(--c-combobox-spinner-size);
  color: var(--c-combobox-spinner-color);
  animation: combobox-spin 1s linear infinite;
}

/* Dropdown */
.c-combobox__dropdown {
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  z-index: var(--c-combobox-dropdown-z-index);
  background: var(--c-combobox-dropdown-background);
  border: var(--c-combobox-dropdown-border);
  border-radius: var(--c-combobox-dropdown-border-radius);
  box-shadow: var(--c-combobox-dropdown-shadow);
  max-height: var(--c-combobox-dropdown-max-height);
  margin-top: var(--c-combobox-dropdown-margin-top);
  overflow-y: auto;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-0.5rem);
  transition: var(--c-combobox-transition);
}

.c-combobox__dropdown[aria-hidden="false"] {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

/* Options list */
.c-combobox__options {
  list-style: none;
  margin: 0;
  padding: var(--ds-space-xs) 0;
}

/* Option */
.c-combobox__option {
  display: flex;
  align-items: center;
  gap: var(--ds-space-s);
  padding: var(--c-combobox-option-padding);
  font-size: var(--c-combobox-option-font-size);
  line-height: var(--c-combobox-option-line-height);
  color: var(--c-combobox-option-text-color);
  background: var(--c-combobox-option-background);
  cursor: pointer;
  transition: var(--c-combobox-option-transition);
  user-select: none;
}

.c-combobox__option:hover,
.c-combobox__option--focused {
  background: var(--c-combobox-option-background-focused);
}

.c-combobox__option--selected {
  background: var(--c-combobox-option-background-selected);
  color: var(--c-combobox-option-text-color-selected);
}

.c-combobox__option--disabled {
  color: var(--ds-color-text-weakest);
  cursor: not-allowed;
  pointer-events: none;
}

/* Option check icon */
.c-combobox__option-check {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1rem;
  height: 1rem;
  opacity: 0;
  transition: var(--c-combobox-transition);
}

.c-combobox__option--selected .c-combobox__option-check {
  opacity: 1;
}

/* Message (no results, loading, etc.) */
.c-combobox__message {
  padding: var(--c-combobox-option-padding);
  font-size: var(--c-combobox-option-font-size);
  color: var(--ds-color-text-weak);
  text-align: center;
  font-style: italic;
}

/* Error message */
.c-combobox__error {
  margin-top: var(--c-combobox-error-margin-top);
  font-size: var(--c-combobox-error-font-size);
  color: var(--c-combobox-error-text-color);
}

/* States */

/* Multiple selection */
.c-combobox--multiple .c-combobox__input {
  padding-left: 0;
  margin-left: var(--ds-space-s);
}

.c-combobox--multiple .c-combobox__wrapper {
  flex-wrap: wrap;
  min-height: auto;
  padding: var(--ds-space-xs);
}

/* Async loading */
.c-combobox--loading .c-combobox__spinner {
  opacity: 1;
  visibility: visible;
}

.c-combobox--loading .c-combobox__clear {
  opacity: 0;
  visibility: hidden;
}

/* Disabled state */
.c-combobox--disabled .c-combobox__wrapper {
  background: var(--c-combobox-input-background-disabled);
  border-color: var(--ds-color-border);
  cursor: not-allowed;
}

.c-combobox--disabled .c-combobox__wrapper:hover {
  border-color: var(--ds-color-border);
}

.c-combobox--disabled .c-combobox__label {
  color: var(--ds-color-text-weakest);
}

/* Error state */
.c-combobox--error .c-combobox__wrapper {
  border-color: var(--c-combobox-border-color-error);
}

.c-combobox--error .c-combobox__wrapper:hover,
.c-combobox--error .c-combobox__wrapper:focus-within {
  border-color: var(--c-combobox-border-color-error);
  box-shadow: 0 0 0 1px var(--c-combobox-border-color-error);
}

/* Size variants */
.c-combobox--size-s {
  --c-combobox-input-font-size: var(--ds-font-size-s);
  --c-combobox-input-padding: var(--ds-space-xs) var(--ds-space-s);
  --c-combobox-wrapper-min-height: 2rem;
  --c-combobox-wrapper-padding-right: 2.5rem;
  --c-combobox-toggle-width: 2rem;
  --c-combobox-clear-width: 1.5rem;
  --c-combobox-option-padding: var(--ds-space-xs) var(--ds-space-s);
  --c-combobox-option-font-size: var(--ds-font-size-s);
  --c-combobox-tag-font-size: var(--ds-font-size-xs);
  --c-combobox-tag-padding: calc(var(--ds-space-xs) / 2) var(--ds-space-xs);
}

.c-combobox--size-l {
  --c-combobox-input-font-size: var(--ds-font-size-l);
  --c-combobox-input-padding: var(--ds-space-m) var(--ds-space-l);
  --c-combobox-wrapper-min-height: 3rem;
  --c-combobox-wrapper-padding-right: 3.5rem;
  --c-combobox-toggle-width: 3rem;
  --c-combobox-clear-width: 2.5rem;
  --c-combobox-option-padding: var(--ds-space-s) var(--ds-space-l);
  --c-combobox-option-font-size: var(--ds-font-size-l);
  --c-combobox-tag-font-size: var(--ds-font-size-m);
  --c-combobox-tag-padding: var(--ds-space-s) var(--ds-space-m);
}

/* Animations */
@keyframes combobox-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

/* Accessibility improvements */
@media (prefers-reduced-motion: reduce) {
  .c-combobox,
  .c-combobox__dropdown,
  .c-combobox__option,
  .c-combobox__spinner-icon {
    transition: none;
    animation: none;
  }
}

/* High contrast mode support */
@media (prefers-contrast: high) {
  .c-combobox {
    --c-combobox-border-color: ButtonText;
    --c-combobox-input-text-color: ButtonText;
    --c-combobox-option-background-selected: Highlight;
    --c-combobox-option-text-color-selected: HighlightText;
  }
  
  .c-combobox__wrapper:focus-within {
    outline: 2px solid ButtonText;
    outline-offset: 2px;
  }
}

/* Dark mode support (if implemented) */
@media (prefers-color-scheme: dark) {
  .c-combobox {
    --c-combobox-background: var(--ds-color-surface-dark, var(--ds-color-surface));
    --c-combobox-border-color: var(--ds-color-border-dark, var(--ds-color-border));
    --c-combobox-input-text-color: var(--ds-color-text-dark, var(--ds-color-text));
    --c-combobox-dropdown-background: var(--ds-color-surface-dark, var(--ds-color-surface));
  }
}

/* Print styles */
@media print {
  .c-combobox__dropdown {
    display: none !important;
  }
  
  .c-combobox__toggle,
  .c-combobox__clear,
  .c-combobox__spinner {
    display: none !important;
  }
  
  .c-combobox__input {
    border: 1px solid #000 !important;
    background: #fff !important;
    color: #000 !important;
  }
}
