/* The filter by field (/design-system#field_filter). It lays out the pieces the design system already draws
   (cs-btn, cs-search, .input, ds-check, ds-chip) and never repaints them; the shell is the menu's, kept small. */
.ds-field-filter { display: contents; }

/* The trigger is a filter chip, the height of the list and responsible filters beside it; the count rides inside it. */
.ds-field-filter .ds-field-filter__trigger { --hover-size: 0; flex-shrink: 0; cursor: pointer; }

.ds-field-filter__count {
  display: inline-grid;
  place-items: center;
  min-inline-size: 16px;
  block-size: 16px;
  padding-inline: var(--ds-space-1);
  border-radius: var(--ds-radius-full);
  background: var(--ds-cta);
  color: var(--ds-on-cta);
  font-size: var(--ds-font-size-2xs);
  font-weight: var(--ds-weight-bold);
  font-variant-numeric: tabular-nums;
  line-height: 1;
}

.ds-field-filter__panel {
  box-sizing: border-box;
  inline-size: min(22rem, calc(100vw - 32px));
  padding: var(--ds-space-2);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-xl);
  background: var(--ds-bg-pure);
  color: var(--ds-text);
  overflow-y: auto;
  overscroll-behavior: contain;
}
.ds-field-filter__panel[popover] { position: fixed; inset: auto; margin: 0; z-index: var(--ds-z-menu); }
.ds-field-filter__panel :where(button, input, select, summary) { --hover-size: 0; }

.ds-field-filter__form,
.ds-field-filter__pick,
.ds-field-filter__step { display: grid; gap: var(--ds-space-2); }
.ds-field-filter__form { gap: 0; }
.ds-field-filter__carry { display: contents; }
:is(.ds-field-filter__pick, .ds-field-filter__step, .ds-field-filter__empty, .ds-field-filter__value)[hidden] { display: none; }

.ds-field-filter .ds-field-filter__search {
  display: flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-block-size: 2.5rem;
  padding-inline: var(--ds-space-3);
  border: 1px solid var(--ds-border);
  border-radius: var(--ds-radius-full);
  background: var(--ds-bg-subtle);
  color: var(--ds-text-muted);
}
.ds-field-filter .ds-field-filter__search:focus-within { border-color: var(--ds-focus-ring); }
.ds-field-filter .ds-field-filter__search .cs-search-field {
  flex: 1;
  min-inline-size: 0;
  padding: 0;
  border: 0;
  outline: none;
  background: transparent;
  color: var(--ds-text);
  font-size: var(--ds-font-size-sm);
}

.ds-field-filter__list { display: grid; gap: 2px; max-block-size: 18rem; margin: 0; padding: 0; overflow-y: auto; list-style: none; }

.ds-field-filter__group {
  padding: var(--ds-space-2) var(--ds-space-2) var(--ds-space-1);
  color: var(--ds-text-secondary);
  font-size: var(--ds-font-size-2xs);
  font-weight: var(--ds-weight-semibold);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.ds-field-filter__option {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--ds-space-2);
  min-block-size: 2.25rem;
  padding-inline: var(--ds-space-2);
  border-radius: var(--ds-radius-lg);
  color: var(--ds-text);
  font-size: var(--ds-font-size-compact);
  font-weight: var(--ds-weight-medium);
  cursor: pointer;
  transition: background-color var(--ds-duration-fast);
}
.ds-field-filter__option[hidden] { display: none; }
.ds-field-filter__option:is(:hover, .is-active) { background: var(--ds-hover); }
.ds-field-filter__option[aria-selected="true"] { background: var(--ds-cta-soft); color: var(--ds-on-cta-soft); }
.ds-field-filter__option[aria-selected="true"]:is(:hover, .is-active) { background: var(--ds-cta-soft-hover); }
.ds-field-filter__option[aria-selected="true"] .ds-field-filter__type { color: inherit; }

