/* ============================================================
   ELEGANT MINIMALIST UI KIT — Select & Multiselect Components
   select.css

   ANATOMY — SINGLE SELECT
   ─────────────────────────────────────────────────────────────
   Structure:
     <div class="select select-md" data-select>
       <label class="input-label">Category</label>
       <div class="select-trigger" role="combobox" aria-expanded="false">
         <span class="select-placeholder">Choose...</span>
         <span class="select-value" hidden>Selected value</span>
         <svg class="select-chevron">...</svg>
       </div>
       <!-- Hidden native select for form submission -->
       <select name="category" hidden></select>
       <div class="select-dropdown" role="listbox">
         <div class="select-search-wrapper">
           <input class="select-search-input" type="text" placeholder="Search..." />
         </div>
         <div class="select-options">
           <div class="select-option" role="option" data-value="a">
             <span>Option A</span>
             <svg class="select-check">...</svg>
           </div>
           <!-- Group separator -->
           <div class="select-group-label">Group Name</div>
           <div class="select-option" role="option" data-value="b">
             <span>Option B</span>
             <svg class="select-check">...</svg>
           </div>
         </div>
       </div>
       <span class="input-helper">Helper text</span>
     </div>

   Class layers:
     1. .select                → Wrapper, layout
     2. .select-{size}         → Height, font-size
     3. .select-trigger         → Visible button (fake select)
     4. .select-dropdown        → Dropdown panel (hidden by default)
     5. .select-open            → Modifier: dropdown is visible
     6. .select-disabled        → Modifier: non-interactive
     7. .select-error           → Modifier: error state
     8. .select-success         → Modifier: success state
     9. .select-option          → Individual option
    10. .select-option-selected → Selected option style
    11. .select-group-label     → Group separator
    12. .select-chevron          → Dropdown arrow (rotates on open)
   ─────────────────────────────────────────────────────────────

   ANATOMY — MULTISELECT
   ─────────────────────────────────────────────────────────────
   Structure:
     <div class="multiselect multiselect-md" data-multiselect>
       <label class="input-label">Tags</label>
       <div class="select-trigger" role="combobox" aria-expanded="false">
         <div class="multiselect-tags">
           <span class="multiselect-tag" data-value="x">
             <span class="multiselect-tag-label">Tag X</span>
             <button class="multiselect-tag-remove" type="button">
               <svg>×</svg>
             </button>
           </span>
           <span class="multiselect-counter">+5</span>
           <input class="multiselect-search-input" placeholder="Search..." />
         </div>
         <svg class="select-chevron">...</svg>
       </div>
       <select name="tags" multiple hidden></select>
       <div class="select-dropdown" role="listbox">
         <div class="multiselect-actions">
           <button class="multiselect-select-all">Select All</button>
           <button class="multiselect-clear-all">Clear All</button>
         </div>
         <!-- options same as single select -->
       </div>
     </div>
   ─────────────────────────────────────────────────────────────
   ============================================================ */

/* ═══════════════════════════════════════════════════════════
   SELECT — Base wrapper
   ═══════════════════════════════════════════════════════════ */

.select,
.multiselect {
  display: flex;
  flex-direction: column;
  gap: var(--space-1-5);
  width: 100%;
  position: relative;
}

/* ═══════════════════════════════════════════════════════════
   SELECT — Trigger (visible button)
   ═══════════════════════════════════════════════════════════ */

.select-trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  border: var(--border-width) solid var(--border-color);
  border-radius: var(--radius-sm);
  background-color: var(--select-bg);
  cursor: pointer;
  user-select: none;
  -webkit-user-select: none;
  position: relative;
  transition: border-color var(--duration-fast) var(--ease-in-out),
              box-shadow var(--duration-fast) var(--ease-out);
  overflow: hidden;
}

.select-trigger:hover:not(:disabled) {
  border-color: var(--border-color-strong);
}

