* { box-sizing: border-box; } html, body { margin: 0; } body { font-family: var(--orca-font, "Segoe UI", sans-serif); font-size: 13px; color: var(--text, var(--orca-fg, #1b1c1e)); background: var(--bg, var(--orca-bg, #fff)); overflow: hidden; user-select: none; } .launcher { display: flex; flex-direction: column; background: var(--panel, var(--orca-bg, #fff)); border: 1px solid var(--border, var(--orca-border, #ddd)); overflow: hidden; /* why: no height cap here - the launcher reports its true natural height to C++, which sizes the popup to match (HTML is source of truth). The list's own max-height is what bounds growth; capping the launcher would make the measurement circular. */ } .fav-bar { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; padding: 9px 10px; border-bottom: 1px solid var(--border, var(--orca-border, #ddd)); overflow-x: auto; /* scroll horizontally once favourites overflow the row */ scrollbar-width: thin; /* why: keep scrollIntoView (arrow-nav) from scrolling the first/last tile flush to the edge, which would clip its selected outline. Matches the 10px horizontal padding. */ scroll-padding-inline: 10px; } .fav-bar[hidden] { display: none; } /* Name of the selected favourite, above the bar; left-aligned to the tiles' 10px inset. */ .fav-eyebrow { flex: 0 0 auto; padding: 8px 10px 0; } .fav-tile { flex: 0 0 auto; /* keep tiles full-size; don't shrink to fit - scroll instead */ width: 30px; height: 30px; border: 0; border-radius: 8px; cursor: pointer; color: hsl(var(--h) var(--speed-tile-text-s, 72%) var(--speed-tile-text-l, 38%)); font-weight: 700; /* why: mirror .tile centering - tileCode can be 2-3 chars (e.g. "EA1") on collision, and a bare