.ds-field-filter__type { flex-shrink: 0; color: var(--ds-text-muted); }
.ds-field-filter__name { min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ds-field-filter__kind { color: var(--ds-text-secondary); font-size: var(--ds-font-size-2xs); font-weight: var(--ds-weight-regular); }
.ds-field-filter__option[aria-selected="true"] .ds-field-filter__kind { color: inherit; }

.ds-field-filter__empty {
  display: grid;
  justify-items: center;
  gap: var(--ds-space-2);
  margin: 0;
  padding: var(--ds-space-4) var(--ds-space-2);
  color: var(--ds-text-secondary);
  font-size: var(--ds-font-size-sm);
  text-align: center;

  > p { margin: 0; }
}

.ds-field-filter__head { display: flex; align-items: center; gap: var(--ds-space-1); }
.ds-field-filter__back { flex-shrink: 0; }
.ds-field-filter__title {
  display: inline-flex;
  align-items: center;
  gap: var(--ds-space-2);
  min-inline-size: 0;
  font-size: var(--ds-font-size-sm);
  font-weight: var(--ds-weight-semibold);

  > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}

.ds-field-filter__label { color: var(--ds-text-secondary); font-size: var(--ds-font-size-xs); font-weight: var(--ds-weight-semibold); }
.ds-field-filter__operator,
.ds-field-filter__input { inline-size: 100%; min-inline-size: 0; }

.ds-field-filter__value { display: grid; gap: var(--ds-space-2); }
.ds-field-filter__range { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: var(--ds-space-2); }
.ds-field-filter__range:not(:has([data-slot="second"]:not([hidden]))) { grid-template-columns: minmax(0, 1fr); }
.ds-field-filter__range [hidden] { display: none; }
.ds-field-filter__and { color: var(--ds-text-secondary); font-size: var(--ds-font-size-xs); }

.ds-field-filter__options { display: grid; gap: var(--ds-space-1); max-block-size: 14rem; padding-block: var(--ds-space-1); overflow-y: auto; }

.ds-field-filter__actions { display: flex; justify-content: flex-end; padding-block-start: var(--ds-space-1); }

.ds-field-filter__status { margin: 0; padding: var(--ds-space-1) var(--ds-space-2) 0; color: var(--ds-negative); font-size: var(--ds-font-size-xs); }
.ds-field-filter__status:empty { display: none; }

/* The applied conditions, under the filters, as chips that reopen and remove them. */
.ds-field-filter__chips { display: flex; flex-wrap: wrap; align-items: center; gap: var(--ds-space-2); min-inline-size: 0; }
.ds-field-filter__chip { max-inline-size: 100%; }
.ds-field-filter__chip:has(.ds-field-filter__chip-edit:hover) { background: light-dark(var(--ds-hover), var(--ds-border)); color: var(--ds-text); }

.ds-field-filter__chip-edit {
  --hover-size: 0;
  min-inline-size: 0;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}
.ds-field-filter__chip-edit:focus-visible { outline: 2px solid var(--ds-focus-ring); outline-offset: 0; border-radius: var(--ds-radius-sm); }

.ds-field-filter__clear {
  color: var(--ds-link);
  font-size: var(--ds-font-size-xs);
  font-weight: var(--ds-weight-semibold);
  text-decoration: none;
}
.ds-field-filter__clear:hover { text-decoration: underline; }
.ds-field-filter__clear:focus-visible { outline: 2px solid var(--ds-focus-ring); outline-offset: 0; border-radius: var(--ds-radius-sm); }

.ds-field-filter--inline .ds-field-filter__panel { inline-size: 22rem; max-inline-size: 100%; }

@media (max-width: 40rem), (pointer: coarse) {
  .ds-field-filter .ds-field-filter__search .cs-search-field,
  .ds-field-filter__panel :is(.ds-field-filter__operator, .ds-field-filter__input) { font-size: 16px; }
  .ds-field-filter__option { min-block-size: 44px; }
  .ds-field-filter__options .ds-check { min-block-size: 44px; }
}