/* Chevron icon */
.select-chevron {
  flex-shrink: 0;
  width: var(--space-4);
  height: var(--space-4);
  margin-right: var(--space-3);
  color: var(--input-icon-color);
  transition: transform var(--duration-normal) var(--ease-in-out);
}

.select-chevron svg {
  width: 100%;
  height: 100%;
}

/* Rotate chevron on open */
.select-open .select-chevron {
  transform: rotate(180deg);
}

/* Placeholder / value display */
.select-placeholder,
.select-value {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  line-height: var(--leading-none);
}

.select-placeholder {
  color: var(--input-placeholder-color);
}

.select-value {
  color: var(--input-text-color);
}

/* ═══════════════════════════════════════════════════════════
   SELECT — Sizes
   ═══════════════════════════════════════════════════════════ */

.select-sm .select-trigger {
  min-height: var(--select-sm-height);
  padding: var(--space-1) var(--space-3);
  font-size: var(--text-sm);
}

.select-md .select-trigger {
  min-height: var(--select-md-height);
  padding: var(--space-2) var(--space-4);
  font-size: var(--text-sm);
}

.select-lg .select-trigger {
  min-height: var(--select-lg-height);
  padding: var(--space-2-5) var(--space-4);
  font-size: var(--text-base);
}

/* ═══════════════════════════════════════════════════════════
   SELECT — Dropdown panel
   ═══════════════════════════════════════════════════════════ */

.select-dropdown {
  position: absolute;
  top: calc(100% + var(--space-1));
  left: 0;
  width: 100%;
  max-height: var(--select-dropdown-max-height);
  background-color: var(--select-bg);
  border: var(--border-width) solid var(--border-color);
  border-radius: var(--radius-sm);
  box-shadow: var(--select-dropdown-shadow);
  z-index: var(--z-dropdown);
  opacity: 0;
  transform: translateY(-4px);
  pointer-events: none;
  transition: opacity var(--duration-normal) var(--ease-out),
              transform var(--duration-normal) var(--ease-out);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

/* Flip above if .select-flip-up is set by JS */
.select-flip-up {
  top: auto;
  bottom: calc(100% + var(--space-1));
  transform: translateY(4px);
}

.select-open .select-dropdown {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

.select-flip-up.select-open .select-dropdown {
  transform: translateY(0);
}

/* Options container with scroll */
.select-options {
  overflow-y: auto;
  max-height: var(--select-dropdown-max-height);
  padding: var(--space-1) 0;
}

/* ═══════════════════════════════════════════════════════════
   SELECT — Search input inside dropdown
   ═══════════════════════════════════════════════════════════ */

.select-search-wrapper {
  padding: var(--space-2) var(--space-2) var(--space-1);
  border-bottom: var(--border-width) solid var(--color-neutral-100);
}

.select-search-input {
  width: 100%;
  border: var(--border-width) solid var(--select-search-border);
  border-radius: var(--radius-sm);
  padding: var(--space-1-5) var(--space-2-5);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  color: var(--input-text-color);
  background-color: var(--color-neutral-50);
  outline: none;
  transition: border-color var(--duration-fast) var(--ease-in-out);
}

.select-search-input::placeholder {
  color: var(--input-placeholder-color);
}

.select-search-input:focus {
  border-color: var(--input-focus-color);
}

/* ═══════════════════════════════════════════════════════════
   SELECT — Individual option
   ═══════════════════════════════════════════════════════════ */

.select-option {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  min-height: var(--select-option-height);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  color: var(--input-text-color);
  cursor: pointer;
  transition: background-color var(--duration-fast) var(--ease-in-out),
              color var(--duration-fast) var(--ease-in-out);
  user-select: none;
  -webkit-user-select: none;
}

.select-option:hover {
  background-color: var(--select-option-hover-bg);
}

.select-option:active {
  background-color: var(--select-option-active-bg);
}

/* Keyboard-focused option */
.select-option.is-focused {
  background-color: var(--select-option-hover-bg);
  outline: var(--focus-ring-width) solid var(--focus-ring-color);
  outline-offset: 0;
}

/* Selected option */
.select-option.is-selected {
  background-color: var(--select-option-active-bg);
  color: var(--input-text-color);
  font-weight: var(--font-medium);
}

/* Checkmark (hidden until selected) */
.select-check {
  flex-shrink: 0;
  width: var(--space-4);
  height: var(--space-4);
  color: var(--input-focus-color);
  opacity: 0;
  transform: scale(0.8);
  transition: opacity var(--duration-fast) var(--ease-in-out),
              transform var(--duration-fast) var(--ease-out);
}

.select-option.is-selected .select-check {
  opacity: 1;
  transform: scale(1);
}

/* Hidden option (filtered out by search) */
.select-option.is-hidden {
  display: none;
}

/* Disabled option */
.select-option.is-disabled {
  opacity: 0.4;
  cursor: not-allowed;
  pointer-events: none;
}

/* ═══════════════════════════════════════════════════════════
   SELECT — Group label separator
   ═══════════════════════════════════════════════════════════ */

.select-group-label {
  padding: var(--space-1-5) var(--space-3);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--font-semibold);
  color: var(--select-group-label-color);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wider);
  border-top: var(--border-width) solid var(--color-neutral-100);
  margin-top: var(--space-1);
}

