83 lines
2.8 KiB
CSS
83 lines
2.8 KiB
CSS
/* ══ Search box ════════════════════════════════════════════════════════════
|
|
Shaped to match the view-tab track it sits opposite — see the note in
|
|
`SearchInput.tsx`. Every number here is the same number `tabBar.css` uses. */
|
|
|
|
.searchbox {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 7px;
|
|
/* The track's height and the track's corner. This is the whole point of the
|
|
component: a search that is visibly the same object as the buttons at the
|
|
other end of the row. */
|
|
height: 38px;
|
|
padding: 0 10px;
|
|
border-radius: var(--card-radius-sm);
|
|
border: var(--card-border);
|
|
background: var(--card-bg);
|
|
box-shadow: var(--card-shadow);
|
|
max-width: 100%;
|
|
transition: border-color 160ms ease, box-shadow 160ms ease;
|
|
}
|
|
|
|
/* Fills its container, for a box sitting directly above the list it filters. */
|
|
.searchbox[data-full='true'] { display: flex; width: 100%; }
|
|
|
|
.searchbox:hover { border-color: var(--color-ink-4); }
|
|
|
|
/* Focus lands on the BOX, not on the bare input inside it — the input has no
|
|
border of its own, so the default ring would draw inside the box and read as
|
|
a second, smaller field. */
|
|
.searchbox:focus-within {
|
|
border-color: var(--color-brand);
|
|
box-shadow: 0 0 0 3px var(--color-brand-tint);
|
|
}
|
|
|
|
.searchbox-icon { flex: none; color: var(--color-ink-4); }
|
|
.searchbox:focus-within .searchbox-icon { color: var(--color-brand); }
|
|
|
|
.searchbox-input {
|
|
flex: 1 1 auto;
|
|
min-width: 0;
|
|
border: 0;
|
|
padding: 0;
|
|
background: transparent;
|
|
color: var(--color-ink-1);
|
|
font: 400 13px/1 var(--font-sans);
|
|
outline: none;
|
|
/* Safari draws its own rounded field and inner shadow on a text input, and
|
|
`type="search"` adds a magnifier and a cancel button on top of ours. */
|
|
appearance: none;
|
|
-webkit-appearance: none;
|
|
}
|
|
.searchbox-input::placeholder { color: var(--color-ink-4); }
|
|
.searchbox-input::-webkit-search-decoration,
|
|
.searchbox-input::-webkit-search-cancel-button,
|
|
.searchbox-input::-webkit-search-results-button {
|
|
appearance: none;
|
|
-webkit-appearance: none;
|
|
display: none;
|
|
}
|
|
|
|
.searchbox-clear {
|
|
flex: none;
|
|
display: grid;
|
|
place-items: center;
|
|
width: 18px;
|
|
height: 18px;
|
|
padding: 0;
|
|
border: 0;
|
|
border-radius: 999px;
|
|
background: var(--color-surface-sunken);
|
|
color: var(--color-ink-3);
|
|
cursor: pointer;
|
|
transition: background 140ms ease, color 140ms ease;
|
|
}
|
|
.searchbox-clear:hover { background: var(--color-line); color: var(--color-ink-1); }
|
|
.searchbox-clear:focus-visible { outline: 2px solid var(--color-brand); outline-offset: 1px; }
|
|
|
|
/* On a phone the header row wraps, and a 260px box beside a scrolling tab
|
|
track leaves neither enough room. It takes the full line instead. */
|
|
@media (max-width: 600px) {
|
|
.searchbox { width: 100% !important; }
|
|
}
|