/* — same header icon-button + popover chrome as `LinksMenu` (quiet until interacted with, 2.75em touch-target floor on the trigger). Kept as its own stylesheet rather than sharing `LinksMenu.css` classes — two small, independently-evolving popovers that happen to look alike today, not one component with two skins. */ .settings-menu { position: relative; } .settings-menu-button { display: flex; align-items: center; justify-content: center; width: 2.75em; height: 2.75em; padding: 0; border: 1px solid transparent; border-radius: 0.4em; background: none; color: var(--fg); font-size: 1em; line-height: 1; cursor: pointer; } .settings-menu-button:hover, .settings-menu-button[aria-expanded='true'] { border-color: var(--border); background: var(--bg-elev); } .settings-menu-popover { position: absolute; top: calc(100% + 0.4em); right: 0; z-index: 10; display: flex; flex-direction: column; gap: 0.3em; min-width: 12em; padding: 0.5em; border: 1px solid var(--border); border-radius: 0.5em; background: var(--bg-elev); box-shadow: 0 0.25em 0.75em rgba(0, 0, 0, 0.3); animation: settings-menu-popover-enter 140ms ease; } /* Mount-triggered, same shape as `LinksMenu.css`'s own version — see its comment for why a keyframe (not a transition) is the right tool here. */ @keyframes settings-menu-popover-enter { from { opacity: 0; transform: translateY(-0.25em) scale(0.98); } to { opacity: 1; transform: none; } } @media (prefers-reduced-motion: reduce) { .settings-menu-popover { animation: none; } } :root[data-motion='reduce'] .settings-menu-popover { animation: none; } :root[data-motion='allow'] .settings-menu-popover { animation: settings-menu-popover-enter 140ms ease; } .settings-menu-row { display: flex; align-items: center; justify-content: space-between; gap: 0.75em; min-height: 2.75em; padding: 0 0.3em; color: var(--fg); } .settings-menu-row select { min-height: 2.75em; padding: 0 0.4em; border: 1px solid var(--border); border-radius: 0.35em; background: var(--bg); color: var(--fg); font: inherit; }