.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: fixed; position-area: block-end; width: anchor-size(width); min-width: anchor-size(width); /* fills the space the position-area leaves (its containing block), less the gap to the anchor (the popover's own margin) and the padding to the viewport edge; which side that space is on gets pinned when the popover opens, which also sets the cap in pixels as WebKit does not resolve this percentage */ max-height: calc(100% - var(--s-2) - 12px); margin: var(--s-2) 0; 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; } /* opened upwards the sticky header is the ceiling, not the viewport top */ &[data-side="above"] { max-height: calc(100% - var(--s-2) - 12px - var(--popover-boundary-top)); } } .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 */ content-visibility: auto; contain-intrinsic-block-size: auto 33px; &[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-text-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-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); }