Browser support
Which browsers Apogee targets, the modern platform features it relies on, and how each degrades where support isn't there yet.
Last updated
Policy
- Evergreen browsers, current and previous major: Chrome/Edge, Firefox, Safari (desktop + iOS). No IE, no legacy Edge.
- Progressive enhancement is the floor. Every component renders and is
usable with zero JavaScript; JS only adds affordances, gated by
no-js:(see Progressive enhancement). An old or JS-disabled browser gets working content, never a dead control. - Newer CSS degrades, never breaks. Where a component uses a not-yet-everywhere feature, it falls back to a plain — un-animated or centered — state, listed below.
Modern features used
| Feature | Support | Components | Fallback |
|---|---|---|---|
<dialog> + showModal() |
Baseline (widely available) | Dialog, CommandPalette | — |
Popover API ([popover], popovertarget, popover="manual") |
Baseline 2025 | Popover, Tooltip, Dropdown, ContextMenu, Menubar, Select (custom), Combobox | — |
Invoker commands (command, commandfor) |
Newer; Baseline ~2026 | Dialog | small showModal() script |
closedby="any" |
Chromium-first | Dialog, CommandPalette | JS backdrop-close (shipped) |
CSS anchor positioning (position-area, position-try-fallbacks) |
Baseline January 2026 (Chrome 125, Safari 26, Firefox 147) | Popover, Tooltip, Dropdown, Menubar, Select (custom), Combobox | panel centers on screen |
anchor-size() (width="trigger") |
Newer; reached Firefox after the rest | Popover, Dropdown, Select (custom), Combobox | panel is content-sized |
@starting-style + transition-behavior: allow-discrete / overlay |
Chrome, Safari 17.4+, Firefox 129+ | Dialog and every anchored panel | appears with no fade |
::details-content + interpolate-size: allow-keywords |
Chromium-first | Accordion, Collapsible | opens/closes instantly, no height animation |
<meter> pseudo-elements (::-webkit-meter-*, ::-moz-meter-bar) |
WebKit/Blink + Firefox | Meter | native meter styling |
| Scroll-snap | Baseline | Carousel | plain horizontal scroll |
Container queries (container-type, cqw) |
Baseline 2023 | Marquee | — |
:has() |
Baseline 2023 | DataGrid, several | row tint absent |
color-mix() |
Baseline 2023 | Alert, Toast (tinted borders) | — |
oklch() colours |
Baseline 2023 (Safari 15.4+) | tokens (via Tailwind) | — |
inert |
Baseline 2023 | Marquee (duplicate panel) | — |
Logical properties (*-inline-*, ms/me…) |
Baseline | all components (RTL) | — |
Clipboard API (navigator.clipboard) |
Secure context | Code (copy) | button no-ops if blocked (caught) |
appearance: none custom controls |
Baseline | Checkbox, Radio, Select, Slider, Meter | — |
Vertical range input (writing-mode on form controls) |
Chrome 124, Firefox 120, Safari 17.4 | Slider orientation="vertical" |
shows horizontal |
:has() scroll lock (body:has(dialog:modal)) |
Chrome 105, Firefox 121, Safari 15.4 | Dialog, CommandPalette, lockScroll() |
page behind can scroll |
field-sizing: content |
Chromium only | Textarea resize="auto" |
a four-line island grows it on input |
Scroll-driven animations (animation-timeline: scroll()) |
not used: behind a flag in Firefox | Tabs, Table, ScrollArea edge fades run on a small island instead | — |
“Baseline” here follows the web-platform Baseline status — “widely available” means it’s safe to use without a fallback; a dated Baseline (e.g. “Baseline 2024”) means it shipped in all evergreen engines by that year.
Chromium-first, called out
Two features render best in Chromium today and degrade — never break — elsewhere:
- Dialog — invoker commands +
closedby="any"; a tiny JS fallback (already shipped in the component) covers older engines. - Accordion / Collapsible —
interpolate-sizeheight animation; the panel snaps open/closed instantly without it.
Everything else in the table above is Baseline or has a transparent fallback with no visible loss of function.
Verifying
There’s no automated cross-browser suite yet (Playwright is planned). For
now, test the / playground and /rtl page in the target browsers — the
zero-JS floor means the critical check is “does it work with JavaScript
off?”, and it does.
Not now
- No automated visual regression or cross-browser CI.
- No support target below evergreen — no IE, no legacy Edge, no other polyfill target.