.select-group-label:first-child {
  margin-top: 0;
  border-top: none;
}

/* ═══════════════════════════════════════════════════════════
   SELECT — States
   ═══════════════════════════════════════════════════════════ */

/* Disabled */
.select-disabled .select-trigger {
  opacity: var(--input-disabled-opacity);
  cursor: var(--input-disabled-cursor);
  pointer-events: none;
}

.select-disabled .select-chevron {
  opacity: 0.5;
}

/* Error */
.select-error .select-trigger {
  border-color: var(--color-error);
}

.select-error.select-open .select-trigger {
  border-color: var(--input-focus-error);
  box-shadow: 0 0 0 var(--focus-ring-width) var(--input-focus-error);
}

.select-error .select-chevron {
  color: var(--color-error);
}

/* Success */
.select-success .select-trigger {
  border-color: var(--color-success);
}

.select-success.select-open .select-trigger {
  border-color: var(--input-focus-success);
  box-shadow: 0 0 0 var(--focus-ring-width) var(--input-focus-success);
}

.select-success .select-chevron {
  color: var(--color-success);
}

/* ═══════════════════════════════════════════════════════════
   MULTISELECT — Trigger with tags
   ═══════════════════════════════════════════════════════════ */

.multiselect-tags {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-1);
  flex: 1;
  min-width: 0;
  padding: var(--space-0-5) 0;
}

/* Tag inside multiselect */
.multiselect-tag {
  display: inline-flex;
  align-items: center;
  gap: var(--space-0-5);
  padding: var(--space-0-25) var(--space-1-5) var(--space-0-25) var(--space-2);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--font-medium);
  color: var(--color-neutral-700);
  background-color: var(--color-neutral-100);
  border-radius: var(--radius-sm);
  line-height: var(--leading-none);
  white-space: nowrap;
  animation: tag-fade-in var(--duration-normal) var(--ease-out);
}

