.select { width: 100%; position: relative; display: flex; flex-direction: column; gap: var(--s-1-5); } .label { font-size: var(--font-xs); font-weight: var(--weight-bold); margin: 0; display: block; text-box: trim-start cap alphabetic; } .button { height: var(--field-size); padding: 0 var(--field-padding); border: var(--border-style); border-radius: var(--radius-field); background-color: var(--color-bg); outline: none; display: flex; align-items: center; justify-content: space-between; gap: var(--s-1-5); width: 100%; cursor: pointer; text-align: start; &:focus-visible, &[aria-expanded="true"] { outline: var(--focus-ring); outline-offset: 1px; } &:disabled { pointer-events: none; cursor: not-allowed; opacity: 0.5; outline: none; } } .selectValue { font-size: var(--font-sm); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; color: var(--color-text); display: flex; align-items: center; gap: var(--s-2); &[data-placeholder] { color: var(--color-text-high); } /* two-line items render only their label line inside the trigger */ & [slot="description"] { display: none; } } .icon { min-width: 18px; max-width: 18px; color: var(--color-text-high); } .popover { position: absolute; margin: 0; width: var(--floating-anchor-width); min-width: var(--floating-anchor-width); max-height: var(--floating-available-height, none); padding: var(--s-1); border: var(--border-style); border-radius: var(--radius-box); background-color: var(--color-bg); outline: none; color: var(--color-text); display: none; flex-direction: column; &:popover-open { display: flex; } } .listBox { overflow: auto; flex: 1 1 auto; outline: none; } .item { font-size: var(--font-sm); font-weight: var(--weight-semi); padding: var(--s-1-5); border-radius: var(--radius-field); white-space: nowrap; text-overflow: ellipsis; overflow: hidden; cursor: pointer; outline: none; /* long lists (every weapon) skip laying out and painting the options scrolled out of view, keeping them in the accessibility tree; the skipped ones must still be exactly as tall as the rendered ones or the list jumps while scrolling, and as engines disagree on whether the intrinsic size includes the padding, the height is pinned with a min-height instead */ content-visibility: auto; --option-content-height: calc(var(--font-sm) * var(--line-height)); min-block-size: calc(var(--option-content-height) + 2 * var(--s-1-5)); &[data-disabled] { color: var(--color-text-high); cursor: not-allowed; } } .itemFocused { background-color: var(--color-bg-high); color: var(--color-text); } .itemSelected { color: var(--color-fg-accent); font-weight: var(--weight-bold); } .searchField { position: relative; display: flex; gap: var(--s-2); border-bottom: 1px solid var(--color-border); border-radius: 0; accent-color: var(--color-fg-accent); color: var(--color-text); outline: none; padding: var(--s-1-5) var(--s-1-5) calc(var(--s-0-5) + var(--s-2)) var(--s-1-5); margin-block-end: var(--s-1-5); } .searchInput { all: unset; font-size: var(--font-xs); font-weight: var(--weight-semi); letter-spacing: 0.5px; flex: 1; min-width: 0; padding-inline-end: calc(18px + var(--s-2)); &::-webkit-search-cancel-button { display: none; } &::placeholder { color: var(--color-text-high); } } .searchClearButton { position: absolute; right: var(--s-2); top: 50%; transform: translateY(-50%); background-color: transparent; border: none; padding: 0; cursor: pointer; color: var(--color-text-high); } .searchField[data-empty] .searchClearButton { visibility: hidden; } .noResults { font-size: var(--font-md); font-weight: var(--weight-bold); text-align: center; padding-block: var(--s-8); color: var(--color-text-high); } .clearButton { position: absolute; bottom: -21px; right: 9px; height: 18px; &:focus-visible { outline-offset: 2px; border-radius: 6px; } } .categoryHeading { display: flex; align-items: center; gap: var(--s-2); font-weight: var(--weight-extra); color: var(--color-text-high); text-transform: uppercase; font-size: var(--font-2xs); padding-block-start: var(--s-3); padding-block-end: var(--s-1); padding-inline: var(--s-1-5); white-space: nowrap; & img { border-radius: 100%; background-color: var(--color-bg-higher); padding: var(--s-1); min-width: 28px; } } .categoryDivider { background-color: var(--color-border); width: 100%; height: 2px; margin-block: var(--s-2); }