@keyframes tag-fade-in {
  from {
    opacity: 0;
    transform: scale(0.9);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

.multiselect-tag-label {
  max-width: var(--space-32);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Remove button on tag */
.multiselect-tag-remove {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--space-3-5);
  height: var(--space-3-5);
  border: none;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-neutral-400);
  cursor: pointer;
  padding: 0;
  transition: color var(--duration-fast) var(--ease-in-out),
              background-color var(--duration-fast) var(--ease-in-out);
}

.multiselect-tag-remove:hover {
  color: var(--color-neutral-700);
  background-color: var(--color-neutral-200);
}

.multiselect-tag-remove svg {
  width: var(--space-3);
  height: var(--space-3);
}

/* Counter badge for overflow tags */
.multiselect-counter {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: var(--select-counter-min-width);
  height: var(--select-counter-height);
  padding: 0 var(--space-1);
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--font-medium);
  color: var(--color-neutral-600);
  background-color: var(--select-counter-bg);
  border-radius: var(--radius-pill);
  line-height: var(--leading-none);
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  -moz-font-feature-settings: 'tnum';
  font-feature-settings: 'tnum';
}

/* Search input inside multiselect trigger */
.multiselect-search-input {
  border: none;
  outline: none;
  background: transparent;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  color: var(--input-text-color);
  min-width: var(--select-search-min-width);
  flex: 1;
  padding: var(--space-1) 0;
  line-height: var(--leading-none);
}

.multiselect-search-input::placeholder {
  color: var(--input-placeholder-color);
}

/* ═══════════════════════════════════════════════════════════
   MULTISELECT — Select All / Clear All actions
   ═══════════════════════════════════════════════════════════ */

.multiselect-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-1) var(--space-2);
  border-bottom: var(--border-width) solid var(--color-neutral-100);
  gap: var(--space-2);
}

.multiselect-actions button {
  font-family: var(--font-sans);
  font-size: var(--text-xs);
  font-weight: var(--font-medium);
  color: var(--input-focus-color);
  background: transparent;
  border: none;
  cursor: pointer;
  padding: var(--space-1) var(--space-1-5);
  border-radius: var(--radius-sm);
  transition: background-color var(--duration-fast) var(--ease-in-out),
              color var(--duration-fast) var(--ease-in-out);
}

.multiselect-actions button:hover {
  background-color: var(--color-accent-50);
}

.multiselect-actions button:active {
  background-color: var(--color-accent-100);
}

.multiselect-actions .multiselect-clear-all {
  color: var(--color-error);
}

.multiselect-actions .multiselect-clear-all:hover {
  background-color: var(--color-error-light);
}

/* ═══════════════════════════════════════════════════════════
   MULTISELECT — Sizes
   ═══════════════════════════════════════════════════════════ */

.multiselect-sm .select-trigger {
  min-height: var(--select-sm-height);
  padding: var(--space-1) var(--space-3);
  font-size: var(--text-sm);
}

.multiselect-md .select-trigger {
  min-height: var(--select-md-height);
  padding: var(--space-2) var(--space-4);
  font-size: var(--text-sm);
}

.multiselect-lg .select-trigger {
  min-height: var(--select-lg-height);
  padding: var(--space-2-5) var(--space-4);
  font-size: var(--text-base);
}

/* ═══════════════════════════════════════════════════════════
   MULTISELECT — States
   ═══════════════════════════════════════════════════════════ */

.select-disabled.multiselect .select-trigger {
  opacity: var(--input-disabled-opacity);
  cursor: var(--input-disabled-cursor);
  pointer-events: none;
}

.select-error.multiselect .select-trigger {
  border-color: var(--color-error);
}

.select-error.multiselect.select-open .select-trigger {
  border-color: var(--input-focus-error);
  box-shadow: 0 0 0 var(--focus-ring-width) var(--input-focus-error);
}

.select-success.multiselect .select-trigger {
  border-color: var(--color-success);
}

.select-success.multiselect.select-open .select-trigger {
  border-color: var(--input-focus-success);
  box-shadow: 0 0 0 var(--focus-ring-width) var(--input-focus-success);
}

/* ═══════════════════════════════════════════════════════════
   UTILITY: No results message
   ═══════════════════════════════════════════════════════════ */

.select-no-results {
  padding: var(--space-4) var(--space-3);
  text-align: center;
  font-size: var(--text-sm);
  color: var(--color-neutral-400);
  font-style: italic;
}
