web-features 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.json +1 -1
  2. package/package.json +1 -1
package/index.json CHANGED
@@ -1 +1 @@
1
- {"abortable-fetch":{"compat_features":["api.fetch.init_signal_parameter","api.Request.signal"],"description":"If you construct a fetch request with an AbortSignal, you can cancel the request.","description_html":"If you construct a fetch request with an <code>AbortSignal</code>, you can cancel the request.","name":"Abortable fetch","spec":"https://fetch.spec.whatwg.org/#ref-for-dom-request-signal%E2%91%A1","status":{"baseline":"high","baseline_high_date":"2021-09-25","baseline_low_date":"2019-03-25","support":{"chrome":"66","chrome_android":"66","edge":"16","firefox":"57","firefox_android":"57","safari":"12.1","safari_ios":"12.2"}}},"aborting":{"caniuse":"abortcontroller","compat_features":["api.AbortController","api.AbortController.AbortController","api.AbortController.abort","api.AbortController.signal","api.AbortSignal","api.AbortSignal.abort_event","api.AbortSignal.aborted"],"description":"The AbortController and AbortSignal APIs allow you to cancel an ongoing operation, such as a fetch() request.","description_html":"The <code>AbortController</code> and <code>AbortSignal</code> APIs allow you to cancel an ongoing operation, such as a <code>fetch()</code> request.","name":"AbortController and AbortSignal","spec":"https://dom.spec.whatwg.org/#aborting-ongoing-activities","status":{"baseline":"high","baseline_high_date":"2021-09-25","baseline_low_date":"2019-03-25","support":{"chrome":"66","chrome_android":"66","edge":"16","firefox":"57","firefox_android":"57","safari":"12.1","safari_ios":"12.2"}}},"abortsignal-any":{"compat_features":["api.AbortSignal.any_static"],"description":"The AbortSignal.any() static method combines an iterable of abort signals into a single signal, with the abort reason taken from the first signal to abort.","description_html":"The <code>AbortSignal.any()</code> static method combines an iterable of abort signals into a single signal, with the abort reason taken from the first signal to abort.","name":"AbortSignal.any()","spec":"https://dom.spec.whatwg.org/#dom-abortsignal-any","status":{"baseline":"low","baseline_low_date":"2024-03-19","support":{"chrome":"116","chrome_android":"116","edge":"116","firefox":"124","firefox_android":"124","safari":"17.4","safari_ios":"17.4"}}},"abs-sign":{"compat_features":["css.types.abs","css.types.sign"],"description":"The abs() and sign() CSS functions compute the absolute value or the sign of the input.","description_html":"The <code>abs()</code> and <code>sign()</code> CSS functions compute the absolute value or the sign of the input.","name":"abs() and sign()","spec":"https://drafts.csswg.org/css-values-4/#sign-funcs","status":{"baseline":false,"support":{"firefox":"118","firefox_android":"118","safari":"15.4","safari_ios":"15.4"}}},"accent-color":{"compat_features":["css.properties.accent-color","css.properties.accent-color.auto"],"description":"The accent-color CSS property sets a color for checkboxes, radio buttons, and other form controls.","description_html":"The <code>accent-color</code> CSS property sets a color for checkboxes, radio buttons, and other form controls.","name":"accent-color","spec":"https://drafts.csswg.org/css-ui-4/#widget-accent","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"93","chrome_android":"93","edge":"93","firefox":"92","firefox_android":"92","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/695"},"anchor-positioning":{"caniuse":"css-anchor-positioning","compat_features":["api.CSSPositionTryDescriptors","api.CSSPositionTryDescriptors.align-self","api.CSSPositionTryDescriptors.alignSelf","api.CSSPositionTryDescriptors.block-size","api.CSSPositionTryDescriptors.blockSize","api.CSSPositionTryDescriptors.bottom","api.CSSPositionTryDescriptors.height","api.CSSPositionTryDescriptors.inline-size","api.CSSPositionTryDescriptors.inlineSize","api.CSSPositionTryDescriptors.inset","api.CSSPositionTryDescriptors.inset-area","api.CSSPositionTryDescriptors.inset-block","api.CSSPositionTryDescriptors.inset-block-end","api.CSSPositionTryDescriptors.inset-block-start","api.CSSPositionTryDescriptors.inset-inline","api.CSSPositionTryDescriptors.inset-inline-end","api.CSSPositionTryDescriptors.inset-inline-start","api.CSSPositionTryDescriptors.insetArea","api.CSSPositionTryDescriptors.insetBlock","api.CSSPositionTryDescriptors.insetBlockEnd","api.CSSPositionTryDescriptors.insetBlockStart","api.CSSPositionTryDescriptors.insetInline","api.CSSPositionTryDescriptors.insetInlineEnd","api.CSSPositionTryDescriptors.insetInlineStart","api.CSSPositionTryDescriptors.justify-self","api.CSSPositionTryDescriptors.justifySelf","api.CSSPositionTryDescriptors.left","api.CSSPositionTryDescriptors.margin","api.CSSPositionTryDescriptors.margin-block","api.CSSPositionTryDescriptors.margin-block-end","api.CSSPositionTryDescriptors.margin-block-start","api.CSSPositionTryDescriptors.margin-bottom","api.CSSPositionTryDescriptors.margin-inline","api.CSSPositionTryDescriptors.margin-inline-end","api.CSSPositionTryDescriptors.margin-inline-start","api.CSSPositionTryDescriptors.margin-left","api.CSSPositionTryDescriptors.margin-right","api.CSSPositionTryDescriptors.margin-top","api.CSSPositionTryDescriptors.marginBlock","api.CSSPositionTryDescriptors.marginBlockEnd","api.CSSPositionTryDescriptors.marginBlockStart","api.CSSPositionTryDescriptors.marginBottom","api.CSSPositionTryDescriptors.marginInline","api.CSSPositionTryDescriptors.marginInlineEnd","api.CSSPositionTryDescriptors.marginInlineStart","api.CSSPositionTryDescriptors.marginLeft","api.CSSPositionTryDescriptors.marginRight","api.CSSPositionTryDescriptors.marginTop","api.CSSPositionTryDescriptors.max-block-size","api.CSSPositionTryDescriptors.max-height","api.CSSPositionTryDescriptors.max-inline-size","api.CSSPositionTryDescriptors.max-width","api.CSSPositionTryDescriptors.maxBlockSize","api.CSSPositionTryDescriptors.maxHeight","api.CSSPositionTryDescriptors.maxInlineSize","api.CSSPositionTryDescriptors.maxWidth","api.CSSPositionTryDescriptors.min-block-size","api.CSSPositionTryDescriptors.min-height","api.CSSPositionTryDescriptors.min-inline-size","api.CSSPositionTryDescriptors.min-width","api.CSSPositionTryDescriptors.minBlockSize","api.CSSPositionTryDescriptors.minHeight","api.CSSPositionTryDescriptors.minInlineSize","api.CSSPositionTryDescriptors.minWidth","api.CSSPositionTryDescriptors.place-self","api.CSSPositionTryDescriptors.placeSelf","api.CSSPositionTryDescriptors.position-anchor","api.CSSPositionTryDescriptors.positionAnchor","api.CSSPositionTryDescriptors.right","api.CSSPositionTryDescriptors.top","api.CSSPositionTryDescriptors.width","api.CSSPositionTryRule","api.CSSPositionTryRule.name","api.CSSPositionTryRule.style","css.at-rules.position-try","css.properties.align-items.anchor-center","css.properties.align-self.anchor-center","css.properties.anchor-name","css.properties.anchor-name.none","css.properties.block-size.anchor-size","css.properties.bottom.anchor","css.properties.height.anchor-size","css.properties.inline-size.anchor-size","css.properties.inset.anchor","css.properties.inset-area","css.properties.inset-area.block-end","css.properties.inset-area.block-start","css.properties.inset-area.bottom","css.properties.inset-area.center","css.properties.inset-area.end","css.properties.inset-area.inline-end","css.properties.inset-area.inline-start","css.properties.inset-area.left","css.properties.inset-area.none","css.properties.inset-area.right","css.properties.inset-area.self-end","css.properties.inset-area.self-start","css.properties.inset-area.span-all","css.properties.inset-area.span-block-end","css.properties.inset-area.span-block-start","css.properties.inset-area.span-bottom","css.properties.inset-area.span-end","css.properties.inset-area.span-inline-end","css.properties.inset-area.span-inline-start","css.properties.inset-area.span-start","css.properties.inset-area.span-top","css.properties.inset-area.span-x-end","css.properties.inset-area.span-x-start","css.properties.inset-area.span-y-end","css.properties.inset-area.span-y-start","css.properties.inset-area.start","css.properties.inset-area.top","css.properties.inset-area.x-end","css.properties.inset-area.x-self-end","css.properties.inset-area.x-self-start","css.properties.inset-area.x-start","css.properties.inset-area.y-end","css.properties.inset-area.y-self-end","css.properties.inset-area.y-self-start","css.properties.inset-area.y-start","css.properties.inset-block.anchor","css.properties.inset-block-end.anchor","css.properties.inset-block-start.anchor","css.properties.inset-inline.anchor","css.properties.inset-inline-end.anchor","css.properties.inset-inline-start.anchor","css.properties.justify-items.anchor-center","css.properties.justify-self.anchor-center","css.properties.left.anchor","css.properties.max-block-size.anchor-size","css.properties.max-height.anchor-size","css.properties.max-inline-size.anchor-size","css.properties.max-width.anchor-size","css.properties.min-block-size.anchor-size","css.properties.min-height.anchor-size","css.properties.min-inline-size.anchor-size","css.properties.min-width.anchor-size","css.properties.position-anchor","css.properties.position-try","css.properties.position-try-options","css.properties.position-try-options.flip-block","css.properties.position-try-options.flip-inline","css.properties.position-try-options.flip-start","css.properties.position-try-options.none","css.properties.position-try-order","css.properties.position-try-order.most-block-size","css.properties.position-try-order.most-height","css.properties.position-try-order.most-inline-size","css.properties.position-try-order.most-width","css.properties.position-try-order.normal","css.properties.position-visibility","css.properties.position-visibility.always","css.properties.position-visibility.anchors-visible","css.properties.position-visibility.no-overflow","css.properties.right.anchor","css.properties.top.anchor","css.properties.width.anchor-size","css.types.anchor","css.types.anchor-size"],"description":"Anchor positioning places an element based on the position of another element. For example, you can place a tooltip next to the content it references.","description_html":"Anchor positioning places an element based on the position of another element. For example, you can place a tooltip next to the content it references.","name":"Anchor positioning","spec":"https://drafts.csswg.org/css-anchor-position-1/#anchoring","status":{"baseline":false,"support":{"chrome":"125","chrome_android":"125"}}},"animation-composition":{"compat_features":["css.properties.animation-composition"],"description":"The animation-composition CSS property chooses how to combine animations that affect the same property.","description_html":"The <code>animation-composition</code> CSS property chooses how to combine animations that affect the same property.","name":"animation-composition","spec":"https://drafts.csswg.org/css-animations-2/#animation-composition","status":{"baseline":"low","baseline_low_date":"2023-07-04","support":{"chrome":"112","chrome_android":"112","edge":"112","firefox":"115","firefox_android":"115","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/743"},"appearance":{"compat_features":["css.properties.appearance","css.properties.appearance.auto","css.properties.appearance.button","css.properties.appearance.checkbox","css.properties.appearance.listbox","css.properties.appearance.menulist","css.properties.appearance.menulist-button","css.properties.appearance.meter","css.properties.appearance.none","css.properties.appearance.progress-bar","css.properties.appearance.radio","css.properties.appearance.searchfield","css.properties.appearance.textarea","css.properties.appearance.textfield"],"description":"The appearance CSS property controls the appearance of form controls. Using appearance: none disables any default native appearance and allows the elements to be styled with CSS.","description_html":"The <code>appearance</code> CSS property controls the appearance of form controls. Using <code>appearance: none</code> disables any default native appearance and allows the elements to be styled with CSS.","name":"appearance","spec":"https://drafts.csswg.org/css-ui-4/#appearance-switching","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"84","chrome_android":"84","edge":"84","firefox":"80","firefox_android":"80","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/658"},"aria-attribute-reflection":{"compat_features":["api.Element.ariaAtomic","api.Element.ariaAutoComplete","api.Element.ariaBusy","api.Element.ariaChecked","api.Element.ariaColCount","api.Element.ariaColIndex","api.Element.ariaColSpan","api.Element.ariaCurrent","api.Element.ariaDisabled","api.Element.ariaExpanded","api.Element.ariaHasPopup","api.Element.ariaHidden","api.Element.ariaInvalid","api.Element.ariaKeyShortcuts","api.Element.ariaLabel","api.Element.ariaLevel","api.Element.ariaLive","api.Element.ariaModal","api.Element.ariaMultiLine","api.Element.ariaMultiSelectable","api.Element.ariaOrientation","api.Element.ariaPlaceholder","api.Element.ariaPosInSet","api.Element.ariaPressed","api.Element.ariaReadOnly","api.Element.ariaRelevant","api.Element.ariaRequired","api.Element.ariaRoleDescription","api.Element.ariaRowCount","api.Element.ariaRowIndex","api.Element.ariaRowSpan","api.Element.ariaSelected","api.Element.ariaSetSize","api.Element.ariaSort","api.Element.ariaValueMax","api.Element.ariaValueMin","api.Element.ariaValueNow","api.Element.ariaValueText","api.Element.role"],"description":"WAI-ARIA attributes have corresponding properties on Element and ElementInternals objects.","description_html":"WAI-ARIA attributes have corresponding properties on <code>Element</code> and <code>ElementInternals</code> objects.","name":"ARIA attribute reflection","spec":"https://w3c.github.io/aria/#accessibilityroleandproperties-correspondence","status":{"baseline":"low","baseline_low_date":"2023-10-24","support":{"chrome":"103","chrome_android":"103","edge":"103","firefox":"119","firefox_android":"119","safari":"12.1","safari_ios":"12.2"}}},"array":{"compat_features":["javascript.builtins.Array","javascript.builtins.Array.Array","javascript.builtins.Array.concat","javascript.builtins.Array.join","javascript.builtins.Array.length","javascript.builtins.Array.pop","javascript.builtins.Array.push","javascript.builtins.Array.reverse","javascript.builtins.Array.shift","javascript.builtins.Array.slice","javascript.builtins.Array.sort","javascript.builtins.Array.toLocaleString","javascript.builtins.Array.toString","javascript.builtins.Array.unshift","javascript.grammar.array_literals"],"description":"Arrays are ordered lists of JavaScript values.","description_html":"Arrays are ordered lists of JavaScript values.","name":"Array (initial support)","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array-objects","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array-constructor","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.concat","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.join","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-properties-of-array-instances-length","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.pop","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.push","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.reverse","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.shift","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.slice","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.sort","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tolocalestring","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tostring","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.unshift","https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-array-initializer"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}}},"array-at":{"compat_features":["javascript.builtins.Array.at","javascript.builtins.TypedArray.at"],"description":"The at() method of arrays and typed arrays returns the item at an index, including negative indices for getting items relative to the end of an array. Also known as the relative indexing method.","description_html":"The <code>at()</code> method of arrays and typed arrays returns the item at an index, including negative indices for getting items relative to the end of an array. Also known as the relative indexing method.","name":"Array at()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.at","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"92","chrome_android":"92","edge":"92","firefox":"90","firefox_android":"90","safari":"15.4","safari_ios":"15.4"}}},"array-by-copy":{"compat_features":["javascript.builtins.Array.toReversed","javascript.builtins.Array.toSorted","javascript.builtins.Array.toSpliced","javascript.builtins.Array.with","javascript.builtins.TypedArray.toReversed","javascript.builtins.TypedArray.toSorted","javascript.builtins.TypedArray.with"],"description":"The toReserved(), toSorted(), toSpliced(), and with() methods of arrays and typed arrays return changed copies of arrays. They stand in contrast to methods such as sort() or reverse() that change arrays in place.","description_html":"The <code>toReserved()</code>, <code>toSorted()</code>, <code>toSpliced()</code>, and <code>with()</code> methods of arrays and typed arrays return changed copies of arrays. They stand in contrast to methods such as <code>sort()</code> or <code>reverse()</code> that change arrays in place.","name":"Array by copy","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.toreversed","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tosorted","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tospliced","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.with","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.toreversed","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.tosorted","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.with"],"status":{"baseline":"low","baseline_low_date":"2023-07-04","support":{"chrome":"110","chrome_android":"110","edge":"110","firefox":"115","firefox_android":"115","safari":"16","safari_ios":"16"}}},"array-copywithin":{"compat_features":["javascript.builtins.Array.copyWithin","javascript.builtins.TypedArray.copyWithin"],"description":"The copyWithin() method of arrays and typed arrays shifts or copies items of an array to another index of the array without changing its length.","description_html":"The <code>copyWithin()</code> method of arrays and typed arrays shifts or copies items of an array to another index of the array without changing its length.","name":"Array copyWithin()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.copywithin","status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"32","firefox_android":"32","safari":"9","safari_ios":"9"}}},"array-fill":{"compat_features":["javascript.builtins.Array.fill","javascript.builtins.TypedArray.fill"],"description":"The fill() method of arrays and typed arrays sets all or some items of an array to a given a value.","description_html":"The <code>fill()</code> method of arrays and typed arrays sets all or some items of an array to a given a value.","name":"Array fill()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.fill","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.fill"],"status":{"baseline":"high","baseline_high_date":"2018-03-01","baseline_low_date":"2015-09-01","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"31","firefox_android":"31","safari":"8","safari_ios":"8"}}},"array-find":{"compat_features":["javascript.builtins.Array.find","javascript.builtins.Array.findIndex","javascript.builtins.TypedArray.find","javascript.builtins.TypedArray.findIndex"],"description":"The find() and findIndex() methods of arrays and typed arrays search an array for the first item that satisfies a test function.","description_html":"The <code>find()</code> and <code>findIndex()</code> methods of arrays and typed arrays search an array for the first item that satisfies a test function.","name":"Array find() and findIndex()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.findindex","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.find","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.findindex"],"status":{"baseline":"high","baseline_high_date":"2018-03-01","baseline_low_date":"2015-09-01","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"25","firefox_android":"4","safari":"8","safari_ios":"8"}}},"array-findlast":{"compat_features":["javascript.builtins.Array.findLast","javascript.builtins.Array.findLastIndex","javascript.builtins.TypedArray.findLast","javascript.builtins.TypedArray.findLastIndex"],"description":"The findLast() and findLastIndex() methods of arrays and typed arrays search an array in reverse order for the first item that satisfies a test function.","description_html":"The <code>findLast()</code> and <code>findLastIndex()</code> methods of arrays and typed arrays search an array in reverse order for the first item that satisfies a test function.","name":"Array findLast() and findLastIndex()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.findlast","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.findlastindex","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.findlast","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.findlastindex"],"status":{"baseline":"low","baseline_low_date":"2022-08-23","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"104","firefox_android":"104","safari":"15.4","safari_ios":"15.4"}}},"array-flat":{"caniuse":"array-flat","compat_features":["javascript.builtins.Array.flat","javascript.builtins.Array.flatMap"],"description":"The flat() and flatMap() methods for arrays creates a new array such that each nested array item is concatenated into it.","description_html":"The <code>flat()</code> and <code>flatMap()</code> methods for arrays creates a new array such that each nested array item is concatenated into it.","name":"Array flat() and flatMap()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.flat","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.flatmap"],"status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"62","firefox_android":"62","safari":"12","safari_ios":"12"}}},"array-from":{"compat_features":["javascript.builtins.Array.from","javascript.builtins.TypedArray.from"],"description":"The Array.from() and typed array .from() static methods copy items from an iterable or array-like object to make a new array.","description_html":"The <code>Array.from()</code> and typed array <code>.from()</code> static methods copy items from an iterable or array-like object to make a new array.","name":"Array.from()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.of"],"status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"32","firefox_android":"32","safari":"9","safari_ios":"9"}}},"array-fromasync":{"compat_features":["javascript.builtins.Array.fromAsync"],"description":"The Array.fromAsync() static method copies items from an async iterable object to make a new array.","description_html":"The <code>Array.fromAsync()</code> static method copies items from an async iterable object to make a new array.","name":"Array.fromAsync()","spec":"https://tc39.es/proposal-array-from-async/#sec-array.fromAsync","status":{"baseline":"low","baseline_low_date":"2024-01-23","support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"115","firefox_android":"115","safari":"16.4","safari_ios":"16.4"}}},"array-group":{"compat_features":["javascript.builtins.Map.groupBy","javascript.builtins.Object.groupBy"],"description":"The Object.groupBy() and Map.groupBy() static methods group values of arrays and iterables based on a function that returns a key for each value.","description_html":"The <code>Object.groupBy()</code> and <code>Map.groupBy()</code> static methods group values of arrays and iterables based on a function that returns a key for each value.","name":"Array grouping","spec":"https://tc39.es/proposal-array-grouping/","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"117","chrome_android":"117","edge":"117","firefox":"119","firefox_android":"119","safari":"17.4","safari_ios":"17.4"}}},"array-includes":{"compat_features":["javascript.builtins.Array.includes","javascript.builtins.TypedArray.includes"],"description":"The includes() method of arrays and typed arrays returns whether a given value appears in the array.","description_html":"The <code>includes()</code> method of arrays and typed arrays returns whether a given value appears in the array.","name":"Array includes()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.includes","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.includes"],"status":{"baseline":"high","baseline_high_date":"2018-06-01","baseline_low_date":"2015-12-01","support":{"chrome":"47","chrome_android":"47","edge":"14","firefox":"43","firefox_android":"43","safari":"9","safari_ios":"9"}}},"array-isarray":{"compat_features":["javascript.builtins.Array.isArray"],"description":"The Array.isArray() static method checks whether a value is an array.","description_html":"The <code>Array.isArray()</code> static method checks whether a value is an array.","name":"Array.isArray()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.isarray","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"4","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"5"}}},"array-iteration-methods":{"compat_features":["javascript.builtins.Array.every","javascript.builtins.Array.filter","javascript.builtins.Array.forEach","javascript.builtins.Array.indexOf","javascript.builtins.Array.lastIndexOf","javascript.builtins.Array.map","javascript.builtins.Array.reduce","javascript.builtins.Array.reduceRight","javascript.builtins.Array.some"],"description":"Array iteration methods","description_html":"Array iteration methods","name":"Array iteration methods","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.every","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.filter","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.foreach","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.indexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.lastindexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.map","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.reduce","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.reduceright","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.some"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1.5","firefox_android":"4","safari":"3","safari_ios":"1"}}},"array-iterators":{"compat_features":["javascript.builtins.Array.@@iterator","javascript.builtins.Array.entries","javascript.builtins.Array.keys","javascript.builtins.Array.values"],"description":"Arrays are iterable with the for…of statement and enumerable with the methods entries(), keys(), and values().","description_html":"Arrays are iterable with the <code>for…of</code> statement and enumerable with the methods <code>entries()</code>, <code>keys()</code>, and <code>values()</code>.","name":"Array iterators","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype-@@iterator","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.entries","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.keys","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.values"],"status":{"baseline":"high","baseline_high_date":"2019-03-20","baseline_low_date":"2016-09-20","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"36","firefox_android":"36","safari":"10","safari_ios":"10"}}},"array-of":{"compat_features":["javascript.builtins.Array.of","javascript.builtins.TypedArray.of"],"description":"The Array.of() and typed array .of() static methods create new arrays from the values of any number of arguments.","description_html":"The <code>Array.of()</code> and typed array <code>.of()</code> static methods create new arrays from the values of any number of arguments.","name":"Array.of()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.of","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.of"],"status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"45","chrome_android":"39","edge":"12","firefox":"25","firefox_android":"25","safari":"9","safari_ios":"9"}}},"array-splice":{"compat_features":["javascript.builtins.Array.splice"],"description":"The array splice() method changes an array in-place. You can use it to delete items, overwrite items, or insert items, starting from an index.","description_html":"The array <code>splice()</code> method changes an array in-place. You can use it to delete items, overwrite items, or insert items, starting from an index.","name":"Array splice()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.splice","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}}},"aspect-ratio":{"compat_features":["css.properties.aspect-ratio","html.elements.img.aspect_ratio_computed_from_attributes","html.elements.video.aspect_ratio_computed_from_attributes"],"description":"The aspect-ratio CSS property controls the width-to-height ratio of elements. For <img> and <video> elements, the width and height attributes used together with height: auto control the aspect ratio while the image/video is loading.","description_html":"The <code>aspect-ratio</code> CSS property controls the width-to-height ratio of elements. For <code>&#x3C;img></code> and <code>&#x3C;video></code> elements, the <code>width</code> and <code>height</code> attributes used together with <code>height: auto</code> control the aspect ratio while the image/video is loading.","name":"aspect-ratio","spec":"https://drafts.csswg.org/css-sizing-4/#aspect-ratio","status":{"baseline":"high","baseline_high_date":"2024-03-20","baseline_low_date":"2021-09-20","support":{"chrome":"88","chrome_android":"88","edge":"88","firefox":"89","firefox_android":"89","safari":"15","safari_ios":"15"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/657"},"async-await":{"caniuse":"async-functions","compat_features":["javascript.builtins.AsyncFunction","javascript.builtins.AsyncFunction.AsyncFunction","javascript.operators.async_function","javascript.operators.await","javascript.statements.async_function"],"description":"The async and await keywords allow you to use the asynchronous, promise-based behavior of a function without using promise chains.","description_html":"The <code>async</code> and <code>await</code> keywords allow you to use the asynchronous, promise-based behavior of a function without using promise chains.","name":"Async functions","spec":"https://tc39.es/ecma262/multipage/ecmascript-language-functions-and-classes.html#sec-async-function-definitions","status":{"baseline":"high","baseline_high_date":"2019-10-05","baseline_low_date":"2017-04-05","support":{"chrome":"55","chrome_android":"55","edge":"15","firefox":"52","firefox_android":"52","safari":"10.1","safari_ios":"10.3"}}},"async-clipboard":{"caniuse":"async-clipboard","compat_features":["api.Clipboard","api.Clipboard.read","api.Clipboard.readText","api.Clipboard.write","api.Clipboard.writeText","api.ClipboardEvent","api.ClipboardEvent.ClipboardEvent","api.ClipboardEvent.clipboardData","api.ClipboardItem","api.ClipboardItem.ClipboardItem","api.ClipboardItem.getType","api.ClipboardItem.presentationStyle","api.ClipboardItem.types","api.Navigator.clipboard","api.Permissions.permission_clipboard-read"],"description":"The navigator.clipboard API asynchronously reads and writes to the system clipboard.","description_html":"The <code>navigator.clipboard</code> API asynchronously reads and writes to the system clipboard.","name":"Async clipboard","spec":"https://w3c.github.io/clipboard-apis/#async-clipboard-api","status":{"baseline":false,"support":{}}},"audio-session":{"compat_features":["api.AudioSession","api.AudioSession.type","api.Navigator.audioSession"],"description":"The navigator.audioSession API controls how audio playback interacts with other applications. For example, playing music can pause audio from other applications, while ambient audio can play at the same time.","description_html":"The <code>navigator.audioSession</code> API controls how audio playback interacts with other applications. For example, playing music can pause audio from other applications, while ambient audio can play at the same time.","name":"Audio session","spec":"https://w3c.github.io/audio-session/","status":{"baseline":false,"support":{"safari":"16.4","safari_ios":"16.4"}}},"audio-video-tracks":{"caniuse":["audiotracks","videotracks"],"compat_features":["api.AudioTrack","api.AudioTrack.enabled","api.AudioTrack.id","api.AudioTrack.kind","api.AudioTrack.label","api.AudioTrack.language","api.AudioTrackList","api.AudioTrackList.addtrack_event","api.AudioTrackList.change_event","api.AudioTrackList.getTrackById","api.AudioTrackList.length","api.AudioTrackList.removetrack_event","api.HTMLMediaElement.audioTracks","api.HTMLMediaElement.videoTracks","api.VideoTrack","api.VideoTrack.id","api.VideoTrack.kind","api.VideoTrack.label","api.VideoTrack.language","api.VideoTrack.selected","api.VideoTrackList","api.VideoTrackList.addtrack_event","api.VideoTrackList.change_event","api.VideoTrackList.getTrackById","api.VideoTrackList.length","api.VideoTrackList.removetrack_event","api.VideoTrackList.selectedIndex"],"description":"The audioTracks and videoTracks APIs for media elements switch audio and video tracks during playback.","description_html":"The <code>audioTracks</code> and <code>videoTracks</code> APIs for media elements switch audio and video tracks during playback.","name":"Audio and video tracks","spec":"https://html.spec.whatwg.org/multipage/media.html#media-resources-with-multiple-media-tracks","status":{"baseline":false,"support":{"safari":"8","safari_ios":"8"}}},"autofill":{"compat_features":["css.selectors.autofill"],"description":"The :autofill pseudo-class matches <input> elements that have been filled in automatically by the browser.","description_html":"The <code>:autofill</code> pseudo-class matches <code>&#x3C;input></code> elements that have been filled in automatically by the browser.","name":":autofill","spec":"https://html.spec.whatwg.org/multipage/semantics-other.html#selector-autofill","status":{"baseline":"low","baseline_low_date":"2023-02-09","support":{"chrome":"110","chrome_android":"110","edge":"110","firefox":"86","firefox_android":"86","safari":"15","safari_ios":"15"}}},"autofocus":{"caniuse":"autofocus","compat_features":["api.HTMLElement.autofocus","api.MathMLElement.autofocus","api.SVGElement.autofocus","html.global_attributes.autofocus"],"description":"The autofocus HTML attribute gives focus to an element on page load.","description_html":"The <code>autofocus</code> HTML attribute gives focus to an element on page load.","name":"Autofocus","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-autofocus-attribute","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"4","safari_ios":"3.2"}}},"autonomous-custom-elements":{"compat_features":["api.CustomElementRegistry","api.CustomElementRegistry.define","api.Window.customElements","css.selectors.defined"],"description":"Autonomous custom elements are HTML elements with a hyphenated tag name (like <example-element>) that have behaviors you define.","description_html":"Autonomous custom elements are HTML elements with a hyphenated tag name (like <code>&#x3C;example-element></code>) that have behaviors you define.","name":"Autonomous custom elements","spec":"https://html.spec.whatwg.org/multipage/custom-elements.html#autonomous-custom-element","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"54","chrome_android":"54","edge":"79","firefox":"63","firefox_android":"63","safari":"10.1","safari_ios":"10.3"}}},"avif":{"caniuse":"avif","description":"AVIF (AV1 Image File Format) is an image format based on the AV1 video format.","description_html":"AVIF (AV1 Image File Format) is an image format based on the AV1 video format.","name":"AVIF","spec":"https://aomediacodec.github.io/av1-avif/","status":{"baseline":"low","baseline_low_date":"2024-01-26","support":{"chrome":"85","chrome_android":"85","edge":"121","firefox":"93","firefox_android":"93","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3798"},"backdrop-filter":{"caniuse":"css-backdrop-filter","compat_features":["css.properties.backdrop-filter"],"description":"The backdrop-filter CSS property applies graphical effects such as blurring or color shifting to the area behind an element.","description_html":"The <code>backdrop-filter</code> CSS property applies graphical effects such as blurring or color shifting to the area behind an element.","name":"backdrop-filter","spec":"https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty","status":{"baseline":false,"support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"103","firefox_android":"103"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/508"},"background-clip":{"compat_features":["css.properties.background-clip","css.properties.background-clip.border-box","css.properties.background-clip.content-box","css.properties.background-clip.padding-box"],"description":"The background-clip CSS property sets the extent of the background: the padding box, the content box, or the default border box.","description_html":"The <code>background-clip</code> CSS property sets the extent of the background: the padding box, the content box, or the default border box.","name":"background-clip","spec":"https://drafts.csswg.org/css-backgrounds-3/#background-clip","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"5"}}},"background-clip-text":{"compat_features":["css.properties.background-clip.text"],"description":"The background-clip: text CSS declaration draws the background underneath only the text in the element.","description_html":"The <code>background-clip: text</code> CSS declaration draws the background underneath only the text in the element.","name":"background-clip: text","spec":"https://drafts.csswg.org/css-backgrounds-4/#background-clip","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"49","firefox_android":"49","safari":"14","safari_ios":"14"}}},"background-fetch":{"compat_features":["api.BackgroundFetchEvent","api.BackgroundFetchEvent.BackgroundFetchEvent","api.BackgroundFetchEvent.registration","api.BackgroundFetchManager","api.BackgroundFetchManager.fetch","api.BackgroundFetchManager.get","api.BackgroundFetchManager.getIds","api.BackgroundFetchRecord","api.BackgroundFetchRecord.request","api.BackgroundFetchRecord.responseReady","api.BackgroundFetchRegistration.abort","api.BackgroundFetchRegistration.downloadTotal","api.BackgroundFetchRegistration.downloaded","api.BackgroundFetchRegistration.failureReason","api.BackgroundFetchRegistration.id","api.BackgroundFetchRegistration.match","api.BackgroundFetchRegistration.matchAll","api.BackgroundFetchRegistration.progress_event","api.BackgroundFetchRegistration.recordsAvailable","api.BackgroundFetchRegistration.result","api.BackgroundFetchRegistration.uploadTotal","api.BackgroundFetchRegistration.uploaded","api.BackgroundFetchUpdateUIEvent","api.BackgroundFetchUpdateUIEvent.BackgroundFetchUpdateUIEvent","api.BackgroundFetchUpdateUIEvent.updateUI","api.ServiceWorkerGlobalScope.backgroundfetchabort_event","api.ServiceWorkerGlobalScope.backgroundfetchclick_event","api.ServiceWorkerGlobalScope.backgroundfetchfail_event","api.ServiceWorkerGlobalScope.backgroundfetchsuccess_event","api.ServiceWorkerRegistration.backgroundFetch"],"description":"Background fetch downloads data in the background even when the web page is closed.","description_html":"Background fetch downloads data in the background even when the web page is closed.","name":"Background fetch","spec":"https://wicg.github.io/background-fetch/","status":{"baseline":false,"support":{"chrome":"74","chrome_android":"74","edge":"79"}}},"baseline-source":{"compat_features":["css.properties.baseline-source","css.properties.baseline-source.auto","css.properties.baseline-source.first","css.properties.baseline-source.last"],"description":"The baseline-source CSS property controls how inline-level boxes with multiple lines of text are aligned with the surrounding text. By default, which typographic baseline is used depends on the display property value.","description_html":"The <code>baseline-source</code> CSS property controls how inline-level boxes with multiple lines of text are aligned with the surrounding text. By default, which typographic baseline is used depends on the <code>display</code> property value.","name":"baseline-source","spec":"https://drafts.csswg.org/css-inline-3/#baseline-source","status":{"baseline":false,"support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"115","firefox_android":"115"}}},"bigint":{"caniuse":"bigint","compat_features":["javascript.builtins.BigInt","javascript.builtins.BigInt.BigInt","javascript.builtins.BigInt.asIntN","javascript.builtins.BigInt.asUintN","javascript.builtins.BigInt.toLocaleString","javascript.builtins.BigInt.toString","javascript.builtins.BigInt.valueOf"],"description":"The BigInt JavaScript type represents integers of any size, including integers too large for the primitive Number type.","description_html":"The <code>BigInt</code> JavaScript type represents integers of any size, including integers too large for the primitive <code>Number</code> type.","name":"BigInt","spec":"https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-bigint-objects","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"67","chrome_android":"67","edge":"79","firefox":"68","firefox_android":"68","safari":"14","safari_ios":"14"}}},"blocking-render":{"compat_features":["api.HTMLLinkElement.blocking","api.HTMLScriptElement.blocking","api.HTMLStyleElement.blocking","html.elements.link.blocking","html.elements.script.blocking","html.elements.style.blocking"],"description":"The blocking=\"render\" attribute for <link>, <script>, and <style> elements blocks rendering until the external script or stylesheet has been loaded. For <link rel=\"expect\">, rendering is blocked until a specific element is in the DOM.","description_html":"The <code>blocking=\"render\"</code> attribute for <code>&#x3C;link></code>, <code>&#x3C;script></code>, and <code>&#x3C;style></code> elements blocks rendering until the external script or stylesheet has been loaded. For <code>&#x3C;link rel=\"expect\"></code>, rendering is blocked until a specific element is in the DOM.","name":"blocking=\"render\"","spec":"https://html.spec.whatwg.org/multipage/urls-and-fetching.html#blocking-attributes","status":{"baseline":false,"support":{"chrome":"105","chrome_android":"105","edge":"105"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4183"},"border-image":{"caniuse":"border-image","compat_features":["css.properties.border-image","css.properties.border-image.fill","css.properties.border-image.gradient","css.properties.border-image.optional_border_image_slice","css.properties.border-image-outset","css.properties.border-image-repeat","css.properties.border-image-repeat.round","css.properties.border-image-repeat.space","css.properties.border-image-slice","css.properties.border-image-source","css.properties.border-image-width"],"description":"The border-image CSS property draws an image around an element.","description_html":"The <code>border-image</code> CSS property draws an image around an element.","name":"Border images","spec":"https://drafts.csswg.org/css-backgrounds-3/#border-images","status":{"baseline":"high","baseline_high_date":"2019-08-01","baseline_low_date":"2017-02-01","support":{"chrome":"56","chrome_android":"56","edge":"12","firefox":"50","firefox_android":"50","safari":"9.1","safari_ios":"9.3"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/43"},"broadcast-channel":{"caniuse":"broadcastchannel","compat_features":["api.BroadcastChannel","api.BroadcastChannel.BroadcastChannel","api.BroadcastChannel.close","api.BroadcastChannel.message_event","api.BroadcastChannel.messageerror_event","api.BroadcastChannel.name","api.BroadcastChannel.postMessage"],"description":"The BroadcastChannel API allows you to send messages between same-origin browsing contexts, such as between the same page loaded in multiple tabs.","description_html":"The <code>BroadcastChannel</code> API allows you to send messages between same-origin browsing contexts, such as between the same page loaded in multiple tabs.","name":"BroadcastChannel","spec":"https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"60","chrome_android":"60","edge":"79","firefox":"57","firefox_android":"57","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1447"},"calc":{"caniuse":"calc","compat_features":["css.types.calc"],"description":"The calc() CSS function computes mathematical expressions such a calc(100%/3 - 1em).","description_html":"The <code>calc()</code> CSS function computes mathematical expressions such a <code>calc(100%/3 - 1em)</code>.","name":"calc()","spec":"https://drafts.csswg.org/css-values-3/#calc-notation","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"26","chrome_android":"28","edge":"12","firefox":"16","firefox_android":"16","safari":"7","safari_ios":"7"}}},"calc-constants":{"compat_features":["css.types.calc-constant","css.types.calc-constant.NaN","css.types.calc-constant.e","css.types.calc-constant.infinity","css.types.calc-constant.pi"],"description":"The e, pi, infinity, and NaN constants are accepted in CSS math functions such as calc().","description_html":"The <code>e</code>, <code>pi</code>, <code>infinity</code>, and <code>NaN</code> constants are accepted in CSS math functions such as <code>calc()</code>.","name":"calc() constants","spec":"https://drafts.csswg.org/css-values-4/#calc-keywords","status":{"baseline":"low","baseline_low_date":"2023-06-06","support":{"chrome":"110","chrome_android":"110","edge":"110","firefox":"114","firefox_android":"114","safari":"16","safari_ios":"16"}}},"canvas-context-lost":{"compat_features":["api.CanvasRenderingContext2D.isContextLost","api.HTMLCanvasElement.contextlost_event","api.HTMLCanvasElement.contextrestored_event","api.OffscreenCanvas.contextlost_event","api.OffscreenCanvas.contextrestored_event","api.OffscreenCanvasRenderingContext2D.isContextLost"],"description":"The contextlost event for <canvas> fires when the canvas backing storage is lost, while the contextrestored event fires when it is recreated.","description_html":"The <code>contextlost</code> event for <code>&#x3C;canvas></code> fires when the canvas backing storage is lost, while the <code>contextrestored</code> event fires when it is recreated.","name":"contextlost and contextrestored","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#context-lost-steps","status":{"baseline":false,"support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"125","firefox_android":"125"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3974"},"canvas-createconicgradient":{"compat_features":["api.CanvasRenderingContext2D.createConicGradient","api.OffscreenCanvasRenderingContext2D.createConicGradient"],"description":"The createConicGradient() methods draw a conic gradient to a 2D canvas.","description_html":"The <code>createConicGradient()</code> methods draw a conic gradient to a 2D canvas.","name":"Canvas createConicGradient()","spec":"https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-createconicgradient-dev","status":{"baseline":"low","baseline_low_date":"2023-04-11","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"112","firefox_android":"112","safari":"16.4","safari_ios":"16.4"}}},"canvas-reset":{"compat_features":["api.CanvasRenderingContext2D.reset","api.OffscreenCanvasRenderingContext2D.reset"],"description":"The reset() method clears a canvas to its initial state.","description_html":"The <code>reset()</code> method clears a canvas to its initial state.","name":"Canvas reset()","spec":"https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-reset","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"113","firefox_android":"113","safari":"17.2","safari_ios":"17.2"}}},"canvas-roundrect":{"compat_features":["api.CanvasRenderingContext2D.roundRect","api.OffscreenCanvasRenderingContext2D.roundRect"],"description":"The roundRect() methods draw a rounded rectangle to a 2D canvas.","description_html":"The <code>roundRect()</code> methods draw a rounded rectangle to a 2D canvas.","name":"Canvas roundRect()","spec":"https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-roundrect","status":{"baseline":"low","baseline_low_date":"2023-04-11","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"112","firefox_android":"112","safari":"16.4","safari_ios":"16.4"}}},"canvas-text":{"compat_features":["api.CanvasRenderingContext2D.fillText","api.CanvasRenderingContext2D.measureText","api.CanvasRenderingContext2D.strokeText","api.CanvasRenderingContext2D.textAlign","api.CanvasRenderingContext2D.textBaseline","api.TextMetrics","api.TextMetrics.width"],"description":"The fillText() and strokeText() methods draw text to a 2D canvas. The measureText() method measures the width and other metrics which can be used to position the text.","description_html":"The <code>fillText()</code> and <code>strokeText()</code> methods draw text to a 2D canvas. The <code>measureText()</code> method measures the width and other metrics which can be used to position the text.","name":"Canvas text metrics","spec":"https://html.spec.whatwg.org/multipage/canvas.html#drawing-text-to-the-bitmap","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"2","chrome_android":"18","edge":"12","firefox":"3.5","firefox_android":"31","safari":"4","safari_ios":"3.2"}}},"canvas-text-baselines":{"compat_features":["api.TextMetrics.alphabeticBaseline","api.TextMetrics.hangingBaseline","api.TextMetrics.ideographicBaseline"],"description":"The alphabeticBaseline, hangingBaseline, and ideographicBaseline canvas text metrics measure the distance from the used textBaseline to the respective typographic baseline.","description_html":"The <code>alphabeticBaseline</code>, <code>hangingBaseline</code>, and <code>ideographicBaseline</code> canvas text metrics measure the distance from the used <code>textBaseline</code> to the respective typographic baseline.","name":"Canvas text baselines","spec":["https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-alphabeticbaseline-dev","https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-hangingbaseline-dev","https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-ideographicbaseline-dev"],"status":{"baseline":"low","baseline_low_date":"2023-10-13","support":{"chrome":"118","chrome_android":"118","edge":"118","firefox":"116","firefox_android":"116","safari":"11.1","safari_ios":"11.3"}}},"cap":{"compat_features":["css.types.length.cap"],"description":"The CSS cap unit corresponds to the height of Latin capital letters.","description_html":"The CSS <code>cap</code> unit corresponds to the height of Latin capital letters.","name":"cap unit","spec":"https://drafts.csswg.org/css-values-4/#cap","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"117","chrome_android":"117","edge":"117","firefox":"97","firefox_android":"97","safari":"17.2","safari_ios":"17.2"}}},"cascade-layers":{"caniuse":"css-cascade-layers","compat_features":["api.CSSImportRule.layerName","api.CSSLayerBlockRule","api.CSSLayerBlockRule.name","api.CSSLayerStatementRule","api.CSSLayerStatementRule.nameList","css.at-rules.import.layer","css.at-rules.layer"],"description":"The @layer CSS at-rule avoids specificity conflicts by providing priority levels for different groups of CSS rules, such as low-priority styles like resets, and high-priority styles like UI components.","description_html":"The <code>@layer</code> CSS at-rule avoids specificity conflicts by providing priority levels for different groups of CSS rules, such as low-priority styles like resets, and high-priority styles like UI components.","name":"Cascade layers","spec":"https://drafts.csswg.org/css-cascade-5/#layering","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"97","firefox_android":"97","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4007"},"check-visibility":{"compat_features":["api.Element.checkVisibility","api.Element.checkVisibility.options_checkOpacity_parameter","api.Element.checkVisibility.options_checkVisibilityCSS_parameter"],"description":"The checkVisibility() method checks if an element is potentially visible, with optional parameters for the kinds of visibility to check. For example, it checks whether the element has the style display: none, but can also check for visibility: hidden.","description_html":"The <code>checkVisibility()</code> method checks if an element is potentially visible, with optional parameters for the kinds of visibility to check. For example, it checks whether the element has the style <code>display: none</code>, but can also check for <code>visibility: hidden</code>.","name":"checkVisibility()","spec":"https://drafts.csswg.org/cssom-view-1/#dom-element-checkvisibility","status":{"baseline":false,"support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"106","firefox_android":"106"}}},"class-syntax":{"caniuse":"es6-class","compat_features":["javascript.classes","javascript.classes.constructor","javascript.classes.extends","javascript.classes.static","javascript.operators.super","javascript.statements.class"],"description":"Classes are an object-oriented syntax for JavaScript prototypes.","description_html":"Classes are an object-oriented syntax for JavaScript prototypes.","name":"Classes","spec":"https://tc39.es/ecma262/multipage/ecmascript-language-functions-and-classes.html#sec-class-definitions","status":{"baseline":"high","baseline_high_date":"2019-09-27","baseline_low_date":"2017-03-27","support":{"chrome":"42","chrome_android":"42","edge":"13","firefox":"45","firefox_android":"45","safari":"10.1","safari_ios":"10.3"}}},"color-function":{"caniuse":"css-color-function","compat_features":["css.types.color.color","css.types.color.color.mixed_type_parameters"],"description":"The color() function defines a color within a given color space. Wide gamut color spaces like display-p3 allow showing more vibrant and saturated colors than the standard srgb color space.","description_html":"The <code>color()</code> function defines a color within a given color space. Wide gamut color spaces like <code>display-p3</code> allow showing more vibrant and saturated colors than the standard <code>srgb</code> color space.","name":"color()","spec":"https://drafts.csswg.org/css-color-4/#color-function","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"15","safari_ios":"15"}}},"color-mix":{"compat_features":["css.types.color.color-mix"],"description":"The color-mix() function mixes two colors in a given color space and by a given amount. Commonly, lighter or darker variations of a color are created by mixing with white or black.","description_html":"The <code>color-mix()</code> function mixes two colors in a given color space and by a given amount. Commonly, lighter or darker variations of a color are created by mixing with white or black.","name":"color-mix()","spec":"https://drafts.csswg.org/css-color-5/#color-mix","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"16.2","safari_ios":"16.2"}}},"color-scheme":{"compat_features":["css.properties.color-scheme","css.properties.color-scheme.only_dark","css.properties.color-scheme.only_light"],"description":"The color-scheme CSS property sets which color schemes (light or dark) an element uses and may prevent automatic dark mode adjustments by the browser.","description_html":"The <code>color-scheme</code> CSS property sets which color schemes (light or dark) an element uses and may prevent automatic dark mode adjustments by the browser.","name":"color-scheme","spec":"https://drafts.csswg.org/css-color-adjust-1/#color-scheme-prop","status":{"baseline":"low","baseline_low_date":"2022-02-03","support":{"chrome":"98","chrome_android":"98","edge":"98","firefox":"96","firefox_android":"96","safari":"13","safari_ios":"13"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/637"},"colrv1":{"caniuse":"colr-v1","compat_features":["css.at-rules.font-face.OpenType_COLRv1"],"description":"COLRv1 is a font format that supports multi-color glyphs.","description_html":"COLRv1 is a font format that supports multi-color glyphs.","name":"COLRv1","spec":"https://www.iso.org/standard/87621.html","status":{"baseline":false,"support":{"chrome":"98","chrome_android":"98","edge":"98","firefox":"107","firefox_android":"107"}}},"column-breaks":{"compat_features":["css.properties.break-after.multicol_context","css.properties.break-after.multicol_context.avoid","css.properties.break-after.multicol_context.avoid-column","css.properties.break-after.multicol_context.column","css.properties.break-before.multicol_context","css.properties.break-before.multicol_context.avoid","css.properties.break-before.multicol_context.avoid-column","css.properties.break-before.multicol_context.column","css.properties.break-inside.multicol_context","css.properties.break-inside.multicol_context.avoid-column"],"description":"In columnar layouts (created by the columns or column-count CSS properties), the break-after, break-before, break-inside properties control where columns start or end.","description_html":"In columnar layouts (created by the <code>columns</code> or <code>column-count</code> CSS properties), the <code>break-after</code>, <code>break-before</code>, <code>break-inside</code> properties control where columns start or end.","name":"Column breaks","spec":"https://drafts.csswg.org/css-break-3/#breaking-controls","status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102"}}},"compression-streams":{"compat_features":["api.CompressionStream","api.CompressionStream.CompressionStream","api.CompressionStream.CompressionStream.deflate","api.CompressionStream.CompressionStream.gzip","api.CompressionStream.readable","api.CompressionStream.writable","api.DecompressionStream","api.DecompressionStream.DecompressionStream","api.DecompressionStream.DecompressionStream.deflate","api.DecompressionStream.DecompressionStream.gzip","api.DecompressionStream.readable","api.DecompressionStream.writable"],"description":"The CompressionStream and DecompressionStream interfaces compress and decompress data using the gzip or deflate formats.","description_html":"The <code>CompressionStream</code> and <code>DecompressionStream</code> interfaces compress and decompress data using the gzip or deflate formats.","name":"Compression streams","spec":"https://wicg.github.io/compression/","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"113","firefox_android":"113","safari":"16.4","safari_ios":"16.4"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/3060","https://chromestatus.com/metrics/feature/timeline/popularity/3061"]},"compute-pressure":{"description":"The PressureObserver API monitors CPU load, allowing you to adjust workloads in response to available computing resources. Also known as the Compute Pressure API.","description_html":"The <code>PressureObserver</code> API monitors CPU load, allowing you to adjust workloads in response to available computing resources. Also known as the Compute Pressure API.","name":"CPU compute pressure","spec":"https://w3c.github.io/compute-pressure/","status":{"baseline":false,"support":{}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3899"},"conic-gradients":{"caniuse":"css-conic-gradients","compat_features":["css.types.image.gradient.conic-gradient","css.types.image.gradient.conic-gradient.doubleposition","css.types.image.gradient.repeating-conic-gradient"],"description":"The conic-gradient() and repeating-conic-gradient() CSS functions create backgrounds that progress between two or more colors around a center point.","description_html":"The <code>conic-gradient()</code> and <code>repeating-conic-gradient()</code> CSS functions create backgrounds that progress between two or more colors around a center point.","name":"Conic gradients","spec":"https://drafts.csswg.org/css-images-4/#conic-gradients","status":{"baseline":"high","baseline_high_date":"2023-05-17","baseline_low_date":"2020-11-17","support":{"chrome":"72","chrome_android":"72","edge":"79","firefox":"83","firefox_android":"83","safari":"12.1","safari_ios":"12.2"}}},"constraint-validation":{"caniuse":"constraint-validation","compat_features":["api.HTMLButtonElement.checkValidity","api.HTMLButtonElement.reportValidity","api.HTMLButtonElement.setCustomValidity","api.HTMLButtonElement.validationMessage","api.HTMLButtonElement.validity","api.HTMLButtonElement.willValidate","api.HTMLFieldSetElement.checkValidity","api.HTMLFieldSetElement.reportValidity","api.HTMLFieldSetElement.setCustomValidity","api.HTMLFieldSetElement.validationMessage","api.HTMLFieldSetElement.validity","api.HTMLFieldSetElement.willValidate","api.HTMLFormElement.checkValidity","api.HTMLFormElement.reportValidity","api.HTMLInputElement.checkValidity","api.HTMLInputElement.reportValidity","api.HTMLInputElement.setCustomValidity","api.HTMLInputElement.validationMessage","api.HTMLInputElement.validity","api.HTMLInputElement.willValidate","api.HTMLObjectElement.checkValidity","api.HTMLObjectElement.reportValidity","api.HTMLObjectElement.setCustomValidity","api.HTMLObjectElement.validationMessage","api.HTMLObjectElement.validity","api.HTMLObjectElement.willValidate","api.HTMLOutputElement.checkValidity","api.HTMLOutputElement.reportValidity","api.HTMLOutputElement.setCustomValidity","api.HTMLOutputElement.validationMessage","api.HTMLOutputElement.validity","api.HTMLOutputElement.willValidate","api.HTMLSelectElement.checkValidity","api.HTMLSelectElement.reportValidity","api.HTMLSelectElement.setCustomValidity","api.HTMLSelectElement.validationMessage","api.HTMLSelectElement.validity","api.HTMLSelectElement.willValidate","api.HTMLTextAreaElement.checkValidity","api.HTMLTextAreaElement.reportValidity","api.HTMLTextAreaElement.setCustomValidity","api.HTMLTextAreaElement.validationMessage","api.HTMLTextAreaElement.validity","api.HTMLTextAreaElement.willValidate","api.ValidityState","api.ValidityState.badInput","api.ValidityState.customError","api.ValidityState.patternMismatch","api.ValidityState.rangeOverflow","api.ValidityState.rangeUnderflow","api.ValidityState.stepMismatch","api.ValidityState.tooLong","api.ValidityState.tooShort","api.ValidityState.typeMismatch","api.ValidityState.valid","api.ValidityState.valueMissing"],"description":"Methods that validate form controls before submission, such as checkValidity(), reportValidity() and setCustomValidity().","description_html":"Methods that validate form controls before submission, such as <code>checkValidity()</code>, <code>reportValidity()</code> and <code>setCustomValidity()</code>.","name":"Constraint validation API","spec":"https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-constraint-validation-api","status":{"baseline":"high","baseline_high_date":"2021-06-11","baseline_low_date":"2018-12-11","support":{"chrome":"40","chrome_android":"40","edge":"18","firefox":"51","firefox_android":"64","safari":"10.1","safari_ios":"10.3"}}},"constructed-stylesheets":{"compat_features":["api.CSSStyleSheet.CSSStyleSheet","api.CSSStyleSheet.replace","api.CSSStyleSheet.replaceSync","api.Document.adoptedStyleSheets","api.ShadowRoot.adoptedStyleSheets"],"description":"The CSSStyleSheet constructor creates a new stylesheet which can be shared between a document and multiple shadow roots using adoptedStyleSheets.","description_html":"The <code>CSSStyleSheet</code> constructor creates a new stylesheet which can be shared between a document and multiple shadow roots using <code>adoptedStyleSheets</code>.","name":"Constructed stylesheets","spec":["https://drafts.csswg.org/cssom-1/#dom-cssstylesheet-cssstylesheet","https://drafts.csswg.org/cssom-1/#dom-documentorshadowroot-adoptedstylesheets"],"status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"73","chrome_android":"73","edge":"79","firefox":"101","firefox_android":"101","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2846"},"contain-intrinsic-size":{"compat_features":["css.properties.contain-intrinsic-block-size","css.properties.contain-intrinsic-height","css.properties.contain-intrinsic-inline-size","css.properties.contain-intrinsic-size","css.properties.contain-intrinsic-width"],"description":"The contain-intrinsic-size CSS property sets the intrinsic size of an element. When using size containment, the browser will layout the element as if it had a single child of this size.","description_html":"The <code>contain-intrinsic-size</code> CSS property sets the intrinsic size of an element. When using size containment, the browser will layout the element as if it had a single child of this size.","name":"contain-intrinsic-size","spec":"https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"95","chrome_android":"95","edge":"95","firefox":"107","firefox_android":"107","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/651"},"container-queries":{"caniuse":"css-container-queries","compat_features":["api.CSSContainerRule","css.at-rules.container","css.properties.contain","css.properties.contain.inline-size","css.properties.contain.style","css.properties.container","css.properties.container-name","css.properties.container-name.none","css.properties.container-type","css.properties.container-type.inline-size","css.properties.container-type.normal","css.properties.container-type.size","css.types.length.container_query_length_units"],"description":"Container size queries with the @container at-rule apply styles to an element based on the dimensions of its container.","description_html":"Container size queries with the <code>@container</code> at-rule apply styles to an element based on the dimensions of its container.","name":"Container queries","spec":"https://drafts.csswg.org/css-contain-3/#container-queries","status":{"baseline":"low","baseline_low_date":"2023-02-14","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"110","firefox_android":"110","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4165"},"container-style-queries":{"caniuse":"css-container-queries-style","compat_features":["css.at-rules.container.style_queries_for_custom_properties"],"description":"Container style queries with the @container at-rule apply styles to an element based on the values of custom properties of its container.","description_html":"Container style queries with the <code>@container</code> at-rule apply styles to an element based on the values of custom properties of its container.","name":"Container style queries","spec":"https://drafts.csswg.org/css-contain-3/#style-container","status":{"baseline":false,"support":{"chrome":"111","chrome_android":"111","edge":"111"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4550"},"content-visibility":{"caniuse":"css-content-visibility","compat_features":["api.ContentVisibilityAutoStateChangeEvent","api.ContentVisibilityAutoStateChangeEvent.ContentVisibilityAutoStateChangeEvent","api.ContentVisibilityAutoStateChangeEvent.skipped","css.properties.content-visibility"],"description":"The content-visibility CSS property delays rendering an element, including layout and painting, until it is needed.","description_html":"The <code>content-visibility</code> CSS property delays rendering an element, including layout and painting, until it is needed.","name":"content-visibility","spec":"https://drafts.csswg.org/css-contain-2/#content-visibility","status":{"baseline":false,"support":{"chrome":"108","chrome_android":"108","edge":"108"}}},"counter-set":{"compat_features":["css.properties.counter-set","css.properties.counter-set.list-item","css.properties.counter-set.none"],"description":"The counter-set CSS property creates (and optionally sets a value for) a counter, the numbers for a series of headings or ordered list items.","description_html":"The <code>counter-set</code> CSS property creates (and optionally sets a value for) a counter, the numbers for a series of headings or ordered list items.","name":"counter-set","spec":"https://drafts.csswg.org/css-lists-3/#propdef-counter-set","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"85","chrome_android":"85","edge":"85","firefox":"68","firefox_android":"68","safari":"17.2","safari_ios":"17.2"}}},"counter-style":{"caniuse":"css-at-counter-style","compat_features":["css.at-rules.counter-style","css.at-rules.counter-style.additive-symbols","css.at-rules.counter-style.fallback","css.at-rules.counter-style.negative","css.at-rules.counter-style.pad","css.at-rules.counter-style.prefix","css.at-rules.counter-style.range","css.at-rules.counter-style.suffix","css.at-rules.counter-style.system","api.CSSCounterStyleRule","api.CSSCounterStyleRule.additiveSymbols","api.CSSCounterStyleRule.fallback","api.CSSCounterStyleRule.name","api.CSSCounterStyleRule.negative","api.CSSCounterStyleRule.pad","api.CSSCounterStyleRule.prefix","api.CSSCounterStyleRule.range","api.CSSCounterStyleRule.system","api.CSSCounterStyleRule.suffix"],"description":"The @counter-style CSS at-rule defines custom counter styles for list items. For example, you can use a sequence of specific symbols instead of numbers for an ordered list.","description_html":"The <code>@counter-style</code> CSS at-rule defines custom counter styles for list items. For example, you can use a sequence of specific symbols instead of numbers for an ordered list.","name":"@counter-style","spec":"https://drafts.csswg.org/css-counter-styles-3/","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"91","chrome_android":"91","edge":"91","firefox":"33","firefox_android":"33","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3809"},"css-modules":{"compat_features":["javascript.statements.import","javascript.statements.import.import_attributes.type_css"],"description":"CSS module scripts allow CSS code to be organized into reusable units. Other modules use import ... with {type: \"css\"} to load CSS modules as constructable stylesheets.","description_html":"CSS module scripts allow CSS code to be organized into reusable units. Other modules use <code>import ... with {type: \"css\"}</code> to load CSS modules as constructable stylesheets.","name":"CSS module scripts","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#css-module-script","status":{"baseline":false,"support":{"chrome":"123","chrome_android":"123","edge":"123"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3805"},"custom-properties":{"caniuse":"css-variables","compat_features":["css.properties.custom-property","css.properties.custom-property.var"],"description":"Custom properties are CSS properties prefixed with -- that set values you can reuse with the var() function. For example, you can set a --key-color property to reuse as border-color: var(--key-color). Also known as CSS variables.","description_html":"Custom properties are CSS properties prefixed with <code>--</code> that set values you can reuse with the <code>var()</code> function. For example, you can set a <code>--key-color</code> property to reuse as <code>border-color: var(--key-color)</code>. Also known as CSS variables.","name":"Custom properties","spec":"https://drafts.csswg.org/css-variables-1/","status":{"baseline":"high","baseline_high_date":"2019-10-05","baseline_low_date":"2017-04-05","support":{"chrome":"49","chrome_android":"49","edge":"15","firefox":"31","firefox_android":"31","safari":"9.1","safari_ios":"9.3"}}},"customized-built-in-elements":{"compat_features":["api.CustomElementRegistry.builtin_element_support","html.global_attributes.is"],"description":"Customized built-in elements are HTML elements that extend built-in elements using the is attribute, to add new behaviors that you define.","description_html":"Customized built-in elements are HTML elements that extend built-in elements using the <code>is</code> attribute, to add new behaviors that you define.","name":"Customized built-in elements","spec":"https://html.spec.whatwg.org/multipage/custom-elements.html#customized-built-in-element","status":{"baseline":false,"support":{"chrome":"67","chrome_android":"67","edge":"79","firefox":"63","firefox_android":"63"}}},"declarative-shadow-dom":{"caniuse":"declarative-shadow-dom","compat_features":["api.HTMLTemplateElement.shadowRootMode","html.elements.template.shadowrootmode"],"description":"The shadowrootmode attribute on <template> creates a shadow root without the use of JavaScript. It is a declarative alternative to the attachShadow() method.","description_html":"The <code>shadowrootmode</code> attribute on <code>&#x3C;template></code> creates a shadow root without the use of JavaScript. It is a declarative alternative to the <code>attachShadow()</code> method.","name":"Declarative shadow DOM","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-template-shadowrootmode","status":{"baseline":"low","baseline_low_date":"2024-02-20","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"123","firefox_android":"123","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4421"},"default":{"caniuse":"css-default-pseudo","compat_features":["css.selectors.default"],"description":"The :default CSS pseudo-class matches the default element in a group of related form controls, such as checkboxes and radio buttons with the checked attribute.","description_html":"The <code>:default</code> CSS pseudo-class matches the default element in a group of related form controls, such as checkboxes and radio buttons with the <code>checked</code> attribute.","name":":default","spec":"https://drafts.csswg.org/selectors-4/#the-default-pseudo","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"10","chrome_android":"18","edge":"79","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"5"}}},"details":{"caniuse":"details","compat_features":["api.HTMLDetailsElement","api.HTMLDetailsElement.open","html.elements.details","html.elements.details.open"],"description":"The <details> element is a disclosure widget which can be expanded to reveal additional content. When closed, only the nested <summary> element is visible.","description_html":"The <code>&#x3C;details></code> element is a disclosure widget which can be expanded to reveal additional content. When closed, only the nested <code>&#x3C;summary></code> element is visible.","name":"<details>","spec":"https://html.spec.whatwg.org/multipage/interactive-elements.html#the-details-element","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"12","chrome_android":"18","edge":"79","firefox":"49","firefox_android":"49","safari":"6","safari_ios":"6"}}},"details-name":{"compat_features":["api.HTMLDetailsElement.name","html.elements.details.name"],"description":"Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.","description_html":"Multiple <code>&#x3C;details></code> elements which use the same <code>name</code> attribute are mutually exclusive. When one member of the group is opened, all other members are closed.","name":"Mutually exclusive <details> elements","spec":"https://html.spec.whatwg.org/multipage/interactive-elements.html#attr-details-name","status":{"baseline":false,"support":{"chrome":"120","chrome_android":"120","edge":"120","safari":"17.2","safari_ios":"17.2"}}},"device-orientation-events":{"caniuse":"deviceorientation","compat_features":["api.DeviceMotionEvent","api.DeviceMotionEvent.acceleration","api.DeviceMotionEvent.accelerationIncludingGravity","api.DeviceMotionEvent.interval","api.DeviceMotionEvent.rotationRate","api.DeviceOrientationEvent","api.DeviceOrientationEvent.alpha","api.DeviceOrientationEvent.beta","api.DeviceOrientationEvent.gamma","api.Window.devicemotion_event","api.Window.deviceorientation_event"],"description":"The DeviceMotion and DeviceOrientation events report the movement and orientation of the browser's device in physical space.","description_html":"The <code>DeviceMotion</code> and <code>DeviceOrientation</code> events report the movement and orientation of the browser's device in physical space.","name":"Device orientation events","spec":"https://w3c.github.io/deviceorientation/","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"31","chrome_android":"31","edge":"12","firefox":"6","firefox_android":"6","safari":"17","safari_ios":"4.2"}}},"device-posture":{"compat_features":["api.DevicePosture","api.DevicePosture.change_event","api.DevicePosture.type","api.Navigator.devicePosture","css.at-rules.media.device-posture"],"description":"The device posture API provides information about the physical posture of a device, such as whether a foldable device is folded or unfolded.","description_html":"The device posture API provides information about the physical posture of a device, such as whether a foldable device is folded or unfolded.","name":"Device posture","spec":"https://w3c.github.io/device-posture/","status":{"baseline":false,"support":{}}},"dialog":{"caniuse":"dialog","compat_features":["api.HTMLDialogElement","api.HTMLDialogElement.cancel_event","api.HTMLDialogElement.close","api.HTMLDialogElement.close_event","api.HTMLDialogElement.open","api.HTMLDialogElement.returnValue","api.HTMLDialogElement.show","api.HTMLDialogElement.showModal","css.selectors.backdrop.dialog","html.elements.dialog","html.elements.dialog.open"],"description":"The <dialog> HTML element represents a modal or non-modal dialog box, such as a confirmation prompt or a subwindow used to enter data.","description_html":"The <code>&#x3C;dialog></code> HTML element represents a modal or non-modal dialog box, such as a confirmation prompt or a subwindow used to enter data.","name":"<dialog>","spec":"https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"37","chrome_android":"37","edge":"79","firefox":"98","firefox_android":"98","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/481"},"dirname":{"compat_features":["api.HTMLInputElement.dirName","api.HTMLTextAreaElement.dirName","html.elements.input.dirname","html.elements.textarea.dirname"],"description":"The dirname attribute of <textarea> and <input> HTML elements includes the field's writing direction as form data on submission.","description_html":"The <code>dirname</code> attribute of <code>&#x3C;textarea></code> and <code>&#x3C;input></code> HTML elements includes the field's writing direction as form data on submission.","name":"dirname","spec":"https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fe-dirname","status":{"baseline":"low","baseline_low_date":"2023-08-01","support":{"chrome":"17","chrome_android":"18","edge":"79","firefox":"116","firefox_android":"116","safari":"6","safari_ios":"6"}}},"display-animation":{"compat_features":["css.properties.content-visibility.is_transitionable","css.properties.content-visibility.keyframe_animatable","css.properties.display.is_transitionable","css.properties.display.keyframe_animatable"],"description":"You can animate elements between display: none and any other display value or animate between content-visibility: hidden and any other content-visibility value. This also applies to transitions.","description_html":"You can animate elements between <code>display: none</code> and any other <code>display</code> value or animate between <code>content-visibility: hidden</code> and any other <code>content-visibility</code> value. This also applies to transitions.","name":"display animation","spec":["https://drafts.csswg.org/css-display-4/#display-animation","https://drafts.csswg.org/css-contain-3/#content-visibility-animation"],"status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117"}}},"document-picture-in-picture":{"compat_features":["api.DocumentPictureInPicture","api.DocumentPictureInPicture.enter_event","api.DocumentPictureInPicture.requestWindow","api.DocumentPictureInPicture.window","api.DocumentPictureInPictureEvent","api.DocumentPictureInPictureEvent.DocumentPictureInPictureEvent","api.DocumentPictureInPictureEvent.window","api.Window.documentPictureInPicture"],"description":"The document picture-in-picture API creates an always-on-top window from arbitrary HTML content.","description_html":"The document picture-in-picture API creates an always-on-top window from arbitrary HTML content.","name":"Document picture-in-picture","spec":"https://wicg.github.io/document-picture-in-picture/","status":{"baseline":false,"support":{"chrome":"116","edge":"116"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4397"},"edit-context":{"compat_features":["api.CharacterBoundsUpdateEvent","api.CharacterBoundsUpdateEvent.CharacterBoundsUpdateEvent","api.CharacterBoundsUpdateEvent.rangeEnd","api.CharacterBoundsUpdateEvent.rangeStart","api.EditContext","api.EditContext.EditContext","api.EditContext.attachedElements","api.EditContext.characterBounds","api.EditContext.characterBoundsRangeStart","api.EditContext.characterboundsupdate_event","api.EditContext.compositionend_event","api.EditContext.compositionstart_event","api.EditContext.selectionEnd","api.EditContext.selectionStart","api.EditContext.text","api.EditContext.textformatupdate_event","api.EditContext.textupdate_event","api.EditContext.updateCharacterBounds","api.EditContext.updateControlBounds","api.EditContext.updateSelection","api.EditContext.updateSelectionBounds","api.EditContext.updateText","api.HTMLElement.editContext","api.TextFormat","api.TextFormat.TextFormat","api.TextFormat.rangeEnd","api.TextFormat.rangeStart","api.TextFormat.underlineStyle","api.TextFormat.underlineThickness","api.TextFormatUpdateEvent","api.TextFormatUpdateEvent.TextFormatUpdateEvent","api.TextFormatUpdateEvent.getTextFormats","api.TextUpdateEvent","api.TextUpdateEvent.TextUpdateEvent","api.TextUpdateEvent.selectionEnd","api.TextUpdateEvent.selectionStart","api.TextUpdateEvent.text","api.TextUpdateEvent.updateRangeEnd","api.TextUpdateEvent.updateRangeStart"],"description":"The EditContext API allows you to build rich text editors that support advanced text input, such as Input Method Editor (IME) composition, an emoji picker, or other platform-specific editing UI.","description_html":"The <code>EditContext</code> API allows you to build rich text editors that support advanced text input, such as Input Method Editor (IME) composition, an emoji picker, or other platform-specific editing UI.","name":"EditContext","spec":"https://w3c.github.io/edit-context/","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121"}}},"exp-functions":{"compat_features":["css.types.exp","css.types.hypot","css.types.log","css.types.pow","css.types.sqrt"],"description":"The pow(), sqrt(), hypot(), log(), and exp() CSS functions compute various exponential functions.","description_html":"The <code>pow()</code>, <code>sqrt()</code>, <code>hypot()</code>, <code>log()</code>, and <code>exp()</code> CSS functions compute various exponential functions.","name":"pow(), sqrt(), hypot(), log(), and exp()","spec":"https://drafts.csswg.org/css-values-4/#exponent-funcs","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"118","firefox_android":"118","safari":"15.4","safari_ios":"15.4"}}},"fast-seek":{"compat_features":["api.HTMLMediaElement.fastSeek"],"description":"The fastSeek() method seeks an <audio> or <video> element as fast as possible, by seeking to a keyframe instead of exactly the requested time.","description_html":"The <code>fastSeek()</code> method seeks an <code>&#x3C;audio></code> or <code>&#x3C;video></code> element as fast as possible, by seeking to a keyframe instead of exactly the requested time.","name":"fastSeek()","spec":"https://html.spec.whatwg.org/multipage/media.html#dom-media-fastseek-dev","status":{"baseline":false,"support":{"firefox":"31","firefox_android":"31","safari":"8","safari_ios":"8"}}},"fetch":{"caniuse":"fetch","compat_features":["api.Headers","api.Headers.Headers","api.Headers.append","api.Headers.delete","api.Headers.get","api.Headers.has","api.Headers.set","api.Request","api.Request.Request","api.Request.arrayBuffer","api.Request.blob","api.Request.bodyUsed","api.Request.clone","api.Request.credentials","api.Request.headers","api.Request.json","api.Request.method","api.Request.mode","api.Request.text","api.Request.url","api.Response","api.Response.Response","api.Response.arrayBuffer","api.Response.blob","api.Response.bodyUsed","api.Response.clone","api.Response.headers","api.Response.json","api.Response.ok","api.Response.status","api.Response.statusText","api.Response.text","api.Response.type","api.Response.url","api.fetch"],"description":"The fetch() method makes asynchronous HTTP requests.","description_html":"The <code>fetch()</code> method makes asynchronous HTTP requests.","name":"Fetch (initial support)","spec":"https://fetch.spec.whatwg.org/","status":{"baseline":"high","baseline_high_date":"2019-09-27","baseline_low_date":"2017-03-27","support":{"chrome":"42","chrome_android":"42","edge":"14","firefox":"39","firefox_android":"39","safari":"10.1","safari_ios":"10.3"}}},"fetch-metadata":{"compat_features":["http.headers.Sec-Fetch-Dest","http.headers.Sec-Fetch-Mode","http.headers.Sec-Fetch-Site","http.headers.Sec-Fetch-User"],"description":"The Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site, and Sec-Fetch-User` HTTP headers provide extra information about the way a request was made, to help servers reject certain kinds of malicious requests.","description_html":"The <code>Sec-Fetch-Dest</code>, <code>Sec-Fetch-Mode, </code>Sec-Fetch-Site<code>, and </code>Sec-Fetch-User` HTTP headers provide extra information about the way a request was made, to help servers reject certain kinds of malicious requests.","name":"Fetch metadata request headers","spec":"https://w3c.github.io/webappsec-fetch-metadata/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"90","firefox_android":"90","safari":"16.4","safari_ios":"16.4"}}},"fetch-priority":{"compat_features":["api.HTMLImageElement.fetchPriority","api.HTMLLinkElement.fetchPriority","api.HTMLScriptElement.fetchPriority","api.Request.Request.init_priority_parameter","api.fetch.init_priority_parameter","html.elements.img.fetchpriority","html.elements.link.fetchpriority","html.elements.script.fetchpriority"],"description":"The fetch() priority option and the fetchPriorty HTML attribute give hints to the browser about which requests to do before other requests of the same type.","description_html":"The <code>fetch()</code> <code>priority</code> option and the <code>fetchPriorty</code> HTML attribute give hints to the browser about which requests to do before other requests of the same type.","name":"Fetch priority","spec":["https://fetch.spec.whatwg.org/#request-priority","https://html.spec.whatwg.org/multipage/urls-and-fetching.html#fetch-priority-attributes"],"status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102","safari":"17.2","safari_ios":"17.2"}}},"field-sizing":{"compat_features":["css.properties.field-sizing","css.properties.field-sizing.content","css.properties.field-sizing.fixed"],"description":"The field-sizing CSS property allows form controls such as <textarea> to be sized based on their content.","description_html":"The <code>field-sizing</code> CSS property allows form controls such as <code>&#x3C;textarea></code> to be sized based on their content.","name":"field-sizing","spec":"https://drafts.csswg.org/css-ui-4/#field-sizing","status":{"baseline":false,"support":{"chrome":"123","chrome_android":"123","edge":"123"}}},"flexbox":{"caniuse":"flexbox","compat_features":["css.properties.align-content.flex_context","css.properties.align-content.flex_context.stretch","css.properties.align-items.flex_context","css.properties.align-items.flex_context.baseline","css.properties.align-self.flex_context","css.properties.align-self.flex_context.baseline","css.properties.align-self.flex_context.stretch","css.properties.display.flex","css.properties.display.inline-flex","css.properties.flex","css.properties.flex-basis","css.properties.flex-basis.auto","css.properties.flex-direction","css.properties.flex-flow","css.properties.flex-grow","css.properties.flex-shrink","css.properties.flex-wrap","css.properties.justify-content.flex_context","css.properties.justify-content.flex_context.stretch","css.properties.justify-items.flex_context","css.properties.justify-self.flex_context","css.properties.order","css.properties.place-content.flex_context","css.properties.place-items.flex_context","css.properties.place-self.flex_context"],"description":"Flexbox is a one-dimensional layout system, which places content either horizontally or vertically, with optional wrapping.","description_html":"Flexbox is a one-dimensional layout system, which places content either horizontally or vertically, with optional wrapping.","name":"Flexbox","spec":"https://drafts.csswg.org/css-flexbox-1/","status":{"baseline":"high","baseline_high_date":"2023-03-22","baseline_low_date":"2020-09-22","support":{"chrome":"59","chrome_android":"59","edge":"79","firefox":"81","firefox_android":"81","safari":"11","safari_ios":"11"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1692"},"flexbox-gap":{"caniuse":"flexbox-gap","compat_features":["css.properties.column-gap.flex_context","css.properties.gap.flex_context","css.properties.row-gap.flex_context"],"description":"The gap CSS property in a flexbox layout sets the size of the space between items.","description_html":"The <code>gap</code> CSS property in a flexbox layout sets the size of the space between items.","name":"Flexbox gap","spec":"https://drafts.csswg.org/css-align-3/#gaps","status":{"baseline":"high","baseline_high_date":"2023-10-26","baseline_low_date":"2021-04-26","support":{"chrome":"84","chrome_android":"84","edge":"84","firefox":"63","firefox_android":"63","safari":"14.1","safari_ios":"14.5"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3307"},"focus-visible":{"caniuse":"css-focus-visible","compat_features":["css.selectors.focus-visible"],"description":"The :focus-visible CSS pseudo-class selects elements that match the :focus pseudo-class and meets the browser's criteria for visually emphasizing focused elements.","description_html":"The <code>:focus-visible</code> CSS pseudo-class selects elements that match the <code>:focus</code> pseudo-class and meets the browser's criteria for visually emphasizing focused elements.","name":":focus-visible","spec":"https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"86","chrome_android":"86","edge":"86","firefox":"85","firefox_android":"85","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2388"},"font-face":{"alias":"fonts","caniuse":"fontface","compat_features":["css.at-rules.font-face","css.at-rules.font-face.font-family","css.at-rules.font-face.src","css.at-rules.font-face.WOFF","css.at-rules.font-face.WOFF_2"],"description":"The @font-face CSS at-rule creates a custom font-family value. The at-rule's descriptors set the font's name, source, and various display settings.","description_html":"The <code>@font-face</code> CSS at-rule creates a custom <code>font-family</code> value. The at-rule's descriptors set the font's name, source, and various display settings.","name":"@font-face","spec":"https://drafts.csswg.org/css-fonts-5/","status":{"baseline":"high","baseline_high_date":"2019-03-20","baseline_low_date":"2016-09-20","support":{"chrome":"36","chrome_android":"36","edge":"14","firefox":"39","firefox_android":"39","safari":"10","safari_ios":"10"}}},"font-optical-sizing":{"compat_features":["css.properties.font-optical-sizing"],"description":"The font-optical-sizing CSS property sets whether text rendering is optimized for viewing at different sizes.","description_html":"The <code>font-optical-sizing</code> CSS property sets whether text rendering is optimized for viewing at different sizes.","name":"font-optical-sizing","spec":"https://drafts.csswg.org/css-fonts-4/#font-optical-sizing-def","status":{"baseline":"high","baseline_high_date":"2022-06-17","baseline_low_date":"2019-12-17","support":{"chrome":"79","chrome_android":"79","edge":"17","firefox":"62","firefox_android":"62","safari":"11","safari_ios":"11"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/647"},"font-palette":{"compat_features":["api.CSSFontPaletteValuesRule","api.CSSFontPaletteValuesRule.basePalette","api.CSSFontPaletteValuesRule.fontFamily","api.CSSFontPaletteValuesRule.name","api.CSSFontPaletteValuesRule.overrideColors","css.at-rules.font-palette-values","css.at-rules.font-palette-values.base-palette","css.at-rules.font-palette-values.font-family","css.at-rules.font-palette-values.override-colors","css.properties.font-palette"],"description":"The font-palette CSS property selects a color palette from the font, optionally overriding individual colors in the @font-palette-values at-rule.","description_html":"The <code>font-palette</code> CSS property selects a color palette from the font, optionally overriding individual colors in the <code>@font-palette-values</code> at-rule.","name":"font-palette","spec":["https://drafts.csswg.org/css-fonts-4/#font-palette-prop","https://drafts.csswg.org/css-fonts-4/#font-palette-values"],"status":{"baseline":"low","baseline_low_date":"2022-11-15","support":{"chrome":"101","chrome_android":"101","edge":"101","firefox":"107","firefox_android":"107","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/709"},"font-palette-animation":{"compat_features":["css.properties.font-palette.animation_computed","css.properties.font-palette.palette-mix_function"],"description":"You can animate color fonts between two font-palette values.","description_html":"You can animate color fonts between two <code>font-palette</code> values.","name":"font-palette animation","spec":"https://drafts.csswg.org/css-fonts-4/#font-palette-prop","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/animated/709"},"font-size-adjust":{"caniuse":"font-size-adjust","compat_features":["css.properties.font-size-adjust"],"description":"The font-size-adjust CSS property preserves apparent text size, regardless of the font used, by scaling fonts to the same size with respect to a specific metric, such as x-height. This can help make fallback fonts look the same size.","description_html":"The <code>font-size-adjust</code> CSS property preserves apparent text size, regardless of the font used, by scaling fonts to the same size with respect to a specific metric, such as x-height. This can help make fallback fonts look the same size.","name":"font-size-adjust","spec":"https://drafts.csswg.org/css-fonts-5/#font-size-adjust-prop","status":{"baseline":false,"support":{"firefox":"3","firefox_android":"4","safari":"16.4","safari_ios":"16.4"}}},"font-synthesis":{"compat_features":["css.properties.font-synthesis"],"description":"The font-synthesis CSS shorthand property disables all font synthesis except the given kinds. To disable a specific kind of font synthesis, instead use the longhand properties such as font-synthesis-style and font-synthesis-weight.","description_html":"The <code>font-synthesis</code> CSS shorthand property disables all font synthesis except the given kinds. To disable a specific kind of font synthesis, instead use the longhand properties such as <code>font-synthesis-style</code> and <code>font-synthesis-weight</code>.","name":"font-synthesis","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis","status":{"baseline":"low","baseline_low_date":"2022-01-06","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"34","firefox_android":"34","safari":"9","safari_ios":"9"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/704"},"font-synthesis-position":{"compat_features":["css.properties.font-synthesis-position","css.properties.font-synthesis-position.auto","css.properties.font-synthesis-position.none"],"description":"The font-synthesis-position CSS property sets whether or not the browser should synthesize subscript and superscript typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-position</code> CSS property sets whether or not the browser should synthesize subscript and superscript typefaces when they're missing from the font.","name":"font-synthesis-position","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-position","status":{"baseline":false,"support":{"firefox":"118","firefox_android":"118"}}},"font-synthesis-small-caps":{"compat_features":["css.properties.font-synthesis-small-caps","css.properties.font-synthesis-small-caps.auto","css.properties.font-synthesis-small-caps.none"],"description":"The font-synthesis-small-caps CSS property sets whether or not the browser should synthesize small caps typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-small-caps</code> CSS property sets whether or not the browser should synthesize small caps typefaces when they're missing from the font.","name":"font-synthesis-small-caps","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-small-caps","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"111","firefox_android":"111","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/703"},"font-synthesis-style":{"compat_features":["css.properties.font-synthesis-style","css.properties.font-synthesis-style.auto","css.properties.font-synthesis-style.none"],"description":"The font-synthesis-style CSS property sets whether or not the browser should synthesize italic and oblique typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-style</code> CSS property sets whether or not the browser should synthesize italic and oblique typefaces when they're missing from the font.","name":"font-synthesis-style","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-style","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"111","firefox_android":"111","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/701"},"font-synthesis-weight":{"compat_features":["css.properties.font-synthesis-weight","css.properties.font-synthesis-weight.auto","css.properties.font-synthesis-weight.none"],"description":"The font-synthesis-weight CSS property sets whether or not the browser should synthesize bold typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-weight</code> CSS property sets whether or not the browser should synthesize bold typefaces when they're missing from the font.","name":"font-synthesis-weight","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-weight","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"111","firefox_android":"111","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/700"},"font-variant-alternates":{"caniuse":"font-variant-alternates","compat_features":["api.CSSFontFeatureValuesRule","api.CSSFontFeatureValuesRule.fontFamily","css.at-rules.font-feature-values","css.at-rules.font-feature-values.annotation","css.at-rules.font-feature-values.character-variant","css.at-rules.font-feature-values.historical-forms","css.at-rules.font-feature-values.ornaments","css.at-rules.font-feature-values.styleset","css.at-rules.font-feature-values.stylistic","css.at-rules.font-feature-values.swash","css.properties.font-variant-alternates","css.properties.font-variant-alternates.annotation","css.properties.font-variant-alternates.character_variant","css.properties.font-variant-alternates.ornaments","css.properties.font-variant-alternates.styleset","css.properties.font-variant-alternates.stylistic","css.properties.font-variant-alternates.swash"],"description":"The font-variant-alternates CSS property, along with the @font-feature-values at-rule, chooses when to use a font's alternate glyphs.","description_html":"The <code>font-variant-alternates</code> CSS property, along with the <code>@font-feature-values</code> at-rule, chooses when to use a font's alternate glyphs.","name":"font-variant-alternates","spec":"https://drafts.csswg.org/css-fonts-4/#font-variant-alternates-prop","status":{"baseline":"low","baseline_low_date":"2023-03-13","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"34","firefox_android":"34","safari":"16.2","safari_ios":"16.2"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/738"},"form-associated-custom-elements":{"compat_features":["api.HTMLElement.attachInternals","api.ElementInternals","api.ElementInternals.checkValidity","api.ElementInternals.form","api.ElementInternals.labels","api.ElementInternals.reportValidity","api.ElementInternals.setFormValue","api.ElementInternals.setValidity","api.ElementInternals.validationMessage","api.ElementInternals.validity","api.ElementInternals.willValidate"],"description":"Custom elements may act like built-in form elements, via the the attachInternals() method of HTMLElement and the ElementInternals API.","description_html":"Custom elements may act like built-in form elements, via the the <code>attachInternals()</code> method of <code>HTMLElement</code> and the <code>ElementInternals</code> API.","name":"Form-associated custom elements","spec":"https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"77","chrome_android":"77","edge":"79","firefox":"98","firefox_android":"98","safari":"16.4","safari_ios":"16.4"}}},"fullscreen":{"caniuse":"fullscreen","compat_features":["api.Document.exitFullscreen","api.Document.exitFullscreen.returns_promise","api.Document.fullscreenchange_event","api.Document.fullscreenElement","api.Document.fullscreenEnabled","api.Document.fullscreenerror_event","api.Element.fullscreenchange_event","api.Element.fullscreenerror_event","api.Element.requestFullscreen","api.Element.requestFullscreen.returns_promise","api.HTMLIFrameElement.allowFullscreen","api.ShadowRoot.fullscreenElement","css.selectors.backdrop.fullscreen","css.selectors.fullscreen","html.elements.iframe.allowfullscreen"],"description":"The fullscreen API makes a specific element fill the whole screen and hides most browser UI.","description_html":"The fullscreen API makes a specific element fill the whole screen and hides most browser UI.","name":"Fullscreen API","spec":"https://fullscreen.spec.whatwg.org/","status":{"baseline":false,"support":{"chrome":"71","chrome_android":"71","edge":"79","firefox":"64","firefox_android":"64","safari":"16.4"}}},"grid":{"caniuse":"css-grid","compat_features":["css.properties.align-content.grid_context","css.properties.align-items.grid_context","css.properties.align-items.grid_context.start_end","css.properties.align-self.grid_context","css.properties.column-gap.grid_context","css.properties.display.grid","css.properties.display.inline-grid","css.properties.gap.grid_context","css.properties.gap.grid_context.calc_values","css.properties.gap.grid_context.percentage_values","css.properties.grid","css.properties.grid-area","css.properties.grid-auto-columns","css.properties.grid-auto-flow","css.properties.grid-auto-rows","css.properties.grid-column","css.properties.grid-column-end","css.properties.grid-column-start","css.properties.grid-row","css.properties.grid-row-end","css.properties.grid-row-start","css.properties.grid-template","css.properties.grid-template-areas","css.properties.grid-template-columns","css.properties.grid-template-columns.fit-content","css.properties.grid-template-columns.minmax","css.properties.grid-template-columns.repeat","css.properties.grid-template-rows","css.properties.grid-template-rows.fit-content","css.properties.grid-template-rows.minmax","css.properties.grid-template-rows.repeat","css.properties.justify-content.grid_context","css.properties.justify-items.grid_context","css.properties.justify-self.grid_context","css.properties.place-content.grid_context","css.properties.place-items.grid_context","css.properties.place-self.grid_context","css.properties.row-gap.grid_context","css.types.flex"],"description":"CSS Grid is a two-dimensional layout system, which lays content out in rows and columns.","description_html":"CSS Grid is a two-dimensional layout system, which lays content out in rows and columns.","name":"Grid","spec":"https://drafts.csswg.org/css-grid-3/","status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"66","chrome_android":"66","edge":"79","firefox":"76","firefox_android":"79","safari":"12.1","safari_ios":"12.2"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1693"},"grid-animation":{"compat_features":["css.properties.grid-template-columns.animation","css.properties.grid-template-rows.animation"],"description":"Grid animation allows you to animate the grid-template-columns and grid-template-rows CSS properties.","description_html":"Grid animation allows you to animate the <code>grid-template-columns</code> and <code>grid-template-rows</code> CSS properties.","name":"Grid animation","spec":"https://drafts.csswg.org/css-grid-2/#track-sizing","status":{"baseline":"low","baseline_low_date":"2022-10-27","support":{"chrome":"107","chrome_android":"107","edge":"107","firefox":"66","firefox_android":"66","safari":"16","safari_ios":"16"}}},"has":{"caniuse":"css-has","compat_features":["css.selectors.has"],"description":"The :has() CSS functional pseudo-class matches an element if any of the selectors passed as parameters would match at least one element.","description_html":"The <code>:has()</code> CSS functional pseudo-class matches an element if any of the selectors passed as parameters would match at least one element.","name":":has()","spec":"https://drafts.csswg.org/selectors-4/#relational","status":{"baseline":"low","baseline_low_date":"2023-12-19","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"121","firefox_android":"121","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4743"},"highlight":{"compat_features":["api.CSS.highlights_static","api.Highlight","api.Highlight.@@iterator","api.Highlight.Highlight","api.Highlight.add","api.Highlight.clear","api.Highlight.delete","api.Highlight.entries","api.Highlight.forEach","api.Highlight.has","api.Highlight.keys","api.Highlight.priority","api.Highlight.size","api.Highlight.type","api.Highlight.values","api.HighlightRegistry","api.HighlightRegistry.@@iterator","api.HighlightRegistry.clear","api.HighlightRegistry.delete","api.HighlightRegistry.entries","api.HighlightRegistry.forEach","api.HighlightRegistry.get","api.HighlightRegistry.has","api.HighlightRegistry.keys","api.HighlightRegistry.set","api.HighlightRegistry.size","api.HighlightRegistry.values","css.selectors.highlight"],"description":"Custom highlights style arbitrary text ranges, without adding extra elements to the DOM.","description_html":"Custom highlights style arbitrary text ranges, without adding extra elements to the DOM.","name":"Custom highlights","spec":"https://drafts.csswg.org/css-highlight-api-1/","status":{"baseline":false,"support":{"chrome":"105","chrome_android":"105","edge":"105","safari":"17.2","safari_ios":"17.2"}}},"html-media-capture":{"caniuse":"html-media-capture","compat_features":["api.HTMLInputElement.capture","html.elements.input.capture"],"description":"The capture HTML attribute for <input type=\"file\"> elements allows the user to capture media using the device's camera or microphone.","description_html":"The <code>capture</code> HTML attribute for <code>&#x3C;input type=\"file\"></code> elements allows the user to capture media using the device's camera or microphone.","name":"HTML media capture","spec":"https://w3c.github.io/html-media-capture/","status":{"baseline":false,"support":{"chrome_android":"25","firefox_android":"79","safari_ios":"10"}}},"http11":{"compat_features":["http.methods.GET"],"description":"HTTP/1.1 is a network protocol used by browsers and servers. It has been superseded by HTTP/2 and HTTP/3.","description_html":"HTTP/1.1 is a network protocol used by browsers and servers. It has been superseded by HTTP/2 and HTTP/3.","name":"HTTP/1.1","spec":"https://httpwg.org/specs/rfc9112.html","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}}},"http2":{"caniuse":"http2","description":"The HTTP/2 protocol is a major revision of the HTTP network protocol, providing improved performance and efficiency by using a single TCP connection to send multiple streams of data at once.","description_html":"The HTTP/2 protocol is a major revision of the HTTP network protocol, providing improved performance and efficiency by using a single TCP connection to send multiple streams of data at once.","name":"HTTP/2","spec":"https://httpwg.org/specs/rfc9113.html","status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"41","chrome_android":"41","edge":"12","firefox":"36","firefox_android":"36","safari":"9","safari_ios":"9"}}},"http3":{"caniuse":"http3","description":"HTTP/3 is a major revision of the HTTP network protocol, providing improved performance and efficiency by using QUIC as the underlying transport protocol.","description_html":"HTTP/3 is a major revision of the HTTP network protocol, providing improved performance and efficiency by using QUIC as the underlying transport protocol.","name":"HTTP/3","spec":"https://httpwg.org/specs/rfc9114.html","status":{"baseline":false,"support":{"chrome":"87","chrome_android":"87","edge":"87","firefox":"88","firefox_android":"88"}}},"hyphens":{"caniuse":"css-hyphens","compat_features":["css.properties.hyphens"],"description":"The hyphens CSS property controls when long words are broken by line wrapping. Although called hyphens, the property applies to word-splitting behavior across languages, such as customary spelling changes or the use of other characters to mark an intraword line break.","description_html":"The <code>hyphens</code> CSS property controls when long words are broken by line wrapping. Although called <code>hyphens</code>, the property applies to word-splitting behavior across languages, such as customary spelling changes or the use of other characters to mark an intraword line break.","name":"Hyphenation","spec":"https://drafts.csswg.org/css-text-3/#hyphens-property","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"55","chrome_android":"55","edge":"79","firefox":"43","firefox_android":"43","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/534"},"ic":{"compat_features":["css.types.length.ic"],"description":"The CSS ic unit corresponds to the width of CJK ideographic characters.","description_html":"The CSS <code>ic</code> unit corresponds to the width of CJK ideographic characters.","name":"ic unit","spec":"https://drafts.csswg.org/css-values-4/#ic","status":{"baseline":"low","baseline_low_date":"2022-10-03","support":{"chrome":"106","chrome_android":"106","edge":"106","firefox":"97","firefox_android":"97","safari":"15.4","safari_ios":"15.4"}}},"idle-detection":{"compat_features":["api.IdleDetector","api.IdleDetector.IdleDetector","api.IdleDetector.change_event","api.IdleDetector.requestPermission_static","api.IdleDetector.screenState","api.IdleDetector.start","api.IdleDetector.userState","http.headers.Permissions-Policy.idle-detection"],"description":"The IdleDetector API is used to notify a webpage of the user's idle, active, and locked state.","description_html":"The <code>IdleDetector</code> API is used to notify a webpage of the user's idle, active, and locked state.","name":"Idle detection","spec":"https://wicg.github.io/idle-detection/","status":{"baseline":false,"support":{"chrome":"94","chrome_android":"94","edge":"94"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2834"},"image-set":{"caniuse":"css-image-set","compat_features":["css.properties.background-image.image-set","css.properties.content.image-set","css.types.image.image-set"],"description":"The image-set() CSS function provides a set of images at different resolutions or pixel densities, which the browser can pick from, depending on the device capabilities.","description_html":"The <code>image-set()</code> CSS function provides a set of images at different resolutions or pixel densities, which the browser can pick from, depending on the device capabilities.","name":"image-set()","spec":"https://drafts.csswg.org/css-images-4/#image-set-notation","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"113","chrome_android":"113","edge":"113","firefox":"89","firefox_android":"89","safari":"17","safari_ios":"17"}}},"import-maps":{"caniuse":"import-maps","compat_features":["html.elements.script.type.importmap"],"description":"A <script type=\"importmap\"> HTML element provides an import map as a JSON string. An import map controls how the browser should resolve module specifiers when importing JavaScript modules.","description_html":"A <code>&#x3C;script type=\"importmap\"></code> HTML element provides an import map as a JSON string. An import map controls how the browser should resolve module specifiers when importing JavaScript modules.","name":"Import maps","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#import-maps","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"89","chrome_android":"89","edge":"89","firefox":"108","firefox_android":"108","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2831"},"indeterminate":{"caniuse":"css-indeterminate-pseudo","compat_features":["css.selectors.indeterminate","css.selectors.indeterminate.checkbox","css.selectors.indeterminate.progress","css.selectors.indeterminate.radio"],"description":"The :indeterminate CSS pseudo-class selects any form element whose state is indeterminate, such as checkboxes that have been set to an indeterminate state with JavaScript, or radio buttons which are members of a group in which all radio buttons are unchecked.","description_html":"The <code>:indeterminate</code> CSS pseudo-class selects any form element whose state is indeterminate, such as checkboxes that have been set to an indeterminate state with JavaScript, or radio buttons which are members of a group in which all radio buttons are unchecked.","name":":indeterminate","spec":["https://drafts.csswg.org/selectors-4/#indeterminate","https://html.spec.whatwg.org/multipage/semantics-other.html#selector-indeterminate"],"status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"39","chrome_android":"39","edge":"79","firefox":"51","firefox_android":"51","safari":"10","safari_ios":"10"}}},"individual-transforms":{"compat_features":["css.properties.rotate","css.properties.scale","css.properties.translate"],"description":"Transform elements with separate translate, rotate, and scale CSS properties.","description_html":"Transform elements with separate <code>translate</code>, <code>rotate</code>, and <code>scale</code> CSS properties.","name":"Individual transform properties","spec":"https://drafts.csswg.org/css-transforms-2/#individual-transforms","status":{"baseline":"low","baseline_low_date":"2022-08-05","support":{"chrome":"104","chrome_android":"104","edge":"104","firefox":"72","firefox_android":"79","safari":"14.1","safari_ios":"14.5"}},"usage_stats":["https://chromestatus.com/metrics/css/timeline/popularity/504","https://chromestatus.com/metrics/css/timeline/popularity/505","https://chromestatus.com/metrics/css/timeline/popularity/506"]},"inert":{"compat_features":["api.HTMLElement.inert","html.global_attributes.inert"],"description":"The inert HTML attribute marks an element and its descendants as non-interactive. Inert elements don't get focus or fire click events.","description_html":"The <code>inert</code> HTML attribute marks an element and its descendants as non-interactive. Inert elements don't get focus or fire <code>click</code> events.","name":"Inert elements","spec":"https://html.spec.whatwg.org/multipage/interaction.html#inert-subtrees","status":{"baseline":"low","baseline_low_date":"2023-04-11","support":{"chrome":"102","chrome_android":"102","edge":"102","firefox":"112","firefox_android":"112","safari":"15.5","safari_ios":"15.5"}}},"input-event":{"caniuse":"input-event","compat_features":["api.Element.input_event","api.InputEvent","api.InputEvent.InputEvent","api.InputEvent.data","api.InputEvent.dataTransfer","api.InputEvent.getTargetRanges","api.InputEvent.inputType","api.InputEvent.isComposing"],"description":"The input event fires when a form control changes or an element with the contenteditable attribute changes.","description_html":"The <code>input</code> event fires when a form control changes or an element with the <code>contenteditable</code> attribute changes.","name":"input event","spec":"https://w3c.github.io/uievents/#event-type-input","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"60","chrome_android":"60","edge":"79","firefox":"87","firefox_android":"87","safari":"16.4","safari_ios":"16.4"}}},"intersection-observer":{"caniuse":"intersectionobserver","compat_features":["api.IntersectionObserver","api.IntersectionObserver.IntersectionObserver","api.IntersectionObserver.disconnect","api.IntersectionObserver.observe","api.IntersectionObserver.root","api.IntersectionObserver.rootMargin","api.IntersectionObserver.takeRecords","api.IntersectionObserver.thresholds","api.IntersectionObserver.unobserve","api.IntersectionObserverEntry","api.IntersectionObserverEntry.boundingClientRect","api.IntersectionObserverEntry.intersectionRatio","api.IntersectionObserverEntry.intersectionRect","api.IntersectionObserverEntry.isIntersecting","api.IntersectionObserverEntry.rootBounds","api.IntersectionObserverEntry.target","api.IntersectionObserverEntry.time"],"description":"The Intersection Observer API asynchronously observes changes in the intersection of a target element with an ancestor element or with a top-level document's viewport.","description_html":"The Intersection Observer API asynchronously observes changes in the intersection of a target element with an ancestor element or with a top-level document's viewport.","name":"Intersection observer","spec":"https://w3c.github.io/IntersectionObserver/","status":{"baseline":"high","baseline_high_date":"2021-09-25","baseline_low_date":"2019-03-25","support":{"chrome":"58","chrome_android":"58","edge":"16","firefox":"55","firefox_android":"55","safari":"12.1","safari_ios":"12.2"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1368"},"intersection-observer-v2":{"caniuse":"intersectionobserver-v2","description":"The trackVisibility parameter for the IntersectionObserver constructor enables tracking the visibility of an element, to detect if it may be obscured by other content or visual effects. Also known as IntersectionObserver v2.","description_html":"The <code>trackVisibility</code> parameter for the <code>IntersectionObserver</code> constructor enables tracking the visibility of an element, to detect if it may be obscured by other content or visual effects. Also known as IntersectionObserver v2.","name":"Intersection observer visibility tracking","spec":"https://w3c.github.io/IntersectionObserver/v2/","status":{"baseline":false,"support":{"chrome":"74","chrome_android":"74","edge":"79"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3051"},"is":{"caniuse":"css-matches-pseudo","compat_features":["css.selectors.is","css.selectors.is.forgiving_selector_list"],"description":"The :is() CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list.","description_html":"The <code>:is()</code> CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list.","name":":is()","spec":"https://drafts.csswg.org/selectors-4/#matches","status":{"baseline":"high","baseline_high_date":"2023-07-21","baseline_low_date":"2021-01-21","support":{"chrome":"88","chrome_android":"88","edge":"88","firefox":"82","firefox_android":"82","safari":"14","safari_ios":"14"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2322"},"jpegxl":{"caniuse":"jpegxl","description":"The JPEG XL image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","description_html":"The JPEG XL image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","name":"JPEG XL","spec":"https://www.iso.org/standard/85253.html","status":{"baseline":false,"support":{"safari":"17","safari_ios":"17"}}},"js-modules":{"caniuse":"es6-module","compat_features":["html.elements.script.nomodule","html.elements.script.type.module","javascript.statements.export","javascript.statements.export.default","javascript.statements.import"],"description":"JavaScript modules allow code to be organized into reusable units. Modules use import to load other modules and export to declare what is available to import from other modules. In HTML, modules are loaded with <script type=\"module\">.","description_html":"JavaScript modules allow code to be organized into reusable units. Modules use <code>import</code> to load other modules and <code>export</code> to declare what is available to import from other modules. In HTML, modules are loaded with <code>&#x3C;script type=\"module\"></code>.","name":"JavaScript modules","spec":["https://html.spec.whatwg.org/multipage/webappapis.html#javascript-module-script","https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#sec-modules"],"status":{"baseline":"high","baseline_high_date":"2020-11-09","baseline_low_date":"2018-05-09","support":{"chrome":"61","chrome_android":"61","edge":"16","firefox":"60","firefox_android":"60","safari":"11","safari_ios":"11"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/2062","https://chromestatus.com/metrics/feature/timeline/popularity/2615"]},"js-modules-service-workers":{"compat_features":["api.ServiceWorker.ecmascript_modules","javascript.statements.import.service_worker_support"],"description":"The navigator.serviceWorker.register() method accepts { type: \"module\" } to load scripts that use import and export. Also known as ECMAScript modules or ESM in service workers.","description_html":"The <code>navigator.serviceWorker.register()</code> method accepts <code>{ type: \"module\" }</code> to load scripts that use <code>import</code> and <code>export</code>. Also known as ECMAScript modules or ESM in service workers.","name":"JavaScript modules in service workers","spec":"https://w3c.github.io/ServiceWorker/#dom-registrationoptions-type","status":{"baseline":false,"support":{"chrome":"91","chrome_android":"91","edge":"91","safari":"15","safari_ios":"15"}}},"js-modules-shared-workers":{"compat_features":["api.SharedWorker.SharedWorker.ecmascript_modules"],"description":"The SharedWorker() constructor accepts { type: \"module\" } to load scripts that use import and export. Also known as ECMAScript modules or ESM in shared workers.","description_html":"The <code>SharedWorker()</code> constructor accepts <code>{ type: \"module\" }</code> to load scripts that use <code>import</code> and <code>export</code>. Also known as ECMAScript modules or ESM in shared workers.","name":"JavaScript modules in shared workers","spec":"https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the-sharedworker-interface:dom-sharedworker-2","status":{"baseline":false,"support":{"chrome":"80","edge":"80","firefox":"114","firefox_android":"114","safari":"15","safari_ios":"15"}}},"js-modules-workers":{"compat_features":["api.Worker.Worker.ecmascript_modules","api.Worker.Worker.options_type_parameter","javascript.operators.import.worker_support","javascript.statements.import.worker_support"],"description":"The Worker() constructor accepts { type: \"module\" } to load scripts that use import and export. Also known as ECMAScript modules or ESM in workers.","description_html":"The <code>Worker()</code> constructor accepts <code>{ type: \"module\" }</code> to load scripts that use <code>import</code> and <code>export</code>. Also known as ECMAScript modules or ESM in workers.","name":"JavaScript modules in workers","spec":"https://html.spec.whatwg.org/multipage/workers.html#dom-worker-dev","status":{"baseline":"low","baseline_low_date":"2023-06-06","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"114","firefox_android":"114","safari":"15","safari_ios":"15"}}},"lab":{"compat_features":["css.types.color.lab","css.types.color.lch"],"description":"The CIE Lab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is. LCH is a variant of Lab with polar coordinates. These color spaces can be used with the CSS color(), lab(), and lch() functions. Also known as CIELAB and CIELCH.","description_html":"The CIE Lab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is. LCH is a variant of Lab with polar coordinates. These color spaces can be used with the CSS <code>color()</code>, <code>lab()</code>, and <code>lch()</code> functions. Also known as CIELAB and CIELCH.","name":"Lab and LCH","spec":"https://drafts.csswg.org/css-color-4/#cie-lab","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"15","safari_ios":"15"}}},"lh":{"compat_features":["css.types.length.lh"],"description":"The CSS lh unit corresponds to the requested line height, the computed value of the line-height property. Some lines may be higher than this based on their content.","description_html":"The CSS <code>lh</code> unit corresponds to the requested line height, the computed value of the <code>line-height</code> property. Some lines may be higher than this based on their content.","name":"lh unit","spec":"https://drafts.csswg.org/css-values-4/#lh","status":{"baseline":"low","baseline_low_date":"2023-11-21","support":{"chrome":"109","chrome_android":"109","edge":"109","firefox":"120","firefox_android":"120","safari":"16.4","safari_ios":"16.4"}}},"light-dark":{"compat_features":["css.types.color.light-dark"],"description":"The light-dark() CSS function accepts two colors and uses one depending on the current color scheme.","description_html":"The <code>light-dark()</code> CSS function accepts two colors and uses one depending on the current color scheme.","name":"light-dark()","spec":"https://drafts.csswg.org/css-color-5/#light-dark","status":{"baseline":"low","baseline_low_date":"2024-05-13","support":{"chrome":"123","chrome_android":"123","edge":"123","firefox":"120","firefox_android":"120","safari":"17.5","safari_ios":"17.5"}}},"line-clamp":{"caniuse":"css-line-clamp","compat_features":["css.properties.line-clamp"],"description":"The line-clamp CSS property limits the text in a block container to a certain number of lines. The prefixed -webkit-line-clamp is widely supported but only works with -webkit-box-orient: vertical in combination with display: -webkit-box or display: -webkit-inline-box.","description_html":"The <code>line-clamp</code> CSS property limits the text in a block container to a certain number of lines. The prefixed <code>-webkit-line-clamp</code> is widely supported but only works with <code>-webkit-box-orient: vertical</code> in combination with <code>display: -webkit-box</code> or <code>display: -webkit-inline-box</code>.","name":"line-clamp","spec":"https://drafts.csswg.org/css-overflow-4/#line-clamp","status":{"baseline":false,"support":{}}},"linear-easing":{"compat_features":["css.types.easing-function.linear-function"],"description":"The linear() easing function for animations and transitions interpolates linearly between the control points, and can be used to approximate complex easing functions, such as a bounce effect.","description_html":"The <code>linear()</code> easing function for animations and transitions interpolates linearly between the control points, and can be used to approximate complex easing functions, such as a bounce effect.","name":"linear() easing","spec":"https://drafts.csswg.org/css-easing-2/#the-linear-easing-function","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"113","chrome_android":"113","edge":"113","firefox":"112","firefox_android":"112","safari":"17.2","safari_ios":"17.2"}}},"loading-lazy":{"caniuse":"loading-lazy-attr","compat_features":["api.HTMLIFrameElement.loading","api.HTMLImageElement.loading","html.elements.iframe.loading","html.elements.img.loading"],"description":"The loading=\"lazy\" attribute for <img> and <iframe> elements blocks loading the external resource until the user scrolls to that element's part of the page.","description_html":"The <code>loading=\"lazy\"</code> attribute for <code>&#x3C;img></code> and <code>&#x3C;iframe></code> elements blocks loading the external resource until the user scrolls to that element's part of the page.","name":"Lazy-loading images and iframes","spec":"https://html.spec.whatwg.org/multipage/urls-and-fetching.html#lazy-loading-attributes","status":{"baseline":"low","baseline_low_date":"2023-12-19","support":{"chrome":"77","chrome_android":"77","edge":"79","firefox":"121","firefox_android":"121","safari":"16.4","safari_ios":"16.4"}}},"managed-media-source":{"compat_features":["api.ManagedMediaSource","api.ManagedMediaSource.ManagedMediaSource","api.ManagedMediaSource.endstreaming_event","api.ManagedMediaSource.startstreaming_event","api.ManagedMediaSource.streaming","api.ManagedSourceBuffer","api.ManagedSourceBuffer.bufferedchange_event"],"description":"The ManagedMediaSource API is a MediaSource where the browser manages the memory of source buffers and may evict data if needed.","description_html":"The <code>ManagedMediaSource</code> API is a <code>MediaSource</code> where the browser manages the memory of source buffers and may evict data if needed.","name":"Managed media source","spec":"https://w3c.github.io/media-source/#managedmediasource-interface","status":{"baseline":false,"support":{"safari":"17","safari_ios":"17.1"}}},"map":{"compat_features":["javascript.builtins.Map","javascript.builtins.Map.Map","javascript.builtins.Map.Map.iterable_allowed","javascript.builtins.Map.Map.null_allowed","javascript.builtins.Map.clear","javascript.builtins.Map.delete","javascript.builtins.Map.entries","javascript.builtins.Map.forEach","javascript.builtins.Map.get","javascript.builtins.Map.has","javascript.builtins.Map.key_equality_for_zeros","javascript.builtins.Map.keys","javascript.builtins.Map.set","javascript.builtins.Map.size","javascript.builtins.Map.values","javascript.builtins.Map.@@iterator","javascript.builtins.Map.@@species"],"description":"Map objects hold key-value pairs and remember the original insertion order of the keys.","description_html":"Map objects hold key-value pairs and remember the original insertion order of the keys.","name":"Map (initial support)","spec":["https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map-objects","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map-constructor","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.clear","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.delete","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.entries","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.foreach","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.get","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.has","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.keys","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.set","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-get-map.prototype.size","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.values","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype-@@iterator","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-get-map-@@species"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"13","firefox_android":"14","safari":"8","safari_ios":"8"}}},"margin-trim":{"compat_features":["css.properties.margin-trim","css.properties.margin-trim.block","css.properties.margin-trim.block-end","css.properties.margin-trim.block-start","css.properties.margin-trim.inline","css.properties.margin-trim.inline-end","css.properties.margin-trim.inline-start","css.properties.margin-trim.none"],"description":"The margin-trim CSS property removes the margins of child elements when they meet the edges of the container.","description_html":"The <code>margin-trim</code> CSS property removes the margins of child elements when they meet the edges of the container.","name":"margin-trim","spec":"https://drafts.csswg.org/css-box-4/#margin-trim","status":{"baseline":false,"support":{"safari":"16.4","safari_ios":"16.4"}}},"masks":{"caniuse":"css-masks","compat_features":["css.properties.mask","css.properties.mask-clip","css.properties.mask-composite","css.properties.mask-image","css.properties.mask-mode","css.properties.mask-origin","css.properties.mask-position","css.properties.mask-repeat","css.properties.mask-size"],"description":"The mask CSS property (and several longhand properties) partially or completely hides an element according to the shape and depth of an image.","description_html":"The <code>mask</code> CSS property (and several longhand properties) partially or completely hides an element according to the shape and depth of an image.","name":"Masks","spec":"https://drafts.fxtf.org/css-masking-1/#positioned-masks","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"53","firefox_android":"53","safari":"15.4","safari_ios":"15.4"}}},"masonry":{"compat_features":["css.properties.align-tracks","css.properties.grid-template-columns.masonry","css.properties.grid-template-rows.masonry","css.properties.justify-tracks","css.properties.masonry-auto-flow"],"description":"Masonry is a type of CSS grid layout where the items on one of the axes are tightly packed together, like brickwork, instead of leaving gaps to align across the other axis.","description_html":"Masonry is a type of CSS grid layout where the items on one of the axes are tightly packed together, like brickwork, instead of leaving gaps to align across the other axis.","name":"Masonry","spec":"https://drafts.csswg.org/css-grid-3/","status":{"baseline":false,"support":{}}},"mathml":{"caniuse":"mathml","description":"MathML, or the Mathematical Markup Language, describes mathematical notation, such as expressions and formulas. Also known as MathML Core.","description_html":"MathML, or the Mathematical Markup Language, describes mathematical notation, such as expressions and formulas. Also known as MathML Core.","name":"MathML","spec":"https://w3c.github.io/mathml-core/","status":{"baseline":"low","baseline_low_date":"2023-01-12","support":{"chrome":"109","chrome_android":"109","edge":"109","firefox":"4","firefox_android":"4","safari":"10","safari_ios":"10"}}},"media-capture":{"caniuse":"stream","compat_features":["api.MediaDeviceInfo","api.MediaDeviceInfo.deviceId","api.MediaDeviceInfo.groupId","api.MediaDeviceInfo.kind","api.MediaDeviceInfo.label","api.MediaDevices","api.MediaDevices.enumerateDevices","api.MediaDevices.getUserMedia","api.MediaStream.getAudioTracks","api.MediaStream.getTracks","api.MediaStream.getVideoTracks","api.MediaStreamTrack","api.MediaStreamTrack.enabled","api.MediaStreamTrack.id","api.MediaStreamTrack.kind","api.MediaStreamTrack.label","api.MediaStreamTrack.stop"],"description":"The navigator.mediaDevices.getUserMedia() API requests access to devices that produce audio or video streams, such as microphones or video cameras.","description_html":"The <code>navigator.mediaDevices.getUserMedia()</code> API requests access to devices that produce audio or video streams, such as microphones or video cameras.","name":"Media capture","spec":"https://w3c.github.io/mediacapture-main/","status":{"baseline":"high","baseline_high_date":"2020-03-19","baseline_low_date":"2017-09-19","support":{"chrome":"53","chrome_android":"53","edge":"12","firefox":"39","firefox_android":"39","safari":"11","safari_ios":"11"}}},"media-pseudos":{"compat_features":["css.selectors.buffering","css.selectors.muted","css.selectors.paused","css.selectors.playing","css.selectors.seeking","css.selectors.stalled","css.selectors.volume-locked"],"description":"The :playing, :paused, :seeking, :buffering, :stalled, :muted, and :volume-locked CSS pseudo-classes match <audio> and <video> elements based on their state.","description_html":"The <code>:playing</code>, <code>:paused</code>, <code>:seeking</code>, <code>:buffering</code>, <code>:stalled</code>, <code>:muted</code>, and <code>:volume-locked</code> CSS pseudo-classes match <code>&#x3C;audio></code> and <code>&#x3C;video></code> elements based on their state.","name":"Media element pseudo-classes","spec":["https://drafts.csswg.org/selectors-4/#resource-pseudos","https://html.spec.whatwg.org/multipage/semantics-other.html#pseudo-classes"],"status":{"baseline":false,"support":{"safari":"15.4","safari_ios":"15.4"}}},"media-query-range-syntax":{"caniuse":"css-media-range-syntax","compat_features":["css.at-rules.media.range_syntax"],"description":"The range syntax of CSS media queries allows you to use mathematical comparison operators such as <, >, <=, and >= to define a range of values for a media feature. For example, (400px < width < 1000px) returns true if the viewport width is between 400px and 1000px.","description_html":"The range syntax of CSS media queries allows you to use mathematical comparison operators such as <code>&#x3C;</code>, <code>></code>, <code>&#x3C;=</code>, and <code>>=</code> to define a range of values for a media feature. For example, <code>(400px &#x3C; width &#x3C; 1000px)</code> returns true if the viewport width is between 400px and 1000px.","name":"Media query range syntax","spec":"https://drafts.csswg.org/mediaqueries-4/#mq-range-context","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"104","chrome_android":"104","edge":"104","firefox":"102","firefox_android":"102","safari":"16.4","safari_ios":"16.4"}}},"media-session":{"compat_features":["api.MediaMetadata","api.MediaMetadata.album","api.MediaMetadata.artist","api.MediaMetadata.artwork","api.MediaMetadata.MediaMetadata","api.MediaMetadata.title","api.MediaSession","api.MediaSession.metadata","api.MediaSession.playbackState","api.MediaSession.setActionHandler","api.MediaSession.setActionHandler.nexttrack_type","api.MediaSession.setActionHandler.pause_type","api.MediaSession.setActionHandler.play_type","api.MediaSession.setActionHandler.previoustrack_type","api.MediaSession.setActionHandler.seekbackward_type","api.MediaSession.setActionHandler.seekforward_type","api.Navigator.mediaSession"],"description":"The navigator.mediaSession API integrates with platform UI for media playback. It can be used to set metadata such as title and artwork, and to handle user actions like playing, pausing, or seeking.","description_html":"The <code>navigator.mediaSession</code> API integrates with platform UI for media playback. It can be used to set metadata such as title and artwork, and to handle user actions like playing, pausing, or seeking.","name":"Media session","spec":"https://w3c.github.io/mediasession/","status":{"baseline":false,"support":{"chrome":"73","chrome_android":"57","edge":"79","firefox":"82","safari":"15","safari_ios":"15"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1789"},"media-source":{"caniuse":"mediasource","compat_features":["api.MediaSource","api.SourceBuffer","api.SourceBufferList"],"description":"The MediaSource API is a custom data source for media elements commonly used for adaptive streaming. Also known as Media Source Extensions (MSE).","description_html":"The <code>MediaSource</code> API is a custom data source for media elements commonly used for adaptive streaming. Also known as Media Source Extensions (MSE).","name":"Media source","spec":"https://w3c.github.io/media-source/","status":{"baseline":false,"support":{"chrome":"31","chrome_android":"31","edge":"12","firefox":"42","firefox_android":"42","safari":"8"}}},"messageerror":{"compat_features":["api.DedicatedWorkerGlobalScope.messageerror_event","api.MessagePort.messageerror_event","api.ServiceWorkerContainer.messageerror_event","api.Window.messageerror_event"],"description":"The messageerror event fires on a target, such as a window or worker, when an incoming message cannot be deserialized. This event can fire for many types of messages, such as cross-document messages or broadcast channel messages.","description_html":"The <code>messageerror</code> event fires on a target, such as a window or worker, when an incoming message cannot be deserialized. This event can fire for many types of messages, such as cross-document messages or broadcast channel messages.","name":"messageerror","spec":["https://html.spec.whatwg.org/multipage/indices.html#event-messageerror","https://w3c.github.io/ServiceWorker/#eventdef-serviceworkerglobalscope-messageerror"],"status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"65","firefox_android":"65","safari":"16.4","safari_ios":"16.4"}}},"min-max-clamp":{"compat_features":["css.types.clamp","css.types.max","css.types.min"],"description":"The min() and max() CSS functions return the minimum or maximum of the arguments, while clamp() clamps a value to a given range.","description_html":"The <code>min()</code> and <code>max()</code> CSS functions return the minimum or maximum of the arguments, while <code>clamp()</code> clamps a value to a given range.","name":"min(), max(), and clamp()","spec":"https://drafts.csswg.org/css-values-4/#comp-func","status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"79","chrome_android":"79","edge":"79","firefox":"75","firefox_android":"79","safari":"13.1","safari_ios":"13.4"}}},"modal":{"compat_features":["css.selectors.modal"],"description":"The :modal pseudo-class selects elements that put other elements into a non-interactive state, such as a fullscreen element or a <dialog> element used with showModal().","description_html":"The <code>:modal</code> pseudo-class selects elements that put other elements into a non-interactive state, such as a fullscreen element or a <code>&#x3C;dialog></code> element used with <code>showModal()</code>.","name":":modal","spec":"https://drafts.csswg.org/selectors-4/#modal-state","status":{"baseline":"low","baseline_low_date":"2022-09-02","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"103","firefox_android":"103","safari":"15.6","safari_ios":"15.6"}}},"modulepreload":{"caniuse":"link-rel-modulepreload","compat_features":["html.elements.link.rel.modulepreload"],"description":"The rel=\"modulepreload\" attribute for the <link> HTML element indicates that a module script should be fetched, parsed, and compiled preemptively, and stored for later execution.","description_html":"The <code>rel=\"modulepreload\"</code> attribute for the <code>&#x3C;link></code> HTML element indicates that a module script should be fetched, parsed, and compiled preemptively, and stored for later execution.","name":"<link rel=\"modulepreload\">","spec":"https://html.spec.whatwg.org/multipage/links.html#link-type-modulepreload","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"66","chrome_android":"66","edge":"79","firefox":"115","firefox_android":"115","safari":"17","safari_ios":"17"}}},"motion-path":{"caniuse":"css-motion-paths","compat_features":["css.properties.offset","css.properties.offset-anchor","css.properties.offset-distance","css.properties.offset-path","css.properties.offset-path.path","css.properties.offset-rotate"],"description":"The offset CSS property animates an element along a defined motion path.","description_html":"The <code>offset</code> CSS property animates an element along a defined motion path.","name":"Motion path","spec":"https://drafts.fxtf.org/motion-1/","status":{"baseline":"low","baseline_low_date":"2023-08-21","support":{"chrome":"116","chrome_android":"116","edge":"116","firefox":"72","firefox_android":"79","safari":"16","safari_ios":"16"}}},"navigation":{"compat_features":["api.NavigateEvent","api.NavigateEvent.NavigateEvent","api.NavigateEvent.destination","api.NavigateEvent.downloadRequest","api.NavigateEvent.formData","api.NavigateEvent.hashChange","api.NavigateEvent.info","api.NavigateEvent.navigationType","api.NavigateEvent.signal","api.NavigateEvent.userInitiated","api.Navigation","api.Navigation.back","api.Navigation.canGoBack","api.Navigation.canGoForward","api.Navigation.currentEntry","api.Navigation.currententrychange_event","api.Navigation.entries","api.Navigation.forward","api.Navigation.navigate","api.Navigation.navigate_event","api.Navigation.navigateerror_event","api.Navigation.navigatesuccess_event","api.Navigation.reload","api.Navigation.transition","api.Navigation.traverseTo","api.Navigation.updateCurrentEntry","api.NavigationCurrentEntryChangeEvent","api.NavigationCurrentEntryChangeEvent.NavigationCurrentEntryChangeEvent","api.NavigationCurrentEntryChangeEvent.from","api.NavigationCurrentEntryChangeEvent.navigationType","api.NavigationDestination","api.NavigationDestination.getState","api.NavigationDestination.id","api.NavigationDestination.index","api.NavigationDestination.key","api.NavigationDestination.sameDocument","api.NavigationDestination.url","api.NavigationHistoryEntry","api.NavigationHistoryEntry.dispose_event","api.NavigationHistoryEntry.getState","api.NavigationHistoryEntry.id","api.NavigationHistoryEntry.index","api.NavigationHistoryEntry.key","api.NavigationHistoryEntry.sameDocument","api.NavigationHistoryEntry.url","api.NavigationTransition","api.NavigationTransition.finished","api.NavigationTransition.from","api.NavigationTransition.navigationType","api.Window.navigation"],"description":"The navigation API provides mechanisms to initiate, intercept, and manage browser navigation actions.","description_html":"The <code>navigation</code> API provides mechanisms to initiate, intercept, and manage browser navigation actions.","name":"Navigation API","spec":"https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-api","status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102"}}},"nesting":{"caniuse":"css-nesting","compat_features":["api.CSSStyleRule.cssRules","api.CSSStyleRule.deleteRule","api.CSSStyleRule.insertRule","css.selectors.nesting"],"description":"CSS nesting allows for shorter selectors, easier reading, and more modularity by nesting rules inside others.","description_html":"CSS nesting allows for shorter selectors, easier reading, and more modularity by nesting rules inside others.","name":"Nesting","spec":"https://drafts.csswg.org/css-nesting-1/","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"117","firefox_android":"117","safari":"17.2","safari_ios":"17.2"}}},"notifications":{"caniuse":"notifications","description":"The notifications API sends system notifications to the user, often even when the page or browser is not the foreground application.","description_html":"The notifications API sends system notifications to the user, often even when the page or browser is not the foreground application.","name":"Notifications","spec":"https://notifications.spec.whatwg.org/","status":{"baseline":false,"support":{"chrome":"20","chrome_android":"42","edge":"14","firefox":"22","firefox_android":"22","safari":"6"}}},"offscreen-canvas":{"caniuse":"offscreencanvas","compat_features":["api.HTMLCanvasElement.transferControlToOffscreen","api.OffscreenCanvas","api.OffscreenCanvas.convertToBlob","api.OffscreenCanvas.getContext","api.OffscreenCanvas.getContext.2d_context","api.OffscreenCanvas.getContext.bitmaprenderer_context","api.OffscreenCanvas.height","api.OffscreenCanvas.OffscreenCanvas","api.OffscreenCanvas.transferToImageBitmap","api.OffscreenCanvas.width","api.OffscreenCanvasRenderingContext2D","api.OffscreenCanvasRenderingContext2D.arc","api.OffscreenCanvasRenderingContext2D.arcTo","api.OffscreenCanvasRenderingContext2D.beginPath","api.OffscreenCanvasRenderingContext2D.bezierCurveTo","api.OffscreenCanvasRenderingContext2D.canvas","api.OffscreenCanvasRenderingContext2D.clearRect","api.OffscreenCanvasRenderingContext2D.clip","api.OffscreenCanvasRenderingContext2D.closePath","api.OffscreenCanvasRenderingContext2D.createImageData","api.OffscreenCanvasRenderingContext2D.createLinearGradient","api.OffscreenCanvasRenderingContext2D.createPattern","api.OffscreenCanvasRenderingContext2D.createRadialGradient","api.OffscreenCanvasRenderingContext2D.direction","api.OffscreenCanvasRenderingContext2D.drawImage","api.OffscreenCanvasRenderingContext2D.ellipse","api.OffscreenCanvasRenderingContext2D.fill","api.OffscreenCanvasRenderingContext2D.fillRect","api.OffscreenCanvasRenderingContext2D.fillStyle","api.OffscreenCanvasRenderingContext2D.fillText","api.OffscreenCanvasRenderingContext2D.font","api.OffscreenCanvasRenderingContext2D.getImageData","api.OffscreenCanvasRenderingContext2D.getLineDash","api.OffscreenCanvasRenderingContext2D.getTransform","api.OffscreenCanvasRenderingContext2D.globalAlpha","api.OffscreenCanvasRenderingContext2D.globalCompositeOperation","api.OffscreenCanvasRenderingContext2D.imageSmoothingEnabled","api.OffscreenCanvasRenderingContext2D.isPointInPath","api.OffscreenCanvasRenderingContext2D.isPointInStroke","api.OffscreenCanvasRenderingContext2D.lineCap","api.OffscreenCanvasRenderingContext2D.lineDashOffset","api.OffscreenCanvasRenderingContext2D.lineJoin","api.OffscreenCanvasRenderingContext2D.lineTo","api.OffscreenCanvasRenderingContext2D.lineWidth","api.OffscreenCanvasRenderingContext2D.measureText","api.OffscreenCanvasRenderingContext2D.miterLimit","api.OffscreenCanvasRenderingContext2D.moveTo","api.OffscreenCanvasRenderingContext2D.putImageData","api.OffscreenCanvasRenderingContext2D.quadraticCurveTo","api.OffscreenCanvasRenderingContext2D.rect","api.OffscreenCanvasRenderingContext2D.resetTransform","api.OffscreenCanvasRenderingContext2D.restore","api.OffscreenCanvasRenderingContext2D.rotate","api.OffscreenCanvasRenderingContext2D.save","api.OffscreenCanvasRenderingContext2D.scale","api.OffscreenCanvasRenderingContext2D.setLineDash","api.OffscreenCanvasRenderingContext2D.setTransform","api.OffscreenCanvasRenderingContext2D.shadowBlur","api.OffscreenCanvasRenderingContext2D.shadowColor","api.OffscreenCanvasRenderingContext2D.shadowOffsetX","api.OffscreenCanvasRenderingContext2D.shadowOffsetY","api.OffscreenCanvasRenderingContext2D.stroke","api.OffscreenCanvasRenderingContext2D.strokeRect","api.OffscreenCanvasRenderingContext2D.strokeStyle","api.OffscreenCanvasRenderingContext2D.strokeText","api.OffscreenCanvasRenderingContext2D.textAlign","api.OffscreenCanvasRenderingContext2D.textBaseline","api.OffscreenCanvasRenderingContext2D.transform","api.OffscreenCanvasRenderingContext2D.translate"],"description":"The OffscreenCanvas API provides a canvas that can be drawn to off screen, with no dependencies on the DOM, which can be used to run heavy rendering operations inside a worker context.","description_html":"The <code>OffscreenCanvas</code> API provides a canvas that can be drawn to off screen, with no dependencies on the DOM, which can be used to run heavy rendering operations inside a worker context.","name":"Offscreen canvas","spec":"https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"105","firefox_android":"105","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1624"},"oklab":{"compat_features":["css.types.color.oklab","css.types.color.oklch"],"description":"The Oklab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is, aiming to match how humans perceive colors. Oklch is a variant of Oklab with polar coordinates. These color spaces can be used with the CSS color(), oklab(), and oklch() functions.","description_html":"The Oklab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is, aiming to match how humans perceive colors. Oklch is a variant of Oklab with polar coordinates. These color spaces can be used with the CSS <code>color()</code>, <code>oklab()</code>, and <code>oklch()</code> functions.","name":"Oklab and Oklch","spec":"https://drafts.csswg.org/css-color-4/#ok-lab","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"15.4","safari_ios":"15.4"}}},"origin-private-file-system":{"compat_features":["api.FileSystemDirectoryHandle","api.FileSystemDirectoryHandle.entries","api.FileSystemDirectoryHandle.getDirectoryHandle","api.FileSystemDirectoryHandle.getFileHandle","api.FileSystemDirectoryHandle.keys","api.FileSystemDirectoryHandle.removeEntry","api.FileSystemDirectoryHandle.resolve","api.FileSystemDirectoryHandle.values","api.FileSystemFileHandle","api.FileSystemFileHandle.createSyncAccessHandle","api.FileSystemFileHandle.getFile","api.FileSystemHandle","api.FileSystemHandle.isSameEntry","api.FileSystemHandle.kind","api.FileSystemHandle.name","api.FileSystemSyncAccessHandle","api.FileSystemSyncAccessHandle.close","api.FileSystemSyncAccessHandle.flush","api.FileSystemSyncAccessHandle.getSize","api.FileSystemSyncAccessHandle.read","api.FileSystemSyncAccessHandle.truncate","api.FileSystemSyncAccessHandle.write","api.StorageManager.getDirectory"],"description":"The navigator.storage.getDirectory() method returns a FileSystemDirectoryHandle that is restricted to a specific origin and invisible to the user's actual file system for faster file-based applications, such as SQLite databases.","description_html":"The <code>navigator.storage.getDirectory()</code> method returns a <code>FileSystemDirectoryHandle</code> that is restricted to a specific origin and invisible to the user's actual file system for faster file-based applications, such as SQLite databases.","name":"Origin private file system","spec":"https://fs.spec.whatwg.org/#origin-private-file-system","status":{"baseline":"low","baseline_low_date":"2023-03-14","support":{"chrome":"102","chrome_android":"109","edge":"102","firefox":"111","firefox_android":"111","safari":"15.2","safari_ios":"15.2"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3428"},"overflow-shorthand":{"caniuse":"css-overflow","compat_features":["css.properties.overflow","css.properties.overflow.clip","css.properties.overflow.multiple_keywords","css.properties.overflow-x","css.properties.overflow-x.clip","css.properties.overflow-y","css.properties.overflow-y.clip","css.types.overflow","css.types.overflow.clip"],"description":"The overflow CSS property sets the behavior for when content doesn't fit in an element.","description_html":"The <code>overflow</code> CSS property sets the behavior for when content doesn't fit in an element.","name":"overflow","spec":"https://drafts.csswg.org/css-overflow-3/#propdef-overflow","status":{"baseline":"low","baseline_low_date":"2022-09-12","support":{"chrome":"90","chrome_android":"90","edge":"90","firefox":"81","firefox_android":"81","safari":"16","safari_ios":"16"}}},"page-breaks":{"caniuse":"css-page-break","compat_features":["css.properties.break-after","css.properties.break-after.paged_context","css.properties.break-after.paged_context.page","css.properties.break-before","css.properties.break-before.paged_context","css.properties.break-before.paged_context.page","css.properties.break-inside","css.properties.break-inside.paged_context","css.properties.page-break-after","css.properties.page-break-after.avoid","css.properties.page-break-before","css.properties.page-break-before.avoid","css.properties.page-break-inside","css.properties.page-break-inside.avoid"],"description":"The break-after, break-before, break-inside CSS properties (along with page-break- aliases) control where printed pages start and end. Also known as pagination or page breaking.","description_html":"The <code>break-after</code>, <code>break-before</code>, <code>break-inside</code> CSS properties (along with <code>page-break-</code> aliases) control where printed pages start and end. Also known as pagination or page breaking.","name":"Page breaks","spec":"https://drafts.csswg.org/css-break-3/#breaking-controls","status":{"baseline":false,"support":{"chrome":"50","chrome_android":"50","edge":"12"}}},"parse-html-unsafe":{"compat_features":["api.Document.parseHTMLUnsafe_static","api.Element.setHTMLUnsafe","api.ShadowRoot.setHTMLUnsafe"],"description":"The Document.parseHTMLUnsafe() static method parses HTML into a DOM tree, while the setHTMLUnsafe() method of Element and ShadowRoot parses and inserts HTML into an existing tree. No sanitization applies to these methods, so never call them with user-provided HTML strings.","description_html":"The <code>Document.parseHTMLUnsafe()</code> static method parses HTML into a DOM tree, while the <code>setHTMLUnsafe()</code> method of <code>Element</code> and <code>ShadowRoot</code> parses and inserts HTML into an existing tree. No sanitization applies to these methods, so never call them with user-provided HTML strings.","name":"Unsanitized HTML parsing methods","spec":"https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#unsafe-html-parsing-methods","status":{"baseline":"low","baseline_low_date":"2024-04-18","support":{"chrome":"124","chrome_android":"124","edge":"124","firefox":"123","firefox_android":"123","safari":"17.4","safari_ios":"17.4"}}},"permissions":{"caniuse":"permissions-api","compat_features":["api.Navigator.permissions","api.PermissionStatus","api.PermissionStatus.state","api.Permissions","api.Permissions.query"],"description":"The navigator.permissions API checks whether a permission, such as access to geolocation data, has been granted.","description_html":"The <code>navigator.permissions</code> API checks whether a permission, such as access to geolocation data, has been granted.","name":"Permissions","spec":"https://w3c.github.io/permissions/","status":{"baseline":"low","baseline_low_date":"2022-09-12","support":{"chrome":"44","chrome_android":"44","edge":"79","firefox":"46","firefox_android":"46","safari":"16","safari_ios":"16"}}},"picture-in-picture":{"caniuse":"picture-in-picture","compat_features":["api.Document.exitPictureInPicture","api.Document.pictureInPictureElement","api.Document.pictureInPictureEnabled","api.HTMLVideoElement.disablePictureInPicture","api.HTMLVideoElement.enterpictureinpicture_event","api.HTMLVideoElement.leavepictureinpicture_event","api.HTMLVideoElement.requestPictureInPicture","api.PictureInPictureWindow","api.PictureInPictureWindow.height","api.PictureInPictureWindow.resize_event","api.PictureInPictureWindow.width","api.ShadowRoot.pictureInPictureElement"],"description":"The picture-in-picture API allow websites to create a floating, always-on-top video window. Also known as PiP or pop-out video.","description_html":"The picture-in-picture API allow websites to create a floating, always-on-top video window. Also known as PiP or pop-out video.","name":"Picture-in-picture (video)","spec":"https://w3c.github.io/picture-in-picture/","status":{"baseline":false,"support":{"chrome":"69","chrome_android":"105","edge":"79","safari":"13.1","safari_ios":"13.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2444"},"pointer-lock":{"caniuse":"pointerlock","compat_features":["api.Document.exitPointerLock","api.Document.pointerlockchange_event","api.Document.pointerLockElement","api.Document.pointerlockerror_event","api.Element.requestPointerLock","api.MouseEvent.movementX","api.MouseEvent.movementY"],"description":"Provides access to raw mouse movement by locking the target of mouse events to a single element and hiding the mouse cursor.","description_html":"Provides access to raw mouse movement by locking the target of mouse events to a single element and hiding the mouse cursor.","name":"Pointer lock","spec":"https://w3c.github.io/pointerlock/","status":{"baseline":false,"support":{"chrome":"37","chrome_android":"37","edge":"13","firefox":"50","firefox_android":"50","safari":"10.1"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/417"},"popover":{"compat_features":["api.HTMLButtonElement.popoverTargetAction","api.HTMLButtonElement.popoverTargetElement","api.HTMLElement.beforetoggle_event","api.HTMLElement.hidePopover","api.HTMLElement.popover","api.HTMLElement.showPopover","api.HTMLElement.toggle_event","api.HTMLElement.togglePopover","api.HTMLInputElement.popoverTargetAction","api.HTMLInputElement.popoverTargetElement","api.ToggleEvent","api.ToggleEvent.ToggleEvent","api.ToggleEvent.newState","api.ToggleEvent.oldState","css.selectors.backdrop.popover","css.selectors.popover-open","html.global_attributes.popover","html.elements.button.popovertarget","html.elements.button.popovertargetaction","html.elements.input.popovertarget","html.elements.input.popovertargetaction"],"description":"The popover HTML attribute creates an overlay to display content on top of other page content. Popovers can be shown declaratively using HTML, or using the showPopover() method.","description_html":"The <code>popover</code> HTML attribute creates an overlay to display content on top of other page content. Popovers can be shown declaratively using HTML, or using the <code>showPopover()</code> method.","name":"Popover","spec":"https://html.spec.whatwg.org/multipage/popover.html","status":{"baseline":"low","baseline_low_date":"2024-04-16","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"125","firefox_android":"125","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4191"},"prefers-color-scheme":{"compat_features":["css.at-rules.media.prefers-color-scheme"],"description":"The prefers-color-scheme CSS media query detects the requested color scheme, light or dark.","description_html":"The <code>prefers-color-scheme</code> CSS media query detects the requested color scheme, light or dark.","name":"prefers-color-scheme","spec":"https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"67","firefox_android":"67","safari":"12.1","safari_ios":"13"}}},"preloading-responsive-images":{"compat_features":["api.HTMLLinkElement.imageSizes","api.HTMLLinkElement.imageSrcset","html.elements.link.imagesizes","html.elements.link.imagesrcset"],"description":"The imagesrcset and imagesizes attributes with the rel=\"preload\" attribute for the <link> HTML element starts fetching responsive images before they're found in the body of the document.","description_html":"The <code>imagesrcset</code> and <code>imagesizes</code> attributes with the <code>rel=\"preload\"</code> attribute for the <code>&#x3C;link></code> HTML element starts fetching responsive images before they're found in the body of the document.","name":"Preloading responsive images","spec":"https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"73","chrome_android":"73","edge":"79","firefox":"78","firefox_android":"79","safari":"17.2","safari_ios":"17.2"}}},"preserves-pitch":{"compat_features":["api.HTMLMediaElement.preservesPitch"],"description":"The preservesPitch property for <audio> or <video> adjusts the pitch of audio to sound more natural when the playback rate is faster or slower than the default.","description_html":"The <code>preservesPitch</code> property for <code>&#x3C;audio></code> or <code>&#x3C;video></code> adjusts the pitch of audio to sound more natural when the playback rate is faster or slower than the default.","name":"preservesPitch","spec":"https://html.spec.whatwg.org/multipage/media.html#dom-media-preservespitch-dev","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"86","chrome_android":"86","edge":"86","firefox":"101","firefox_android":"101","safari":"17.2","safari_ios":"17.2"}}},"print":{"compat_features":["api.Window.print"],"description":"The window.print() method opens the browser's print dialog.","description_html":"The <code>window.print()</code> method opens the browser's print dialog.","name":"window.print()","spec":"https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#printing","status":{"baseline":"low","baseline_low_date":"2023-06-06","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"114","safari":"1.1","safari_ios":"1"}}},"print-events":{"caniuse":"beforeafterprint","compat_features":["api.Window.afterprint_event","api.Window.beforeprint_event"],"description":"An alternative to @media print queries, the beforeprint and afterprint events allow you to change the page for printing and and restore the page after printing.","description_html":"An alternative to <code>@media print</code> queries, the <code>beforeprint</code> and <code>afterprint</code> events allow you to change the page for printing and and restore the page after printing.","name":"Print events","spec":["https://html.spec.whatwg.org/multipage/indices.html#event-afterprint","https://html.spec.whatwg.org/multipage/indices.html#event-beforeprint"],"status":{"baseline":"high","baseline_high_date":"2022-03-19","baseline_low_date":"2019-09-19","support":{"chrome":"63","chrome_android":"63","edge":"12","firefox":"6","firefox_android":"6","safari":"13","safari_ios":"13"}}},"promise":{"alias":"promises","caniuse":"promises","compat_features":["javascript.builtins.Promise","javascript.builtins.Promise.@@species","javascript.builtins.Promise.Promise","javascript.builtins.Promise.all","javascript.builtins.Promise.catch","javascript.builtins.Promise.race","javascript.builtins.Promise.reject","javascript.builtins.Promise.resolve","javascript.builtins.Promise.then"],"description":"A promise represents an asynchronous operation which eventually succeeds or fails.","description_html":"A promise represents an asynchronous operation which eventually succeeds or fails.","name":"Promise (initial support)","spec":["https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-objects","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-get-promise-@@species","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-constructor","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.all","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.prototype.catch","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.race","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.reject","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.resolve","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.prototype.then"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"32","chrome_android":"32","edge":"12","firefox":"29","firefox_android":"29","safari":"8","safari_ios":"8"}}},"promise-allsettled":{"compat_features":["javascript.builtins.Promise.allSettled"],"description":"The Promise.allSettled() static method waits for an array of promises to settle (resolve or reject).","description_html":"The <code>Promise.allSettled()</code> static method waits for an array of promises to settle (resolve or reject).","name":"Promise.allSettled()","spec":"https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.allsettled","status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"71","firefox_android":"79","safari":"13","safari_ios":"13"}}},"promise-any":{"compat_features":["javascript.builtins.Promise.any"],"description":"The Promise.any() static method returns a promise that fulfills as soon as the first of an iterable of promises fulfills, with that promise's value. Otherwise, it rejects with an AggregateError when all of the promises have rejected.","description_html":"The <code>Promise.any()</code> static method returns a promise that fulfills as soon as the first of an iterable of promises fulfills, with that promise's value. Otherwise, it rejects with an <code>AggregateError</code> when all of the promises have rejected.","name":"Promise.any()","spec":"https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.any","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"85","chrome_android":"85","edge":"85","firefox":"79","firefox_android":"79","safari":"14","safari_ios":"14"}}},"promise-finally":{"caniuse":"promise-finally","compat_features":["javascript.builtins.Promise.finally"],"description":"The promise finally() method executes a function when the promise settles (resolves or rejects).","description_html":"The promise <code>finally()</code> method executes a function when the promise settles (resolves or rejects).","name":"Promise finally()","spec":"https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.prototype.finally","status":{"baseline":"high","baseline_high_date":"2020-10-12","baseline_low_date":"2018-04-12","support":{"chrome":"63","chrome_android":"63","edge":"18","firefox":"58","firefox_android":"58","safari":"11.1","safari_ios":"11.3"}}},"promise-withresolvers":{"compat_features":["javascript.builtins.Promise.withResolvers"],"description":"The Promise.withResolvers() static method is an alternative to the Promise() constructor that returns both the promise and resolution functions. You can use this to access resolve and reject outside the scope of the executor function.","description_html":"The <code>Promise.withResolvers()</code> static method is an alternative to the <code>Promise()</code> constructor that returns both the promise and resolution functions. You can use this to access <code>resolve</code> and <code>reject</code> outside the scope of the executor function.","name":"Promise.withResolvers()","spec":"https://tc39.es/proposal-promise-with-resolvers/#sec-promise.withResolvers","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"119","chrome_android":"119","edge":"119","firefox":"121","firefox_android":"121","safari":"17.4","safari_ios":"17.4"}}},"push":{"caniuse":"push-api","compat_features":["api.PushEvent","api.PushEvent.PushEvent","api.PushEvent.data","api.PushManager","api.PushManager.getSubscription","api.PushManager.permissionState","api.PushMessageData","api.PushMessageData.arrayBuffer","api.PushMessageData.blob","api.PushMessageData.json","api.PushMessageData.text","api.PushSubscription","api.PushSubscription.endpoint","api.PushSubscription.getKey","api.PushSubscription.toJSON","api.PushSubscription.unsubscribe","api.ServiceWorkerRegistration.pushManager","api.ServiceWorkerGlobalScope.push_event"],"description":"The Push API subscribes to and receives server-initiated messages. Subscribers receive pushed messages in the background, even after periods inactive or offline.","description_html":"The Push API subscribes to and receives server-initiated messages. Subscribers receive pushed messages in the background, even after periods inactive or offline.","name":"Push messages","spec":"https://w3c.github.io/push-api/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"50","chrome_android":"50","edge":"17","firefox":"44","firefox_android":"48","safari":"16","safari_ios":"16.4"}}},"read-write-pseudos":{"alias":"read-write-pseudo-classes","caniuse":"css-read-only-write","compat_features":["css.selectors.read-only","css.selectors.read-write"],"description":"The :read-only and :read-write CSS pseudo-classes match elements that are read-only or read-write, respectively. For example, :read-only matches <input> and <textarea> elements with the readonly attribute.","description_html":"The <code>:read-only</code> and <code>:read-write</code> CSS pseudo-classes match elements that are read-only or read-write, respectively. For example, <code>:read-only</code> matches <code>&#x3C;input></code> and <code>&#x3C;textarea></code> elements with the <code>readonly</code> attribute.","name":":read-only and :read-write","spec":["https://html.spec.whatwg.org/multipage/semantics-other.html#selector-read-only","https://drafts.csswg.org/selectors-4/#rw-pseudos"],"status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"1","chrome_android":"18","edge":"13","firefox":"78","firefox_android":"79","safari":"4","safari_ios":"3.2"}}},"registered-custom-properties":{"compat_features":["api.CSS.registerProperty_static","api.CSSPropertyRule","api.CSSPropertyRule.inherits","api.CSSPropertyRule.initialValue","api.CSSPropertyRule.name","api.CSSPropertyRule.syntax","css.at-rules.property","css.at-rules.property.inherits","css.at-rules.property.initial-value","css.at-rules.property.syntax"],"description":"The CSS.registerProperty() static method and the @property CSS at-rule register custom properties for which types and behaviors can be defined.","description_html":"The <code>CSS.registerProperty()</code> static method and the <code>@property</code> CSS at-rule register custom properties for which types and behaviors can be defined.","name":"Registered custom properties","spec":"https://drafts.css-houdini.org/css-properties-values-api-1/","status":{"baseline":false,"support":{"chrome":"85","chrome_android":"85","edge":"85","safari":"16.4","safari_ios":"16.4"}}},"relative-color":{"caniuse":"css-relative-colors","compat_features":["css.types.color.lab.relative_syntax","css.types.color.oklab.relative_syntax"],"description":"The from keyword for color functions (color(), hsl(), oklch(), etc.) creates a new color based on a given color by modifying the values of the input color. Also known as relative color syntax (RCS).","description_html":"The <code>from</code> keyword for color functions (<code>color()</code>, <code>hsl()</code>, <code>oklch()</code>, etc.) creates a new color based on a given color by modifying the values of the input color. Also known as relative color syntax (RCS).","name":"Relative colors","spec":"https://drafts.csswg.org/css-color-5/#relative-colors","status":{"baseline":false,"support":{"chrome":"119","chrome_android":"119","edge":"119","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4632"},"request-animation-frame":{"caniuse":"requestanimationframe","compat_features":["api.Window.cancelAnimationFrame","api.Window.requestAnimationFrame"],"description":"The requestAnimationFrame() method schedules a function that runs before the next repaint. You can use it to animate content with JavaScript.","description_html":"The <code>requestAnimationFrame()</code> method schedules a function that runs before the next repaint. You can use it to animate content with JavaScript.","name":"requestAnimationFrame()","spec":"https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"24","chrome_android":"25","edge":"12","firefox":"23","firefox_android":"23","safari":"7","safari_ios":"7"}}},"request-animation-frame-workers":{"compat_features":["api.DedicatedWorkerGlobalScope.cancelAnimationFrame","api.DedicatedWorkerGlobalScope.requestAnimationFrame"],"description":"The requestAnimationFrame() method in workers schedules a function that runs before the next repaint. Together with offscreen canvas, you can animate content from a worker.","description_html":"The <code>requestAnimationFrame()</code> method in workers schedules a function that runs before the next repaint. Together with offscreen canvas, you can animate content from a worker.","name":"requestAnimationFrame() in workers","spec":"https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"99","firefox_android":"99","safari":"16.4","safari_ios":"16.4"}}},"request-video-frame-callback":{"compat_features":["api.HTMLVideoElement.requestVideoFrameCallback","api.HTMLVideoElement.cancelVideoFrameCallback"],"description":"The requestVideoFrameCallback() method for <video> schedules a function that runs with the next video frame. It is similar to requestAnimationFrame(), but for video.","description_html":"The <code>requestVideoFrameCallback()</code> method for <code>&#x3C;video></code> schedules a function that runs with the next video frame. It is similar to <code>requestAnimationFrame()</code>, but for video.","name":"requestVideoFrameCallback()","spec":"https://wicg.github.io/video-rvfc/","status":{"baseline":false,"support":{"chrome":"83","chrome_android":"83","edge":"83","safari":"15.4","safari_ios":"15.4"}}},"resource-size":{"compat_features":["api.PerformanceResourceTiming.transferSize","api.PerformanceResourceTiming.decodedBodySize","api.PerformanceResourceTiming.encodedBodySize"],"description":"The decodedSize, encodedSize, and transferSize properties of the PerformanceResourceTiming API reports the size of resources loaded.","description_html":"The <code>decodedSize</code>, <code>encodedSize</code>, and <code>transferSize</code> properties of the <code>PerformanceResourceTiming</code> API reports the size of resources loaded.","name":"Resource size","spec":["https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-decodedbodysize","https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-encodedbodysize","https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-transfersize"],"status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"54","chrome_android":"54","edge":"17","firefox":"45","firefox_android":"45","safari":"16.4","safari_ios":"16.4"}}},"resource-timing":{"caniuse":"resource-timing","compat_features":["api.PerformanceResourceTiming","api.PerformanceResourceTiming.connectEnd","api.PerformanceResourceTiming.connectStart","api.PerformanceResourceTiming.domainLookupEnd","api.PerformanceResourceTiming.domainLookupStart","api.PerformanceResourceTiming.fetchStart","api.PerformanceResourceTiming.initiatorType","api.PerformanceResourceTiming.redirectEnd","api.PerformanceResourceTiming.redirectStart","api.PerformanceResourceTiming.requestStart","api.PerformanceResourceTiming.responseEnd","api.PerformanceResourceTiming.responseStart"],"description":"PerformanceResourceTiming entries report when network events happen while loading a resource, such as when connections start and end. You can use this information to measure loading times.","description_html":"<code>PerformanceResourceTiming</code> entries report when network events happen while loading a resource, such as when connections start and end. You can use this information to measure loading times.","name":"Resource timing (initial support)","spec":"https://w3c.github.io/resource-timing/","status":{"baseline":"high","baseline_high_date":"2020-03-19","baseline_low_date":"2017-09-19","support":{"chrome":"43","chrome_android":"43","edge":"12","firefox":"31","firefox_android":"31","safari":"11","safari_ios":"11"}}},"round-mod-rem":{"compat_features":["css.types.mod","css.types.rem","css.types.round"],"description":"The round(), mod(), and rem() CSS functions compute rounded values and the remainder after division.","description_html":"The <code>round()</code>, <code>mod()</code>, and <code>rem()</code> CSS functions compute rounded values and the remainder after division.","name":"round(), mod(), and rem()","spec":"https://drafts.csswg.org/css-values-4/#round-func","status":{"baseline":false,"support":{"chrome":"125","chrome_android":"125","firefox":"118","firefox_android":"118","safari":"15.4","safari_ios":"15.4"}}},"scheduler":{"compat_features":["api.Scheduler","api.Scheduler.postTask","api.TaskController","api.TaskController.TaskController","api.TaskController.setPriority","api.TaskPriorityChangeEvent","api.TaskPriorityChangeEvent.TaskPriorityChangeEvent","api.TaskPriorityChangeEvent.previousPriority","api.TaskSignal","api.TaskSignal.priority","api.scheduler"],"description":"The scheduler API provides a way to prioritize all tasks belonging to an application.","description_html":"The <code>scheduler</code> API provides a way to prioritize all tasks belonging to an application.","name":"Scheduler API","spec":"https://wicg.github.io/scheduling-apis/","status":{"baseline":false,"support":{"chrome":"94","chrome_android":"94","edge":"94"}}},"scope":{"compat_features":["api.CSSScopeRule","api.CSSScopeRule.end","api.CSSScopeRule.start","css.at-rules.scope"],"description":"The @scope CSS at-rule sets the scope for a group of rules.","description_html":"The <code>@scope</code> CSS at-rule sets the scope for a group of rules.","name":"@scope","spec":"https://drafts.csswg.org/css-cascade-6/#scope-atrule","status":{"baseline":false,"support":{"chrome":"118","chrome_android":"118","edge":"118","safari":"17.4","safari_ios":"17.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4212"},"screen-orientation":{"caniuse":"screen-orientation","compat_features":["api.Screen.orientation","api.ScreenOrientation","api.ScreenOrientation.angle","api.ScreenOrientation.change_event","api.ScreenOrientation.type"],"description":"The screen.orientation API gets information about the orientation of the viewport, such as landscape or portrait. With this API, you can adapt an application's layout or behavior in response to changes in orientation.","description_html":"The <code>screen.orientation</code> API gets information about the orientation of the viewport, such as landscape or portrait. With this API, you can adapt an application's layout or behavior in response to changes in orientation.","name":"Screen orientation","spec":"https://w3c.github.io/screen-orientation/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"38","chrome_android":"39","edge":"79","firefox":"43","firefox_android":"43","safari":"16.4","safari_ios":"16.4"}}},"screen-orientation-lock":{"compat_features":["api.ScreenOrientation.lock","api.ScreenOrientation.unlock"],"description":"The screen.orientation.lock() method prevents changes to the screen orientation, typically in fullscreen applications such as games. For example, while locked, rotating a phone to the side won't change the screen orientation from landscape to portrait.","description_html":"The <code>screen.orientation.lock()</code> method prevents changes to the screen orientation, typically in fullscreen applications such as games. For example, while locked, rotating a phone to the side won't change the screen orientation from landscape to portrait.","name":"Screen orientation lock","spec":"https://w3c.github.io/screen-orientation/#lock-method","status":{"baseline":false,"support":{"chrome_android":"38"}}},"scroll-driven-animations":{"compat_features":["api.ScrollTimeline","api.ScrollTimeline.axis","api.ScrollTimeline.ScrollTimeline","api.ScrollTimeline.source","api.ViewTimeline","api.ViewTimeline.endOffset","api.ViewTimeline.startOffset","api.ViewTimeline.subject","api.ViewTimeline.ViewTimeline","css.properties.animation-range","css.properties.animation-range-end","css.properties.animation-range-start","css.properties.animation-timeline","css.properties.animation-timeline.scroll","css.properties.animation-timeline.view","css.properties.scroll-timeline","css.properties.scroll-timeline-axis","css.properties.scroll-timeline-name","css.properties.view-timeline","css.properties.view-timeline-axis","css.properties.view-timeline-inset","css.properties.view-timeline-name"],"description":"CSS scroll-driven animations are a type of CSS animations that don't run over time, but are instead driven by the user's scroll position.","description_html":"CSS scroll-driven animations are a type of CSS animations that don't run over time, but are instead driven by the user's scroll position.","name":"Scroll-driven animations","spec":"https://drafts.csswg.org/scroll-animations-1/","status":{"baseline":false,"support":{"chrome":"115","chrome_android":"115","edge":"115"}}},"scroll-into-view":{"alias":"scrollintoview","caniuse":"scrollintoview","compat_features":["api.Element.scrollIntoView","api.Element.scrollIntoView.options_parameter"],"description":"The scrollIntoView() method scrolls an element's ancestor containers such that the element is visible to the user.","description_html":"The <code>scrollIntoView()</code> method scrolls an element's ancestor containers such that the element is visible to the user.","name":"scrollIntoView()","spec":"https://drafts.csswg.org/cssom-view-1/#dom-element-scrollintoview","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"61","chrome_android":"61","edge":"79","firefox":"36","firefox_android":"36","safari":"14","safari_ios":"14"}}},"scroll-snap":{"caniuse":"css-snappoints","compat_features":["css.properties.scroll-margin","css.properties.scroll-margin-block","css.properties.scroll-margin-block-end","css.properties.scroll-margin-block-start","css.properties.scroll-margin-bottom","css.properties.scroll-margin-inline","css.properties.scroll-margin-inline-end","css.properties.scroll-margin-inline-start","css.properties.scroll-margin-left","css.properties.scroll-margin-right","css.properties.scroll-margin-top","css.properties.scroll-padding","css.properties.scroll-padding-block","css.properties.scroll-padding-block-end","css.properties.scroll-padding-block-start","css.properties.scroll-padding-bottom","css.properties.scroll-padding-inline","css.properties.scroll-padding-inline-end","css.properties.scroll-padding-inline-start","css.properties.scroll-padding-left","css.properties.scroll-padding-right","css.properties.scroll-padding-top","css.properties.scroll-snap-align","css.properties.scroll-snap-stop","css.properties.scroll-snap-type"],"description":"CSS scroll snap controls the panning and scrolling behavior within a scroll container.","description_html":"CSS scroll snap controls the panning and scrolling behavior within a scroll container.","name":"Scroll snap","spec":"https://drafts.csswg.org/css-scroll-snap-1/","status":{"baseline":"high","baseline_high_date":"2022-01-09","baseline_low_date":"2019-07-09","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"68","firefox_android":"68","safari":"11","safari_ios":"11"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/499"},"scroll-to-text-fragment":{"caniuse":"url-scroll-to-text-fragment","description":"Text fragments are URL fragments on the form #:~:text=snippet and link to a snippet of text within a page. The browser may scroll, highlight, or otherwise bring that text to the reader's attention.","description_html":"Text fragments are URL fragments on the form <code>#:~:text=snippet</code> and link to a snippet of text within a page. The browser may scroll, highlight, or otherwise bring that text to the reader's attention.","name":"Scroll to text fragment","spec":"https://wicg.github.io/scroll-to-text-fragment/","status":{"baseline":false,"support":{"chrome":"81","chrome_android":"81","edge":"83","safari":"16.1","safari_ios":"16.1"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2901"},"scrollbar-color":{"compat_features":["css.properties.scrollbar-color"],"description":"The scrollbar-color CSS property sets the color of the scrollbar track and thumb.","description_html":"The <code>scrollbar-color</code> CSS property sets the color of the scrollbar track and thumb.","name":"scrollbar-color","spec":"https://drafts.csswg.org/css-scrollbars-1/#scrollbar-color","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"64","firefox_android":"64"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/763"},"scrollbar-gutter":{"compat_features":["css.properties.scrollbar-gutter"],"description":"The scrollbar-gutter CSS property reserves space for the scrollbar, preventing unwanted layout changes as the scrollbar appears and disappears.","description_html":"The <code>scrollbar-gutter</code> CSS property reserves space for the scrollbar, preventing unwanted layout changes as the scrollbar appears and disappears.","name":"scrollbar-gutter","spec":"https://drafts.csswg.org/css-overflow-3/#scrollbar-gutter-property","status":{"baseline":false,"support":{"chrome":"94","chrome_android":"94","edge":"94","firefox":"97","firefox_android":"97"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/671"},"scrollbar-width":{"compat_features":["css.properties.scrollbar-width"],"description":"The scrollbar-width CSS property sets the width of the scrollbar.","description_html":"The <code>scrollbar-width</code> CSS property sets the width of the scrollbar.","name":"scrollbar-width","spec":"https://drafts.csswg.org/css-scrollbars-1/#scrollbar-width","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"64","firefox_android":"64"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/680"},"scrollend":{"compat_features":["api.Document.scrollend_event","api.Element.scrollend_event"],"description":"The scrollend event fires when an element or document has finished scrolling.","description_html":"The <code>scrollend</code> event fires when an element or document has finished scrolling.","name":"scrollend","spec":"https://drafts.csswg.org/cssom-view-1/#eventdef-document-scrollend","status":{"baseline":false,"support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"109","firefox_android":"109"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4419"},"search":{"compat_features":["html.elements.search"],"description":"The <search> HTML element is a container that represents the parts of the web page with search functionality.","description_html":"The <code>&#x3C;search></code> HTML element is a container that represents the parts of the web page with search functionality.","name":"<search>","spec":"https://html.spec.whatwg.org/multipage/grouping-content.html#the-search-element","status":{"baseline":"low","baseline_low_date":"2023-10-13","support":{"chrome":"118","chrome_android":"118","edge":"118","firefox":"118","firefox_android":"118","safari":"17","safari_ios":"17"}}},"search-input-type":{"caniuse":"input-search","compat_features":["html.elements.input.type_search"],"description":"The <input> HTML element with the type=\"search\" attribute represents a text field for search queries, which might be styled differently by the browser.","description_html":"The <code>&#x3C;input></code> HTML element with the <code>type=\"search\"</code> attribute represents a text field for search queries, which might be styled differently by the browser.","name":"<input type=\"search\">","spec":"https://html.spec.whatwg.org/multipage/input.html#text-(type=text)-state-and-search-state-(type=search)","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"5","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"4.2"}}},"server-timing":{"caniuse":"server-timing","compat_features":["api.PerformanceResourceTiming.serverTiming","api.PerformanceServerTiming","api.PerformanceServerTiming.description","api.PerformanceServerTiming.duration","api.PerformanceServerTiming.name","api.PerformanceServerTiming.toJSON","http.headers.Server-Timing"],"description":"The serverTiming property of the PerformanceResourceTiming API contains server timing information about network requests.","description_html":"The <code>serverTiming</code> property of the <code>PerformanceResourceTiming</code> API contains server timing information about network requests.","name":"Server timing","spec":"https://w3c.github.io/server-timing/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"65","chrome_android":"65","edge":"79","firefox":"61","firefox_android":"61","safari":"16.4","safari_ios":"16.4"}}},"set":{"compat_features":["javascript.builtins.Set","javascript.builtins.Set.Set","javascript.builtins.Set.Set.iterable_allowed","javascript.builtins.Set.Set.null_allowed","javascript.builtins.Set.add","javascript.builtins.Set.clear","javascript.builtins.Set.delete","javascript.builtins.Set.entries","javascript.builtins.Set.forEach","javascript.builtins.Set.has","javascript.builtins.Set.key_equality_for_zeros","javascript.builtins.Set.keys","javascript.builtins.Set.size","javascript.builtins.Set.values","javascript.builtins.Set.@@iterator","javascript.builtins.Set.@@species"],"description":"Set objects store unique values of any type.","description_html":"Set objects store unique values of any type.","name":"Set (initial support)","spec":"https://tc39.es/ecma262/multipage/keyed-collections.html#sec-set-objects","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"13","firefox_android":"13","safari":"8","safari_ios":"8"}}},"set-methods":{"compat_features":["javascript.builtins.Set.difference","javascript.builtins.Set.intersection","javascript.builtins.Set.isDisjointFrom","javascript.builtins.Set.isSubsetOf","javascript.builtins.Set.isSupersetOf","javascript.builtins.Set.symmetricDifference","javascript.builtins.Set.union"],"description":"The difference(), intersection(), isDisjointFrom(), isSubsetOf(), isSupersetOf(), symmetricDifference(), and union() methods of the JavaScript Set object performs operations between two sets.","description_html":"The <code>difference()</code>, <code>intersection()</code>, <code>isDisjointFrom()</code>, <code>isSubsetOf()</code>, <code>isSupersetOf()</code>, <code>symmetricDifference()</code>, and <code>union()</code> methods of the JavaScript <code>Set</code> object performs operations between two sets.","name":"Set methods","spec":"https://tc39.es/proposal-set-methods/","status":{"baseline":false,"support":{"chrome":"122","chrome_android":"122","safari":"17","safari_ios":"17"}}},"shadow-dom":{"caniuse":"shadowdomv1","compat_features":["api.Element.attachShadow","api.Element.shadowRoot","api.Event.composed","api.Event.composedPath","api.Node.getRootNode","api.Node.isConnected","api.ShadowRoot","api.ShadowRoot.host","api.ShadowRoot.mode"],"description":"Shadow DOM allows you to attach encapsulated \"shadow\" DOM trees to elements. A shadow DOM tree is a separate component, isolated from the scripts and styles in other parts of the document. This is a part of Web Components.","description_html":"Shadow DOM allows you to attach encapsulated \"shadow\" DOM trees to elements. A shadow DOM tree is a separate component, isolated from the scripts and styles in other parts of the document. This is a part of Web Components.","name":"Shadow DOM","spec":"https://dom.spec.whatwg.org/#shadow-trees","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"54","chrome_android":"54","edge":"79","firefox":"63","firefox_android":"63","safari":"10.1","safari_ios":"10.3"}}},"show-picker-input":{"compat_features":["api.HTMLInputElement.showPicker","api.HTMLInputElement.showPicker.color_input","api.HTMLInputElement.showPicker.file_input","api.HTMLInputElement.showPicker.date_input","api.HTMLInputElement.showPicker.datetime_local_input"],"description":"The showPicker() method for <input> elements shows the user interface for picking a value. For example, for <input type=\"date\"> it shows the interface for picking a date.","description_html":"The <code>showPicker()</code> method for <code>&#x3C;input></code> elements shows the user interface for picking a value. For example, for <code>&#x3C;input type=\"date\"></code> it shows the interface for picking a date.","name":"showPicker() for <input>","spec":"https://html.spec.whatwg.org/multipage/input.html#dom-input-showpicker","status":{"baseline":false,"support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"101","firefox_android":"101","safari":"17.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4097"},"show-picker-select":{"compat_features":["api.HTMLSelectElement.showPicker"],"description":"The showPicker() method for <select> elements shows the dropdown menu or other user interface for picking one of the options.","description_html":"The <code>showPicker()</code> method for <code>&#x3C;select></code> elements shows the dropdown menu or other user interface for picking one of the options.","name":"showPicker() for <select>","spec":"https://html.spec.whatwg.org/multipage/input.html#dom-select-showpicker","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"122","firefox_android":"122"}}},"slot":{"compat_features":["api.Element.assignedSlot","api.Element.slot","api.HTMLSlotElement","api.HTMLSlotElement.assignedNodes","api.HTMLSlotElement.name","api.Text.assignedSlot","css.selectors.slotted","html.elements.slot","html.elements.slot.name","html.global_attributes.slot"],"description":"The <slot> HTML element is a placeholder inside a web component where consumers of the component can insert their own markup.","description_html":"The <code>&#x3C;slot></code> HTML element is a placeholder inside a web component where consumers of the component can insert their own markup.","name":"<slot>","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-slot-element","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"53","chrome_android":"53","edge":"79","firefox":"63","firefox_android":"63","safari":"10","safari_ios":"10"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1898"},"slot-assign":{"compat_features":["api.HTMLSlotElement.assign","api.ShadowRoot.slotAssignment"],"description":"The assign() method for <slot> elements assigns nodes to the slot, as an alternative to using the slot and name HTML attributes. The nodes must be children of a shadow host and the shadow root must be created with the slotAssignment set to \"manual\". Also known as manual slot assignment.","description_html":"The <code>assign()</code> method for <code>&#x3C;slot></code> elements assigns nodes to the slot, as an alternative to using the <code>slot</code> and <code>name</code> HTML attributes. The nodes must be children of a shadow host and the shadow root must be created with the <code>slotAssignment</code> set to \"manual\". Also known as manual slot assignment.","name":"Imperative slot assignment","spec":"https://html.spec.whatwg.org/multipage/scripting.html#dom-slot-assign","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"86","chrome_android":"86","edge":"86","firefox":"92","firefox_android":"92","safari":"16.4","safari_ios":"16.4"}}},"speech-synthesis":{"caniuse":"speech-synthesis","compat_features":["api.SpeechSynthesis","api.SpeechSynthesis.cancel","api.SpeechSynthesis.getVoices","api.SpeechSynthesis.pause","api.SpeechSynthesis.paused","api.SpeechSynthesis.pending","api.SpeechSynthesis.resume","api.SpeechSynthesis.speak","api.SpeechSynthesis.speaking","api.SpeechSynthesisEvent","api.SpeechSynthesisEvent.charIndex","api.SpeechSynthesisEvent.elapsedTime","api.SpeechSynthesisEvent.name","api.SpeechSynthesisEvent.utterance","api.SpeechSynthesisUtterance","api.SpeechSynthesisUtterance.SpeechSynthesisUtterance","api.SpeechSynthesisUtterance.end_event","api.SpeechSynthesisUtterance.error_event","api.SpeechSynthesisUtterance.lang","api.SpeechSynthesisUtterance.mark_event","api.SpeechSynthesisUtterance.pause_event","api.SpeechSynthesisUtterance.pitch","api.SpeechSynthesisUtterance.rate","api.SpeechSynthesisUtterance.resume_event","api.SpeechSynthesisUtterance.start_event","api.SpeechSynthesisUtterance.text","api.SpeechSynthesisUtterance.voice","api.SpeechSynthesisUtterance.volume","api.SpeechSynthesisVoice","api.SpeechSynthesisVoice.default","api.SpeechSynthesisVoice.lang","api.SpeechSynthesisVoice.localService","api.SpeechSynthesisVoice.name","api.SpeechSynthesisVoice.voiceURI","api.Window.speechSynthesis"],"description":"The SpeechSynthesis API converts text into audio using a synthetic voice.","description_html":"The <code>SpeechSynthesis</code> API converts text into audio using a synthetic voice.","name":"Speech synthesis","spec":"https://wicg.github.io/speech-api/#tts-section","status":{"baseline":"high","baseline_high_date":"2021-03-05","baseline_low_date":"2018-09-05","support":{"chrome":"33","chrome_android":"33","edge":"14","firefox":"49","firefox_android":"62","safari":"7","safari_ios":"7"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2483"},"spelling-grammar-error":{"compat_features":["css.selectors.grammar-error","css.selectors.spelling-error"],"description":"The ::spelling-error and ::grammar-error CSS pseudo-elements match text that is highlighted as misspelled and grammatically incorrect, respectively.","description_html":"The <code>::spelling-error</code> and <code>::grammar-error</code> CSS pseudo-elements match text that is highlighted as misspelled and grammatically incorrect, respectively.","name":"::spelling-error and ::grammar-error","spec":["https://drafts.csswg.org/css-pseudo-4/#selectordef-spelling-error","https://drafts.csswg.org/css-pseudo-4/#selectordef-grammar-error"],"status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","safari":"17.4","safari_ios":"17.4"}}},"stable-array-sort":{"compat_features":["javascript.builtins.Array.sort.stable_sorting"],"description":"Stable array sort() function","description_html":"Stable array sort() function","name":"Stable array sort","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.sort","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"70","chrome_android":"70","edge":"79","firefox":"3","firefox_android":"4","safari":"10.1","safari_ios":"10.3"}}},"starting-style":{"compat_features":["api.CSSStartingStyleRule","css.at-rules.starting-style"],"description":"The @starting-style CSS at-rule defines the starting values for properties that are transitioning when the target element's style is first updated.","description_html":"The <code>@starting-style</code> CSS at-rule defines the starting values for properties that are transitioning when the target element's style is first updated.","name":"@starting-style","spec":"https://drafts.csswg.org/css-transitions-2/#defining-before-change-style","status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117","safari":"17.5","safari_ios":"17.5"}}},"sticky-positioning":{"caniuse":"css-sticky","compat_features":["css.properties.position.position_sticky_table_elements","css.properties.position.sticky"],"description":"The position: sticky CSS declaration positions an element in the normal flow until it crosses a specified threshold, at which points it becomes fixed (stuck) at that position.","description_html":"The <code>position: sticky</code> CSS declaration positions an element in the normal flow until it crosses a specified threshold, at which points it becomes fixed (stuck) at that position.","name":"Sticky positioning","spec":"https://drafts.csswg.org/css-position-3/#stickypos-insets","status":{"baseline":"high","baseline_high_date":"2022-03-19","baseline_low_date":"2019-09-19","support":{"chrome":"56","chrome_android":"56","edge":"16","firefox":"59","firefox_android":"59","safari":"13","safari_ios":"13"}}},"storage-access":{"compat_features":["api.Document.hasStorageAccess","api.Document.requestStorageAccess"],"description":"The document.requestStorageAccess() method allows content in iframes to request storing and reading cookies and other site data, while the document.hasStorageAccess() method checks if such access is granted.","description_html":"The <code>document.requestStorageAccess()</code> method allows content in iframes to request storing and reading cookies and other site data, while the <code>document.hasStorageAccess()</code> method checks if such access is granted.","name":"Storage access","spec":"https://privacycg.github.io/storage-access/","status":{"baseline":"low","baseline_low_date":"2023-12-05","support":{"chrome":"119","chrome_android":"120","edge":"85","firefox":"65","firefox_android":"65","safari":"11.1","safari_ios":"11.3"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/3310","https://chromestatus.com/metrics/feature/timeline/popularity/3311"]},"storage-buckets":{"compat_features":["api.Navigator.storageBuckets","api.StorageBucket","api.StorageBucket.caches","api.StorageBucket.estimate","api.StorageBucket.expires","api.StorageBucket.getDirectory","api.StorageBucket.indexedDB","api.StorageBucket.name","api.StorageBucket.persist","api.StorageBucket.persisted","api.StorageBucket.setExpires","api.StorageBucketManager","api.StorageBucketManager.delete","api.StorageBucketManager.keys","api.StorageBucketManager.open","api.WorkerNavigator.storageBuckets"],"description":"The navigator.storageBuckets API allows you to organize locally stored data into groups called storage buckets. Each bucket can have different settings, allowing the browser to manage and delete buckets independently rather than applying the same treatment to all.","description_html":"The <code>navigator.storageBuckets</code> API allows you to organize locally stored data into groups called storage buckets. Each bucket can have different settings, allowing the browser to manage and delete buckets independently rather than applying the same treatment to all.","name":"Storage buckets","spec":"https://wicg.github.io/storage-buckets/","status":{"baseline":false,"support":{"chrome":"122","chrome_android":"122","edge":"122"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4378"},"streams":{"caniuse":"streams","compat_features":["api.ByteLengthQueuingStrategy","api.ByteLengthQueuingStrategy.ByteLengthQueuingStrategy","api.ByteLengthQueuingStrategy.highWaterMark","api.ByteLengthQueuingStrategy.size","api.CountQueuingStrategy","api.CountQueuingStrategy.CountQueuingStrategy","api.CountQueuingStrategy.highWaterMark","api.CountQueuingStrategy.size","api.ReadableStream","api.ReadableStream.ReadableStream","api.ReadableStream.cancel","api.ReadableStream.getReader","api.ReadableStream.locked","api.ReadableStream.pipeThrough","api.ReadableStream.pipeTo","api.ReadableStream.tee","api.WritableStream","api.WritableStream.WritableStream","api.WritableStream.abort","api.WritableStream.getWriter","api.WritableStream.locked","api.WritableStreamDefaultController","api.WritableStreamDefaultController.error","api.WritableStreamDefaultWriter","api.WritableStreamDefaultWriter.abort","api.WritableStreamDefaultWriter.close","api.WritableStreamDefaultWriter.closed","api.WritableStreamDefaultWriter.desiredSize","api.WritableStreamDefaultWriter.ready","api.WritableStreamDefaultWriter.releaseLock","api.WritableStreamDefaultWriter.write"],"description":"The streams API creates, composes, and consumes continuously generated data.","description_html":"The streams API creates, composes, and consumes continuously generated data.","name":"Streams","spec":"https://streams.spec.whatwg.org/","status":{"baseline":"low","baseline_low_date":"2022-06-28","support":{"chrome":"59","chrome_android":"59","edge":"79","firefox":"102","firefox_android":"102","safari":"14.1","safari_ios":"14.5"}}},"structured-clone":{"compat_features":["api.structuredClone"],"description":"The structuredClone() global method creates a deep copy of an object. Values that cannot be cloned can instead be transferred, making the original value no longer usable.","description_html":"The <code>structuredClone()</code> global method creates a deep copy of an object. Values that cannot be cloned can instead be transferred, making the original value no longer usable.","name":"structuredClone()","spec":"https://html.spec.whatwg.org/multipage/structured-data.html#structured-cloning","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"98","chrome_android":"98","edge":"98","firefox":"94","firefox_android":"94","safari":"15.4","safari_ios":"15.4"}}},"subgrid":{"caniuse":"css-subgrid","compat_features":["css.properties.grid-template-columns.subgrid","css.properties.grid-template-rows.subgrid"],"description":"The subgrid value for the grid-template-columns and grid-template-rows properties allows a grid item to inherit the grid definition of its parent grid container.","description_html":"The <code>subgrid</code> value for the <code>grid-template-columns</code> and <code>grid-template-rows</code> properties allows a grid item to inherit the grid definition of its parent grid container.","name":"Subgrid","spec":"https://drafts.csswg.org/css-grid-2/#subgrids","status":{"baseline":"low","baseline_low_date":"2023-09-15","support":{"chrome":"117","chrome_android":"117","edge":"117","firefox":"71","firefox_android":"79","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4680"},"svg2-script-html-equivalence":{"compat_features":["api.SVGScriptElement.async","api.SVGScriptElement.defer","svg.elements.script.async","svg.elements.script.defer","svg.elements.script.type.module"],"description":"The async and defer attributes of the <script> SVG element control the loading and execution of scripts in SVG documents.","description_html":"The <code>async</code> and <code>defer</code> attributes of the <code>&#x3C;script></code> SVG element control the loading and execution of scripts in SVG documents.","name":"SVG <script> async and defer","spec":"https://svgwg.org/svg2-draft/interact.html#ScriptElement","status":{"baseline":false,"support":{"firefox":"117","firefox_android":"117"}}},"tabindex":{"caniuse":"tabindex-attr","compat_features":["api.HTMLElement.tabIndex","html.global_attributes.tabindex"],"description":"The tabindex HTML attribute make an element focusable, and defines the element's relative ordering for sequential focus navigation.","description_html":"The <code>tabindex</code> HTML attribute make an element focusable, and defines the element's relative ordering for sequential focus navigation.","name":"tabindex","spec":"https://html.spec.whatwg.org/multipage/interaction.html#attr-tabindex","status":{"baseline":"high","baseline_high_date":"2021-04-02","baseline_low_date":"2018-10-02","support":{"chrome":"1","chrome_android":"18","edge":"18","firefox":"1.5","firefox_android":"4","safari":"4","safari_ios":"3.2"}}},"target-text":{"compat_features":["css.selectors.target-text"],"description":"The ::target-text pseudo-element allows you to style text highlighted by a URL text fragment such as #:~:text=snippet.","description_html":"The <code>::target-text</code> pseudo-element allows you to style text highlighted by a URL text fragment such as <code>#:~:text=snippet</code>.","name":"::target-text","spec":"https://drafts.csswg.org/css-pseudo-4/#selectordef-target-text","status":{"baseline":false,"support":{"chrome":"89","chrome_android":"89","edge":"89"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3780"},"template":{"compat_features":["api.HTMLTemplateElement","api.HTMLTemplateElement.content","html.elements.template"],"description":"The <template> HTML element holds HTML fragments which you can clone and insert into the document using JavaScript.","description_html":"The <code>&#x3C;template></code> HTML element holds HTML fragments which you can clone and insert into the document using JavaScript.","name":"<template>","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-template-element","status":{"baseline":"high","baseline_high_date":"2018-05-12","baseline_low_date":"2015-11-12","support":{"chrome":"26","chrome_android":"26","edge":"13","firefox":"22","firefox_android":"22","safari":"8","safari_ios":"8"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2769"},"temporal":{"caniuse":"temporal","compat_features":["javascript.builtins.Temporal","javascript.builtins.Temporal.Calendar","javascript.builtins.Temporal.Calendar.Calendar","javascript.builtins.Temporal.Calendar.dateAdd","javascript.builtins.Temporal.Calendar.dateFromFields","javascript.builtins.Temporal.Calendar.dateUntil","javascript.builtins.Temporal.Calendar.day","javascript.builtins.Temporal.Calendar.dayOfWeek","javascript.builtins.Temporal.Calendar.dayOfYear","javascript.builtins.Temporal.Calendar.daysInMonth","javascript.builtins.Temporal.Calendar.daysInWeek","javascript.builtins.Temporal.Calendar.daysInYear","javascript.builtins.Temporal.Calendar.era","javascript.builtins.Temporal.Calendar.eraYear","javascript.builtins.Temporal.Calendar.fields","javascript.builtins.Temporal.Calendar.from","javascript.builtins.Temporal.Calendar.id","javascript.builtins.Temporal.Calendar.inLeapYear","javascript.builtins.Temporal.Calendar.mergeFields","javascript.builtins.Temporal.Calendar.month","javascript.builtins.Temporal.Calendar.monthCode","javascript.builtins.Temporal.Calendar.monthDayFromFields","javascript.builtins.Temporal.Calendar.monthsInYear","javascript.builtins.Temporal.Calendar.toJSON","javascript.builtins.Temporal.Calendar.toString","javascript.builtins.Temporal.Calendar.weekOfYear","javascript.builtins.Temporal.Calendar.year","javascript.builtins.Temporal.Calendar.yearMonthFromFields","javascript.builtins.Temporal.Duration","javascript.builtins.Temporal.Duration.Duration","javascript.builtins.Temporal.Duration.abs","javascript.builtins.Temporal.Duration.add","javascript.builtins.Temporal.Duration.blank","javascript.builtins.Temporal.Duration.compare","javascript.builtins.Temporal.Duration.days","javascript.builtins.Temporal.Duration.from","javascript.builtins.Temporal.Duration.hours","javascript.builtins.Temporal.Duration.microseconds","javascript.builtins.Temporal.Duration.milliseconds","javascript.builtins.Temporal.Duration.minutes","javascript.builtins.Temporal.Duration.months","javascript.builtins.Temporal.Duration.nanoseconds","javascript.builtins.Temporal.Duration.negated","javascript.builtins.Temporal.Duration.round","javascript.builtins.Temporal.Duration.seconds","javascript.builtins.Temporal.Duration.sign","javascript.builtins.Temporal.Duration.subtract","javascript.builtins.Temporal.Duration.toJSON","javascript.builtins.Temporal.Duration.toLocaleString","javascript.builtins.Temporal.Duration.toString","javascript.builtins.Temporal.Duration.total","javascript.builtins.Temporal.Duration.valueOf","javascript.builtins.Temporal.Duration.weeks","javascript.builtins.Temporal.Duration.with","javascript.builtins.Temporal.Duration.years","javascript.builtins.Temporal.Instant","javascript.builtins.Temporal.Instant.Instant","javascript.builtins.Temporal.Instant.add","javascript.builtins.Temporal.Instant.compare","javascript.builtins.Temporal.Instant.epochMicroseconds","javascript.builtins.Temporal.Instant.epochMilliseconds","javascript.builtins.Temporal.Instant.epochNanoseconds","javascript.builtins.Temporal.Instant.epochSeconds","javascript.builtins.Temporal.Instant.equals","javascript.builtins.Temporal.Instant.from","javascript.builtins.Temporal.Instant.fromEpochMicroseconds","javascript.builtins.Temporal.Instant.fromEpochMilliseconds","javascript.builtins.Temporal.Instant.fromEpochNanoseconds","javascript.builtins.Temporal.Instant.fromEpochSeconds","javascript.builtins.Temporal.Instant.round","javascript.builtins.Temporal.Instant.since","javascript.builtins.Temporal.Instant.subtract","javascript.builtins.Temporal.Instant.toJSON","javascript.builtins.Temporal.Instant.toLocaleString","javascript.builtins.Temporal.Instant.toString","javascript.builtins.Temporal.Instant.toZonedDateTime","javascript.builtins.Temporal.Instant.toZonedDateTimeISO","javascript.builtins.Temporal.Instant.until","javascript.builtins.Temporal.Instant.valueOf","javascript.builtins.Temporal.Now","javascript.builtins.Temporal.Now.instant","javascript.builtins.Temporal.Now.plainDate","javascript.builtins.Temporal.Now.plainDateISO","javascript.builtins.Temporal.Now.plainDateTime","javascript.builtins.Temporal.Now.plainDateTimeISO","javascript.builtins.Temporal.Now.timeZone","javascript.builtins.Temporal.Now.zonedDateTime","javascript.builtins.Temporal.Now.zonedDateTimeISO","javascript.builtins.Temporal.PlainDate","javascript.builtins.Temporal.PlainDate.PlainDate","javascript.builtins.Temporal.PlainDate.add","javascript.builtins.Temporal.PlainDate.calendar","javascript.builtins.Temporal.PlainDate.compare","javascript.builtins.Temporal.PlainDate.day","javascript.builtins.Temporal.PlainDate.dayOfWeek","javascript.builtins.Temporal.PlainDate.dayOfYear","javascript.builtins.Temporal.PlainDate.daysInMonth","javascript.builtins.Temporal.PlainDate.daysInWeek","javascript.builtins.Temporal.PlainDate.daysInYear","javascript.builtins.Temporal.PlainDate.equals","javascript.builtins.Temporal.PlainDate.era","javascript.builtins.Temporal.PlainDate.eraYear","javascript.builtins.Temporal.PlainDate.from","javascript.builtins.Temporal.PlainDate.getISOFields","javascript.builtins.Temporal.PlainDate.inLeapYear","javascript.builtins.Temporal.PlainDate.month","javascript.builtins.Temporal.PlainDate.monthCode","javascript.builtins.Temporal.PlainDate.monthsInYear","javascript.builtins.Temporal.PlainDate.since","javascript.builtins.Temporal.PlainDate.subtract","javascript.builtins.Temporal.PlainDate.toJSON","javascript.builtins.Temporal.PlainDate.toLocaleString","javascript.builtins.Temporal.PlainDate.toPlainDateTime","javascript.builtins.Temporal.PlainDate.toPlainMonthDay","javascript.builtins.Temporal.PlainDate.toPlainYearMonth","javascript.builtins.Temporal.PlainDate.toString","javascript.builtins.Temporal.PlainDate.toZonedDateTime","javascript.builtins.Temporal.PlainDate.until","javascript.builtins.Temporal.PlainDate.valueOf","javascript.builtins.Temporal.PlainDate.weekOfYear","javascript.builtins.Temporal.PlainDate.with","javascript.builtins.Temporal.PlainDate.withCalendar","javascript.builtins.Temporal.PlainDate.year","javascript.builtins.Temporal.PlainDateTime","javascript.builtins.Temporal.PlainDateTime.PlainDateTime","javascript.builtins.Temporal.PlainDateTime.add","javascript.builtins.Temporal.PlainDateTime.calendar","javascript.builtins.Temporal.PlainDateTime.compare","javascript.builtins.Temporal.PlainDateTime.day","javascript.builtins.Temporal.PlainDateTime.dayOfWeek","javascript.builtins.Temporal.PlainDateTime.dayOfYear","javascript.builtins.Temporal.PlainDateTime.daysInMonth","javascript.builtins.Temporal.PlainDateTime.daysInWeek","javascript.builtins.Temporal.PlainDateTime.daysInYear","javascript.builtins.Temporal.PlainDateTime.equals","javascript.builtins.Temporal.PlainDateTime.era","javascript.builtins.Temporal.PlainDateTime.eraYear","javascript.builtins.Temporal.PlainDateTime.from","javascript.builtins.Temporal.PlainDateTime.getISOFields","javascript.builtins.Temporal.PlainDateTime.hour","javascript.builtins.Temporal.PlainDateTime.inLeapYear","javascript.builtins.Temporal.PlainDateTime.microsecond","javascript.builtins.Temporal.PlainDateTime.millisecond","javascript.builtins.Temporal.PlainDateTime.minute","javascript.builtins.Temporal.PlainDateTime.month","javascript.builtins.Temporal.PlainDateTime.monthCode","javascript.builtins.Temporal.PlainDateTime.monthsInYear","javascript.builtins.Temporal.PlainDateTime.nanosecond","javascript.builtins.Temporal.PlainDateTime.round","javascript.builtins.Temporal.PlainDateTime.second","javascript.builtins.Temporal.PlainDateTime.since","javascript.builtins.Temporal.PlainDateTime.subtract","javascript.builtins.Temporal.PlainDateTime.toJSON","javascript.builtins.Temporal.PlainDateTime.toLocaleString","javascript.builtins.Temporal.PlainDateTime.toPlainDate","javascript.builtins.Temporal.PlainDateTime.toPlainMonthDay","javascript.builtins.Temporal.PlainDateTime.toPlainTime","javascript.builtins.Temporal.PlainDateTime.toPlainYearMonth","javascript.builtins.Temporal.PlainDateTime.toString","javascript.builtins.Temporal.PlainDateTime.toZonedDateTime","javascript.builtins.Temporal.PlainDateTime.until","javascript.builtins.Temporal.PlainDateTime.valueOf","javascript.builtins.Temporal.PlainDateTime.weekOfYear","javascript.builtins.Temporal.PlainDateTime.with","javascript.builtins.Temporal.PlainDateTime.withCalendar","javascript.builtins.Temporal.PlainDateTime.withPlainDate","javascript.builtins.Temporal.PlainDateTime.withPlainTime","javascript.builtins.Temporal.PlainDateTime.year","javascript.builtins.Temporal.PlainMonthDay","javascript.builtins.Temporal.PlainMonthDay.PlainMonthDay","javascript.builtins.Temporal.PlainMonthDay.calendar","javascript.builtins.Temporal.PlainMonthDay.day","javascript.builtins.Temporal.PlainMonthDay.equals","javascript.builtins.Temporal.PlainMonthDay.from","javascript.builtins.Temporal.PlainMonthDay.getISOFields","javascript.builtins.Temporal.PlainMonthDay.monthCode","javascript.builtins.Temporal.PlainMonthDay.toJSON","javascript.builtins.Temporal.PlainMonthDay.toLocaleString","javascript.builtins.Temporal.PlainMonthDay.toPlainDate","javascript.builtins.Temporal.PlainMonthDay.toString","javascript.builtins.Temporal.PlainMonthDay.valueOf","javascript.builtins.Temporal.PlainMonthDay.with","javascript.builtins.Temporal.PlainTime","javascript.builtins.Temporal.PlainTime.PlainTime","javascript.builtins.Temporal.PlainTime.add","javascript.builtins.Temporal.PlainTime.calendar","javascript.builtins.Temporal.PlainTime.compare","javascript.builtins.Temporal.PlainTime.equals","javascript.builtins.Temporal.PlainTime.from","javascript.builtins.Temporal.PlainTime.getISOFields","javascript.builtins.Temporal.PlainTime.hour","javascript.builtins.Temporal.PlainTime.microsecond","javascript.builtins.Temporal.PlainTime.millisecond","javascript.builtins.Temporal.PlainTime.minute","javascript.builtins.Temporal.PlainTime.nanosecond","javascript.builtins.Temporal.PlainTime.round","javascript.builtins.Temporal.PlainTime.second","javascript.builtins.Temporal.PlainTime.since","javascript.builtins.Temporal.PlainTime.subtract","javascript.builtins.Temporal.PlainTime.toJSON","javascript.builtins.Temporal.PlainTime.toLocaleString","javascript.builtins.Temporal.PlainTime.toPlainDateTime","javascript.builtins.Temporal.PlainTime.toString","javascript.builtins.Temporal.PlainTime.toZonedDateTime","javascript.builtins.Temporal.PlainTime.until","javascript.builtins.Temporal.PlainTime.valueOf","javascript.builtins.Temporal.PlainTime.with","javascript.builtins.Temporal.PlainYearMonth","javascript.builtins.Temporal.PlainYearMonth.PlainYearMonth","javascript.builtins.Temporal.PlainYearMonth.add","javascript.builtins.Temporal.PlainYearMonth.calendar","javascript.builtins.Temporal.PlainYearMonth.compare","javascript.builtins.Temporal.PlainYearMonth.daysInMonth","javascript.builtins.Temporal.PlainYearMonth.daysInYear","javascript.builtins.Temporal.PlainYearMonth.equals","javascript.builtins.Temporal.PlainYearMonth.era","javascript.builtins.Temporal.PlainYearMonth.eraYear","javascript.builtins.Temporal.PlainYearMonth.from","javascript.builtins.Temporal.PlainYearMonth.getISOFields","javascript.builtins.Temporal.PlainYearMonth.inLeapYear","javascript.builtins.Temporal.PlainYearMonth.month","javascript.builtins.Temporal.PlainYearMonth.monthCode","javascript.builtins.Temporal.PlainYearMonth.monthsInYear","javascript.builtins.Temporal.PlainYearMonth.since","javascript.builtins.Temporal.PlainYearMonth.subtract","javascript.builtins.Temporal.PlainYearMonth.toJSON","javascript.builtins.Temporal.PlainYearMonth.toLocaleString","javascript.builtins.Temporal.PlainYearMonth.toPlainDate","javascript.builtins.Temporal.PlainYearMonth.toString","javascript.builtins.Temporal.PlainYearMonth.until","javascript.builtins.Temporal.PlainYearMonth.valueOf","javascript.builtins.Temporal.PlainYearMonth.with","javascript.builtins.Temporal.PlainYearMonth.year","javascript.builtins.Temporal.TimeZone","javascript.builtins.Temporal.TimeZone.TimeZone","javascript.builtins.Temporal.TimeZone.from","javascript.builtins.Temporal.TimeZone.getInstantFor","javascript.builtins.Temporal.TimeZone.getNextTransition","javascript.builtins.Temporal.TimeZone.getOffsetNanosecondsFor","javascript.builtins.Temporal.TimeZone.getOffsetStringFor","javascript.builtins.Temporal.TimeZone.getPlainDateTimeFor","javascript.builtins.Temporal.TimeZone.getPossibleInstantsFor","javascript.builtins.Temporal.TimeZone.getPreviousTransition","javascript.builtins.Temporal.TimeZone.id","javascript.builtins.Temporal.TimeZone.toJSON","javascript.builtins.Temporal.TimeZone.toString","javascript.builtins.Temporal.ZonedDateTime","javascript.builtins.Temporal.ZonedDateTime.ZonedDateTime","javascript.builtins.Temporal.ZonedDateTime.add","javascript.builtins.Temporal.ZonedDateTime.calendar","javascript.builtins.Temporal.ZonedDateTime.compare","javascript.builtins.Temporal.ZonedDateTime.day","javascript.builtins.Temporal.ZonedDateTime.dayOfWeek","javascript.builtins.Temporal.ZonedDateTime.dayOfYear","javascript.builtins.Temporal.ZonedDateTime.daysInMonth","javascript.builtins.Temporal.ZonedDateTime.daysInWeek","javascript.builtins.Temporal.ZonedDateTime.daysInYear","javascript.builtins.Temporal.ZonedDateTime.epochMicroseconds","javascript.builtins.Temporal.ZonedDateTime.epochMilliseconds","javascript.builtins.Temporal.ZonedDateTime.epochNanoseconds","javascript.builtins.Temporal.ZonedDateTime.epochSeconds","javascript.builtins.Temporal.ZonedDateTime.equals","javascript.builtins.Temporal.ZonedDateTime.era","javascript.builtins.Temporal.ZonedDateTime.eraYear","javascript.builtins.Temporal.ZonedDateTime.from","javascript.builtins.Temporal.ZonedDateTime.getISOFields","javascript.builtins.Temporal.ZonedDateTime.hour","javascript.builtins.Temporal.ZonedDateTime.hoursInDay","javascript.builtins.Temporal.ZonedDateTime.inLeapYear","javascript.builtins.Temporal.ZonedDateTime.microsecond","javascript.builtins.Temporal.ZonedDateTime.millisecond","javascript.builtins.Temporal.ZonedDateTime.minute","javascript.builtins.Temporal.ZonedDateTime.month","javascript.builtins.Temporal.ZonedDateTime.monthCode","javascript.builtins.Temporal.ZonedDateTime.monthsInYear","javascript.builtins.Temporal.ZonedDateTime.nanosecond","javascript.builtins.Temporal.ZonedDateTime.offset","javascript.builtins.Temporal.ZonedDateTime.offsetNanoseconds","javascript.builtins.Temporal.ZonedDateTime.round","javascript.builtins.Temporal.ZonedDateTime.second","javascript.builtins.Temporal.ZonedDateTime.since","javascript.builtins.Temporal.ZonedDateTime.startOfDay","javascript.builtins.Temporal.ZonedDateTime.subtract","javascript.builtins.Temporal.ZonedDateTime.timeZone","javascript.builtins.Temporal.ZonedDateTime.toInstant","javascript.builtins.Temporal.ZonedDateTime.toJSON","javascript.builtins.Temporal.ZonedDateTime.toLocaleString","javascript.builtins.Temporal.ZonedDateTime.toPlainDate","javascript.builtins.Temporal.ZonedDateTime.toPlainDateTime","javascript.builtins.Temporal.ZonedDateTime.toPlainMonthDay","javascript.builtins.Temporal.ZonedDateTime.toPlainTime","javascript.builtins.Temporal.ZonedDateTime.toPlainYearMonth","javascript.builtins.Temporal.ZonedDateTime.toString","javascript.builtins.Temporal.ZonedDateTime.until","javascript.builtins.Temporal.ZonedDateTime.valueOf","javascript.builtins.Temporal.ZonedDateTime.weekOfYear","javascript.builtins.Temporal.ZonedDateTime.with","javascript.builtins.Temporal.ZonedDateTime.withCalendar","javascript.builtins.Temporal.ZonedDateTime.withPlainDate","javascript.builtins.Temporal.ZonedDateTime.withPlainTime","javascript.builtins.Temporal.ZonedDateTime.withTimeZone","javascript.builtins.Temporal.ZonedDateTime.year"],"description":"The Temporal API allows you to work with dates, times, time zones, and durations. It is more powerful than the Date API.","description_html":"The <code>Temporal</code> API allows you to work with dates, times, time zones, and durations. It is more powerful than the <code>Date</code> API.","name":"Temporal","spec":"https://tc39.es/proposal-temporal/","status":{"baseline":false,"support":{}}},"text-indent":{"caniuse":"css-text-indent","compat_features":["css.properties.text-indent"],"description":"The text-indent CSS property sets the size of the empty space (indentation) at the beginning of lines in a text.","description_html":"The <code>text-indent</code> CSS property sets the size of the empty space (indentation) at the beginning of lines in a text.","name":"text-indent","spec":"https://drafts.csswg.org/css-text-3/#text-indent-property","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/130"},"text-spacing-trim":{"compat_features":["css.properties.text-spacing-trim"],"description":"The text-spacing-trim CSS property controls spacing around CJK characters, avoiding excessive whitespace when using full-width punctuation characters.","description_html":"The <code>text-spacing-trim</code> CSS property controls spacing around CJK characters, avoiding excessive whitespace when using full-width punctuation characters.","name":"text-spacing-trim","spec":"https://drafts.csswg.org/css-text-4/#text-spacing-trim-property","status":{"baseline":false,"support":{"chrome":"123","chrome_android":"123","edge":"123"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/771"},"text-wrap-balance":{"compat_features":["css.properties.text-wrap.balance"],"description":"The text-wrap: balance CSS declaration balances the length of each line when text is broken into multiple lines. Also known as headline balancing.","description_html":"The <code>text-wrap: balance</code> CSS declaration balances the length of each line when text is broken into multiple lines. Also known as headline balancing.","name":"text-wrap: balance","spec":"https://drafts.csswg.org/css-text-4/#valdef-text-wrap-style-balance","status":{"baseline":"low","baseline_low_date":"2024-05-13","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"121","firefox_android":"121","safari":"17.5","safari_ios":"17.5"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4673"},"text-wrap-nowrap":{"compat_features":["css.properties.text-wrap.nowrap","css.properties.text-wrap.wrap"],"description":"The text-wrap: nowrap CSS declaration prevents text breaking into multiple lines. Text that doesn't fit overflows instead.","description_html":"The <code>text-wrap: nowrap</code> CSS declaration prevents text breaking into multiple lines. Text that doesn't fit overflows instead.","name":"text-wrap: nowrap","spec":"https://drafts.csswg.org/css-text-4/#valdef-text-wrap-mode-nowrap","status":{"baseline":"low","baseline_low_date":"2024-03-19","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"124","firefox_android":"124","safari":"17.4","safari_ios":"17.4"}}},"text-wrap-pretty":{"compat_features":["css.properties.text-wrap.pretty"],"description":"The text-wrap: pretty CSS declaration prioritizes better layout over speed when text is broken into multiple lines.","description_html":"The <code>text-wrap: pretty</code> CSS declaration prioritizes better layout over speed when text is broken into multiple lines.","name":"text-wrap: pretty","spec":"https://drafts.csswg.org/css-text-4/#valdef-text-wrap-style-pretty","status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4674"},"transferable-arraybuffer":{"compat_features":["javascript.builtins.ArrayBuffer.transfer","javascript.builtins.ArrayBuffer.transferToFixedLength","javascript.builtins.ArrayBuffer.detached"],"description":"The transfer() and transferToFixedLength() methods of ArrayBuffer move a buffer from one context to another (for example, to a worker).","description_html":"The <code>transfer()</code> and <code>transferToFixedLength()</code> methods of <code>ArrayBuffer</code> move a buffer from one context to another (for example, to a worker).","name":"Transferable ArrayBuffer","spec":"https://tc39.es/proposal-arraybuffer-transfer/#sec-arraybuffer.prototype.transfer","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"122","firefox_android":"122","safari":"17.4","safari_ios":"17.4"}}},"transforms2d":{"caniuse":"transforms2d","compat_features":["css.properties.transform","css.properties.transform-origin","css.types.transform-function","css.types.transform-function.matrix","css.types.transform-function.rotate","css.types.transform-function.scale","css.types.transform-function.scaleX","css.types.transform-function.scaleY","css.types.transform-function.skew","css.types.transform-function.skewX","css.types.transform-function.skewY","css.types.transform-function.translate","css.types.transform-function.translateX","css.types.transform-function.translateY"],"description":"The transform CSS property and its 2D transform functions allow rotating, scaling, skewing, and translating an element. Arbitrary 2D transforms are also possible using a transformation matrix.","description_html":"The <code>transform</code> CSS property and its 2D transform functions allow rotating, scaling, skewing, and translating an element. Arbitrary 2D transforms are also possible using a transformation matrix.","name":"2D transforms","spec":"https://drafts.csswg.org/css-transforms-1/","status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"36","chrome_android":"36","edge":"12","firefox":"16","firefox_android":"16","safari":"9","safari_ios":"9"}}},"transforms3d":{"caniuse":"transforms3d","compat_features":["css.properties.backface-visibility","css.properties.perspective","css.properties.perspective.none","css.properties.perspective-origin","css.properties.perspective-origin.bottom","css.properties.perspective-origin.center","css.properties.perspective-origin.left","css.properties.perspective-origin.right","css.properties.perspective-origin.top","css.properties.transform.3d","css.properties.transform-style","css.types.transform-function.matrix3d","css.types.transform-function.perspective","css.types.transform-function.rotate3d","css.types.transform-function.rotateX","css.types.transform-function.rotateY","css.types.transform-function.rotateZ","css.types.transform-function.scale3d","css.types.transform-function.scaleZ","css.types.transform-function.translate3d","css.types.transform-function.translateZ"],"description":"The transform CSS property and its 3D transform functions allow rotations and other transforms in three dimensions, including perspective transforms.","description_html":"The <code>transform</code> CSS property and its 3D transform functions allow rotations and other transforms in three dimensions, including perspective transforms.","name":"3D transforms","spec":"https://drafts.csswg.org/css-transforms-2/","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"36","chrome_android":"36","edge":"12","firefox":"16","firefox_android":"16","safari":"15.4","safari_ios":"15.4"}}},"transition-behavior":{"compat_features":["css.properties.transition-behavior"],"description":"The transition-behavior: allow-discrete CSS declaration allows transitions for properties whose animation behavior is discrete. Such properties can't be interpolated and swap from their start value to the end value at 50%.","description_html":"The <code>transition-behavior: allow-discrete</code> CSS declaration allows transitions for properties whose animation behavior is discrete. Such properties can't be interpolated and swap from their start value to the end value at 50%.","name":"transition-behavior","spec":"https://drafts.csswg.org/css-transitions-2/#transition-behavior-property","status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117","safari":"17.4","safari_ios":"17.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/766"},"translate":{"compat_features":["html.global_attributes.translate","api.HTMLElement.translate"],"description":"The translate HTML attribute marks whether an element's text should be translated.","description_html":"The <code>translate</code> HTML attribute marks whether an element's text should be translated.","name":"translate attribute","spec":"https://html.spec.whatwg.org/multipage/dom.html#attr-translate","status":{"baseline":"low","baseline_low_date":"2023-03-14","support":{"chrome":"19","chrome_android":"25","edge":"79","firefox":"111","firefox_android":"111","safari":"6","safari_ios":"6"}}},"trig-functions":{"compat_features":["css.types.acos","css.types.asin","css.types.atan","css.types.atan2","css.types.cos","css.types.sin","css.types.tan"],"description":"The sin(), cos(), tan(), asin(), acos(), atan(), and atan2() CSS functions compute various trigonometric functions.","description_html":"The <code>sin()</code>, <code>cos()</code>, <code>tan()</code>, <code>asin()</code>, <code>acos()</code>, <code>atan()</code>, and <code>atan2()</code> CSS functions compute various trigonometric functions.","name":"sin(), cos(), tan(), asin(), acos(), atan(), and atan2()","spec":"https://drafts.csswg.org/css-values-4/#trig-funcs","status":{"baseline":"low","baseline_low_date":"2023-03-13","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"108","firefox_android":"108","safari":"15.4","safari_ios":"15.4"}}},"trusted-types":{"caniuse":"trusted-types","compat_features":["api.TrustedHTML","api.TrustedHTML.toString","api.TrustedScript","api.TrustedScript.toString","api.TrustedScriptURL","api.TrustedScriptURL.toString","api.TrustedTypePolicy","api.TrustedTypePolicy.createHTML","api.TrustedTypePolicy.createScript","api.TrustedTypePolicy.createScriptURL","api.TrustedTypePolicy.name","api.TrustedTypePolicyFactory","api.TrustedTypePolicyFactory.createPolicy","api.TrustedTypePolicyFactory.defaultPolicy","api.TrustedTypePolicyFactory.emptyHTML","api.TrustedTypePolicyFactory.emptyScript","api.TrustedTypePolicyFactory.getAttributeType","api.TrustedTypePolicyFactory.getPropertyType","api.TrustedTypePolicyFactory.isHTML","api.TrustedTypePolicyFactory.isScript","api.TrustedTypePolicyFactory.isScriptURL","api.trustedTypes","http.headers.Content-Security-Policy.require-trusted-types-for","http.headers.Content-Security-Policy.trusted-types"],"description":"Trusted types allow you to lock down insecure parts of the DOM API and prevent client-side cross-site scripting (XSS) attacks.","description_html":"Trusted types allow you to lock down insecure parts of the DOM API and prevent client-side cross-site scripting (XSS) attacks.","name":"Trusted types","spec":"https://w3c.github.io/trusted-types/dist/spec/","status":{"baseline":false,"support":{"chrome":"83","chrome_android":"83","edge":"83"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2722"},"two-value-display":{"compat_features":["css.properties.display.multi-keyword_values"],"description":"The display CSS property accepts multiple keyword values, such as inline flex or block flow, to explicitly set an element's inner and outer layout mode. Also known as 2-value, multi-keyword, or multiple value syntax.","description_html":"The <code>display</code> CSS property accepts multiple keyword values, such as <code>inline flex</code> or <code>block flow</code>, to explicitly set an element's inner and outer layout mode. Also known as 2-value, multi-keyword, or multiple value syntax.","name":"Two-value display property","spec":"https://drafts.csswg.org/css-display-3/#the-display-properties","status":{"baseline":"low","baseline_low_date":"2023-07-21","support":{"chrome":"115","chrome_android":"115","edge":"115","firefox":"70","firefox_android":"79","safari":"15","safari_ios":"15"}}},"typed-array-iteration-methods":{"compat_features":["javascript.builtins.TypedArray.every","javascript.builtins.TypedArray.filter","javascript.builtins.TypedArray.forEach","javascript.builtins.TypedArray.indexOf","javascript.builtins.TypedArray.lastIndexOf","javascript.builtins.TypedArray.map","javascript.builtins.TypedArray.reduce","javascript.builtins.TypedArray.reduceRight","javascript.builtins.TypedArray.some"],"description":"Typed array iteration methods","description_html":"Typed array iteration methods","name":"Typed array iteration methods","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.every","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.filter","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.foreach","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.indexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.lastindexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.map","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.reduce","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.reduceright","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.some"],"status":{"baseline":"high","baseline_high_date":"2018-09-21","baseline_low_date":"2016-03-21","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"37","firefox_android":"37","safari":"9.1","safari_ios":"9.3"}}},"typed-array-iterators":{"compat_features":["javascript.builtins.TypedArray.@@iterator","javascript.builtins.TypedArray.entries","javascript.builtins.TypedArray.keys","javascript.builtins.TypedArray.values"],"description":"Typed arrays are iterable with the for…of statement and enumerable with the methods entries(), keys(), and values().","description_html":"Typed arrays are iterable with the <code>for…of</code> statement and enumerable with the methods <code>entries()</code>, <code>keys()</code>, and <code>values()</code>.","name":"Typed array iterators","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype-@@iterator","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.entries","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.keys","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.values"],"status":{"baseline":"high","baseline_high_date":"2019-03-20","baseline_low_date":"2016-09-20","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"36","firefox_android":"36","safari":"10","safari_ios":"10"}}},"typed-arrays":{"compat_features":["javascript.builtins.Float32Array","javascript.builtins.Float32Array.Float32Array","javascript.builtins.Float32Array.Float32Array.constructor_without_parameters","javascript.builtins.Float32Array.Float32Array.iterable_allowed","javascript.builtins.Float64Array","javascript.builtins.Float64Array.Float64Array","javascript.builtins.Float64Array.Float64Array.constructor_without_parameters","javascript.builtins.Float64Array.Float64Array.iterable_allowed","javascript.builtins.Int16Array","javascript.builtins.Int16Array.Int16Array","javascript.builtins.Int16Array.Int16Array.constructor_without_parameters","javascript.builtins.Int32Array","javascript.builtins.Int32Array.Int32Array","javascript.builtins.Int32Array.Int32Array.constructor_without_parameters","javascript.builtins.Int32Array.Int32Array.iterable_allowed","javascript.builtins.Int8Array","javascript.builtins.Int8Array.Int8Array","javascript.builtins.Int8Array.Int8Array.constructor_without_parameters","javascript.builtins.Int8Array.Int8Array.iterable_allowed","javascript.builtins.TypedArray","javascript.builtins.TypedArray.BYTES_PER_ELEMENT","javascript.builtins.TypedArray.buffer","javascript.builtins.TypedArray.byteLength","javascript.builtins.TypedArray.byteOffset","javascript.builtins.TypedArray.constructor_without_parameters","javascript.builtins.TypedArray.join","javascript.builtins.TypedArray.length","javascript.builtins.TypedArray.name","javascript.builtins.TypedArray.named_properties","javascript.builtins.TypedArray.reverse","javascript.builtins.TypedArray.set","javascript.builtins.TypedArray.slice","javascript.builtins.TypedArray.sort","javascript.builtins.TypedArray.subarray","javascript.builtins.TypedArray.toLocaleString","javascript.builtins.TypedArray.toString","javascript.builtins.Uint16Array","javascript.builtins.Uint16Array.Uint16Array","javascript.builtins.Uint16Array.Uint16Array.constructor_without_parameters","javascript.builtins.Uint16Array.Uint16Array.iterable_allowed","javascript.builtins.Uint32Array","javascript.builtins.Uint32Array.Uint32Array","javascript.builtins.Uint32Array.Uint32Array.constructor_without_parameters","javascript.builtins.Uint32Array.Uint32Array.iterable_allowed","javascript.builtins.Uint8Array","javascript.builtins.Uint8Array.Uint8Array","javascript.builtins.Uint8Array.Uint8Array.constructor_without_parameters","javascript.builtins.Uint8Array.Uint8Array.iterable_allowed","javascript.builtins.Uint8ClampedArray","javascript.builtins.Uint8ClampedArray.Uint8ClampedArray","javascript.builtins.Uint8ClampedArray.Uint8ClampedArray.iterable_allowed"],"description":"Typed arrays are ordered lists of JavaScript values, where all values are of the same numerical type, such as 8-bit integers or 32-bit floating point numbers.","description_html":"Typed arrays are ordered lists of JavaScript values, where all values are of the same numerical type, such as 8-bit integers or 32-bit floating point numbers.","name":"Typed arrays (initial support)","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#table-49","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-typedarray-constructors","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-typedarray-objects","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-typedarray.bytes_per_element","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.buffer","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.bytelength","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.byteoffset","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.join","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.length","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-properties-of-the-typedarray-constructors","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.reverse","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.set","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.slice","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.sort","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.subarray","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.tolocalestring","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.tostring"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"7","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5.1","safari_ios":"4.2"}}},"url-canparse":{"compat_features":["api.URL.canParse_static"],"description":"The URL.canParse() static method checks whether a URL can be parsed into a valid URL object. It's an alternative to calling new URL() in a try…catch statement.","description_html":"The <code>URL.canParse()</code> static method checks whether a URL can be parsed into a valid <code>URL</code> object. It's an alternative to calling <code>new URL()</code> in a <code>try…catch</code> statement.","name":"URL.canParse()","spec":"https://url.spec.whatwg.org/#dom-url-canparse","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"115","firefox_android":"115","safari":"17","safari_ios":"17"}}},"user-activation":{"compat_features":["api.Navigator.userActivation","api.UserActivation","api.UserActivation.hasBeenActive","api.UserActivation.isActive"],"description":"The navigator.userActivation API reveals whether the user has interacted with the page through an \"activation\" gesture such as a click, tap, or key press. User activation gated APIs (such as the fullscreen API) fail without user interaction, and this API allows you to predict such a failure.","description_html":"The <code>navigator.userActivation</code> API reveals whether the user has interacted with the page through an \"activation\" gesture such as a click, tap, or key press. User activation gated APIs (such as the fullscreen API) fail without user interaction, and this API allows you to predict such a failure.","name":"User activation","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-useractivation-interface","status":{"baseline":"low","baseline_low_date":"2023-11-21","support":{"chrome":"72","chrome_android":"72","edge":"79","firefox":"120","firefox_android":"120","safari":"16.4","safari_ios":"16.4"}}},"user-pseudos":{"compat_features":["css.selectors.user-invalid","css.selectors.user-valid"],"description":"The :user-valid and :user-invalid pseudo-classes match form controls that have been marked as valid or invalid based on their validation constraints.","description_html":"The <code>:user-valid</code> and <code>:user-invalid</code> pseudo-classes match form controls that have been marked as valid or invalid based on their validation constraints.","name":":user-valid and :user-invalid","spec":"https://drafts.csswg.org/selectors-4/#user-pseudos","status":{"baseline":"low","baseline_low_date":"2023-11-02","support":{"chrome":"119","chrome_android":"119","edge":"119","firefox":"88","firefox_android":"88","safari":"16.5","safari_ios":"16.5"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/4958","https://chromestatus.com/metrics/feature/timeline/popularity/4959"]},"view-transitions":{"caniuse":"view-transitions","compat_features":["api.Document.startViewTransition","api.ViewTransition","api.ViewTransition.finished","api.ViewTransition.ready","api.ViewTransition.skipTransition","api.ViewTransition.updateCallbackDone","css.properties.view-transition-name","css.selectors.view-transition","css.selectors.view-transition-group","css.selectors.view-transition-image-pair","css.selectors.view-transition-new","css.selectors.view-transition-old"],"description":"View transitions allow you to create animated visual transitions between different states of a document, or between different documents.","description_html":"View transitions allow you to create animated visual transitions between different states of a document, or between different documents.","name":"View transitions","spec":"https://drafts.csswg.org/css-view-transitions-1/","status":{"baseline":false,"support":{"chrome":"111","chrome_android":"111","edge":"111"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4383"},"viewport-unit-variants":{"alias":"viewport-relative-unit-variants","caniuse":"viewport-unit-variants","compat_features":["css.types.length.vb","css.types.length.vi","css.types.length.viewport_percentage_units_dynamic","css.types.length.viewport_percentage_units_large","css.types.length.viewport_percentage_units_small"],"description":"The sv*, lv*, and dv* CSS viewport units are relative to the smallest, largest, and current (dynamic) viewport size. They are used to size elements in relation to the viewport's dimensions.","description_html":"The <code>sv*</code>, <code>lv*</code>, and <code>dv*</code> CSS viewport units are relative to the smallest, largest, and current (dynamic) viewport size. They are used to size elements in relation to the viewport's dimensions.","name":"Small, large, and dynamic viewport units","spec":["https://drafts.csswg.org/css-values-4/#viewport-variants","https://drafts.csswg.org/css-values-4/#viewport-relative-lengths"],"status":{"baseline":"low","baseline_low_date":"2022-12-05","support":{"chrome":"108","chrome_android":"108","edge":"108","firefox":"101","firefox_android":"101","safari":"15.4","safari_ios":"15.4"}}},"viewport-units":{"alias":"viewport-relative-units","caniuse":"viewport-units","compat_features":["css.types.length.vh","css.types.length.vmax","css.types.length.vmin","css.types.length.vw"],"description":"The vw, vh, vmin, and vmax CSS viewport units are relative to the size of the viewport, and are used to size elements in relation to the viewport's dimensions.","description_html":"The <code>vw</code>, <code>vh</code>, <code>vmin</code>, and <code>vmax</code> CSS viewport units are relative to the size of the viewport, and are used to size elements in relation to the viewport's dimensions.","name":"Viewport units","spec":"https://drafts.csswg.org/css-values-4/#viewport-relative-lengths","status":{"baseline":"high","baseline_high_date":"2020-04-17","baseline_low_date":"2017-10-17","support":{"chrome":"26","chrome_android":"26","edge":"16","firefox":"19","firefox_android":"19","safari":"7","safari_ios":"7"}}},"visual-viewport":{"compat_features":["api.VisualViewport","api.VisualViewport.height","api.VisualViewport.offsetLeft","api.VisualViewport.offsetTop","api.VisualViewport.pageLeft","api.VisualViewport.pageTop","api.VisualViewport.scale","api.VisualViewport.width","api.Window.visualViewport"],"description":"The visualViewport API provides a way to query and modify the user-visible viewport of a web page.","description_html":"The <code>visualViewport</code> API provides a way to query and modify the user-visible viewport of a web page.","name":"Visual viewport API","spec":"https://drafts.csswg.org/cssom-view-1/#visualViewport","status":{"baseline":"high","baseline_high_date":"2024-02-10","baseline_low_date":"2021-08-10","support":{"chrome":"61","chrome_android":"61","edge":"79","firefox":"91","firefox_android":"68","safari":"13","safari_ios":"13"}}},"wasm-simd":{"caniuse":"wasm-simd","compat_features":["webassembly.fixed-width-SIMD"],"description":"The 128-bit SIMD (Single Instruction Multiple Data) extension to WebAssembly performs one instruction on multiple units of data, when running on hardware that supports such instructions. Also known as vector instructions.","description_html":"The 128-bit SIMD (Single Instruction Multiple Data) extension to WebAssembly performs one instruction on multiple units of data, when running on hardware that supports such instructions. Also known as vector instructions.","name":"WebAssembly SIMD","spec":"https://webassembly.github.io/spec/core/bikeshed/#vector-instructions","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"91","chrome_android":"91","edge":"91","firefox":"89","firefox_android":"89","safari":"16.4","safari_ios":"16.4"}}},"web-animations":{"caniuse":"web-animation","compat_features":["api.Animation","api.Animation.Animation","api.Animation.cancel_event","api.Animation.cancel","api.Animation.commitStyles","api.Animation.currentTime","api.Animation.effect","api.Animation.finish","api.Animation.finished","api.Animation.finish_event","api.Animation.id","api.Animation.pause","api.Animation.pending","api.Animation.persist","api.Animation.play","api.Animation.playbackRate","api.Animation.playState","api.Animation.ready","api.Animation.remove_event","api.Animation.replaceState","api.Animation.reverse","api.Animation.startTime","api.Animation.timeline","api.Animation.updatePlaybackRate","api.AnimationTimeline","api.AnimationTimeline.currentTime","api.AnimationEffect","api.AnimationEffect.getComputedTiming","api.AnimationEffect.getTiming","api.AnimationEffect.updateTiming","api.AnimationPlaybackEvent","api.AnimationPlaybackEvent.AnimationPlaybackEvent","api.AnimationPlaybackEvent.currentTime","api.AnimationPlaybackEvent.timelineTime","api.KeyframeEffect","api.KeyframeEffect.KeyframeEffect","api.KeyframeEffect.composite","api.KeyframeEffect.getKeyframes","api.KeyframeEffect.pseudoElement","api.KeyframeEffect.setKeyframes","api.KeyframeEffect.target","api.DocumentTimeline","api.DocumentTimeline.DocumentTimeline","api.Document.getAnimations","api.Document.timeline","api.Element.animate"],"description":"The web animations API allows you to animate and synchronize the animations of DOM elements.","description_html":"The web animations API allows you to animate and synchronize the animations of DOM elements.","name":"Web animations","spec":"https://drafts.csswg.org/web-animations-1/","status":{"baseline":"low","baseline_low_date":"2022-09-12","support":{"chrome":"84","chrome_android":"84","edge":"84","firefox":"80","firefox_android":"80","safari":"16","safari_ios":"16"}}},"web-bluetooth":{"caniuse":"web-bluetooth","description":"The Web Bluetooth API enables selecting and communicating with nearby Bluetooth devices.","description_html":"The Web Bluetooth API enables selecting and communicating with nearby Bluetooth devices.","name":"Web Bluetooth","spec":"https://webbluetoothcg.github.io/web-bluetooth/","status":{"baseline":false,"support":{"chrome":"70","chrome_android":"56","edge":"79"}}},"web-locks":{"compat_features":["api.Lock","api.Lock.mode","api.Lock.name","api.LockManager","api.LockManager.query","api.LockManager.request","api.Navigator.locks","api.WorkerNavigator.locks"],"description":"The navigator.locks API coordinates work with shared resources through mutually exclusive ownership of a resource's name. Also known as web locks.","description_html":"The <code>navigator.locks</code> API coordinates work with shared resources through mutually exclusive ownership of a resource's name. Also known as web locks.","name":"Locks","spec":"https://w3c.github.io/web-locks/","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"96","firefox_android":"96","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2375"},"web-midi":{"caniuse":"midi","compat_features":["api.MIDIAccess","api.MIDIAccess.inputs","api.MIDIAccess.outputs","api.MIDIAccess.statechange_event","api.MIDIAccess.sysexEnabled","api.MIDIConnectionEvent","api.MIDIConnectionEvent.MIDIConnectionEvent","api.MIDIConnectionEvent.port","api.MIDIInput","api.MIDIInput.midimessage_event","api.MIDIInputMap","api.MIDIInputMap.entries","api.MIDIInputMap.forEach","api.MIDIInputMap.get","api.MIDIInputMap.has","api.MIDIInputMap.keys","api.MIDIInputMap.size","api.MIDIInputMap.values","api.MIDIInputMap.@@iterator","api.MIDIMessageEvent","api.MIDIMessageEvent.MIDIMessageEvent","api.MIDIMessageEvent.data","api.MIDIOutput","api.MIDIOutput.send","api.MIDIOutputMap","api.MIDIOutputMap.entries","api.MIDIOutputMap.forEach","api.MIDIOutputMap.get","api.MIDIOutputMap.has","api.MIDIOutputMap.keys","api.MIDIOutputMap.size","api.MIDIOutputMap.values","api.MIDIOutputMap.@@iterator","api.MIDIPort","api.MIDIPort.close","api.MIDIPort.connection","api.MIDIPort.id","api.MIDIPort.manufacturer","api.MIDIPort.name","api.MIDIPort.open","api.MIDIPort.state","api.MIDIPort.statechange_event","api.MIDIPort.type","api.MIDIPort.version","api.Navigator.requestMIDIAccess"],"description":"The Web MIDI API enables selecting MIDI input and output devices and sending and receiving MIDI messages.","description_html":"The Web MIDI API enables selecting MIDI input and output devices and sending and receiving MIDI messages.","name":"Web MIDI","spec":"https://webaudio.github.io/web-midi-api/","status":{"baseline":false,"support":{"chrome":"43","chrome_android":"43","edge":"79","firefox":"108"}}},"web-nfc":{"caniuse":"webnfc","compat_features":["api.NDEFMessage","api.NDEFMessage.NDEFMessage","api.NDEFMessage.secure_context_required","api.NDEFMessage.records","api.NDEFReader","api.NDEFReader.NDEFReader","api.NDEFReader.secure_context_required","api.NDEFReader.reading_event","api.NDEFReader.readingerror_event","api.NDEFReader.scan","api.NDEFReader.write","api.NDEFReadingEvent","api.NDEFReadingEvent.NDEFReadingEvent","api.NDEFReadingEvent.secure_context_required","api.NDEFReadingEvent.message","api.NDEFReadingEvent.serialNumber","api.NDEFRecord","api.NDEFRecord.NDEFRecord","api.NDEFRecord.secure_context_required","api.NDEFRecord.data","api.NDEFRecord.encoding","api.NDEFRecord.id","api.NDEFRecord.lang","api.NDEFRecord.mediaType","api.NDEFRecord.recordType","api.NDEFRecord.toRecords"],"description":"The NDEFReader API reads and writes messages to near-field communication (NFC) tags.","description_html":"The <code>NDEFReader</code> API reads and writes messages to near-field communication (NFC) tags.","name":"Web NFC","spec":"https://w3c.github.io/web-nfc/","status":{"baseline":false,"support":{"chrome_android":"89"}}},"webauthn-public-key-easy":{"compat_features":["api.AuthenticatorAttestationResponse.getAuthenticatorData","api.AuthenticatorAttestationResponse.getPublicKey","api.AuthenticatorAttestationResponse.getPublicKeyAlgorithm"],"description":"The getAuthenticatorData(), getPublicKey(), and getPublicKeyAlgorithm() methods of AuthenticatorAttestationResponse access credential data inside attestationObject without the need to parse it.","description_html":"The <code>getAuthenticatorData()</code>, <code>getPublicKey()</code>, and <code>getPublicKeyAlgorithm()</code> methods of <code>AuthenticatorAttestationResponse</code> access credential data inside <code>attestationObject</code> without the need to parse it.","name":"Web authentication easy public key access","spec":"https://w3c.github.io/webauthn/#sctn-public-key-easy","status":{"baseline":"low","baseline_low_date":"2023-10-24","support":{"chrome":"85","chrome_android":"85","edge":"85","firefox":"119","firefox_android":"119","safari":"16","safari_ios":"16"}}},"webcodecs":{"caniuse":"webcodecs","compat_features":["api.AudioData","api.AudioData.AudioData","api.AudioData.allocationSize","api.AudioData.clone","api.AudioData.close","api.AudioData.copyTo","api.AudioData.duration","api.AudioData.format","api.AudioData.numberOfChannels","api.AudioData.numberOfFrames","api.AudioData.sampleRate","api.AudioData.timestamp","api.AudioDecoder","api.AudioDecoder.AudioDecoder","api.AudioDecoder.close","api.AudioDecoder.configure","api.AudioDecoder.decode","api.AudioDecoder.decodeQueueSize","api.AudioDecoder.dequeue_event","api.AudioDecoder.flush","api.AudioDecoder.isConfigSupported_static","api.AudioDecoder.reset","api.AudioDecoder.state","api.AudioEncoder","api.AudioEncoder.AudioEncoder","api.AudioEncoder.close","api.AudioEncoder.configure","api.AudioEncoder.dequeue_event","api.AudioEncoder.encode","api.AudioEncoder.encodeQueueSize","api.AudioEncoder.flush","api.AudioEncoder.isConfigSupported_static","api.AudioEncoder.reset","api.AudioEncoder.state","api.EncodedAudioChunk","api.EncodedAudioChunk.EncodedAudioChunk","api.EncodedAudioChunk.byteLength","api.EncodedAudioChunk.copyTo","api.EncodedAudioChunk.duration","api.EncodedAudioChunk.timestamp","api.EncodedAudioChunk.type","api.EncodedVideoChunk","api.EncodedVideoChunk.EncodedVideoChunk","api.EncodedVideoChunk.byteLength","api.EncodedVideoChunk.copyTo","api.EncodedVideoChunk.duration","api.EncodedVideoChunk.timestamp","api.EncodedVideoChunk.type","api.ImageDecoder","api.ImageDecoder.ImageDecoder","api.ImageDecoder.close","api.ImageDecoder.complete","api.ImageDecoder.completed","api.ImageDecoder.decode","api.ImageDecoder.isTypeSupported_static","api.ImageDecoder.reset","api.ImageDecoder.tracks","api.ImageDecoder.type","api.ImageTrack","api.ImageTrack.animated","api.ImageTrack.frameCount","api.ImageTrack.repetitionCount","api.ImageTrack.selected","api.ImageTrackList","api.ImageTrackList.length","api.ImageTrackList.ready","api.ImageTrackList.selectedIndex","api.ImageTrackList.selectedTrack","api.VideoColorSpace","api.VideoColorSpace.VideoColorSpace","api.VideoColorSpace.fullRange","api.VideoColorSpace.matrix","api.VideoColorSpace.primaries","api.VideoColorSpace.toJSON","api.VideoColorSpace.transfer","api.VideoDecoder","api.VideoDecoder.VideoDecoder","api.VideoDecoder.close","api.VideoDecoder.configure","api.VideoDecoder.decode","api.VideoDecoder.decodeQueueSize","api.VideoDecoder.dequeue_event","api.VideoDecoder.flush","api.VideoDecoder.isConfigSupported_static","api.VideoDecoder.reset","api.VideoDecoder.state","api.VideoEncoder","api.VideoEncoder.VideoEncoder","api.VideoEncoder.close","api.VideoEncoder.configure","api.VideoEncoder.dequeue_event","api.VideoEncoder.encode","api.VideoEncoder.encodeQueueSize","api.VideoEncoder.flush","api.VideoEncoder.isConfigSupported_static","api.VideoEncoder.reset","api.VideoEncoder.state","api.VideoFrame","api.VideoFrame.VideoFrame","api.VideoFrame.allocationSize","api.VideoFrame.clone","api.VideoFrame.close","api.VideoFrame.codedHeight","api.VideoFrame.codedRect","api.VideoFrame.codedWidth","api.VideoFrame.colorSpace","api.VideoFrame.copyTo","api.VideoFrame.displayHeight","api.VideoFrame.displayWidth","api.VideoFrame.duration","api.VideoFrame.format","api.VideoFrame.timestamp","api.VideoFrame.visibleRect"],"description":"The WebCodecs API provides low-level access to individual video frames and chunks of audio samples, for full control over the way media is processed.","description_html":"The WebCodecs API provides low-level access to individual video frames and chunks of audio samples, for full control over the way media is processed.","name":"WebCodecs","spec":"https://w3c.github.io/webcodecs/","status":{"baseline":false,"support":{"chrome":"106","chrome_android":"106","edge":"106"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3464"},"webdriver-bidi":{"description":"WebDriver BiDi is a bidirectional protocol that allows a WebDriver client and a browser to communicate with each other.","description_html":"WebDriver BiDi is a bidirectional protocol that allows a WebDriver client and a browser to communicate with each other.","name":"WebDriver BiDi","spec":"https://w3c.github.io/webdriver-bidi/","status":{"baseline":false,"support":{"chrome":"106","chrome_android":"106","edge":"106","firefox":"102","firefox_android":"102"}}},"webgl-oes-draw-buffers-indexed":{"compat_features":["api.OES_draw_buffers_indexed","api.OES_draw_buffers_indexed.blendEquationiOES","api.OES_draw_buffers_indexed.blendEquationSeparateiOES","api.OES_draw_buffers_indexed.blendFunciOES","api.OES_draw_buffers_indexed.blendFuncSeparateiOES","api.OES_draw_buffers_indexed.colorMaskiOES","api.OES_draw_buffers_indexed.disableiOES","api.OES_draw_buffers_indexed.enableiOES"],"description":"The OES_draw_buffers_indexed extension to WebGL allows you to control blending on a per-color basis when writing to multiple color buffers simultaneously.","description_html":"The <code>OES_draw_buffers_indexed</code> extension to WebGL allows you to control blending on a per-color basis when writing to multiple color buffers simultaneously.","name":"WebGL OES_draw_buffers_indexed extension","spec":"https://registry.khronos.org/webgl/extensions/OES_draw_buffers_indexed/","status":{"baseline":"low","baseline_low_date":"2022-12-13","support":{"chrome":"100","chrome_android":"100","edge":"100","firefox":"108","firefox_android":"108","safari":"16","safari_ios":"16"}}},"webhid":{"caniuse":"webhid","compat_features":["api.HID","api.HID.connect_event","api.HID.disconnect_event","api.HID.getDevices","api.HID.requestDevice","api.HIDConnectionEvent","api.HIDConnectionEvent.HIDConnectionEvent","api.HIDConnectionEvent.device","api.HIDDevice","api.HIDDevice.close","api.HIDDevice.collections","api.HIDDevice.inputreport_event","api.HIDDevice.open","api.HIDDevice.opened","api.HIDDevice.productId","api.HIDDevice.productName","api.HIDDevice.receiveFeatureReport","api.HIDDevice.sendFeatureReport","api.HIDDevice.sendReport","api.HIDDevice.vendorId","api.HIDInputReportEvent","api.HIDInputReportEvent.data","api.HIDInputReportEvent.device","api.HIDInputReportEvent.reportId","api.Navigator.hid","http.headers.Permissions-Policy.hid"],"description":"The WebHID API provides access to Human Interface Devices (HID) that are connected to the user's device.","description_html":"The WebHID API provides access to Human Interface Devices (HID) that are connected to the user's device.","name":"WebHID","spec":"https://wicg.github.io/webhid/","status":{"baseline":false,"support":{"chrome":"89","edge":"89"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2865"},"webp":{"caniuse":"webp","description":"The WebP image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","description_html":"The WebP image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","name":"WebP","spec":"https://www.ietf.org/archive/id/draft-zern-webp-15.html","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"9","chrome_android":"18","edge":"18","firefox":"65","firefox_android":"65","safari":"14","safari_ios":"14"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3797"},"webrtc":{"caniuse":"rtcpeerconnection","compat_features":["api.RTCPeerConnection","api.RTCDataChannel"],"description":"The WebRTC API establishes real-time communication channels directly between browsers. It is commonly used in video conferencing applications.","description_html":"The WebRTC API establishes real-time communication channels directly between browsers. It is commonly used in video conferencing applications.","name":"WebRTC","spec":"https://w3c.github.io/webrtc-pc/","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"56","chrome_android":"56","edge":"79","firefox":"44","firefox_android":"44","safari":"11","safari_ios":"11"}}},"webrtc-encoded-transform":{"compat_features":["api.DedicatedWorkerGlobalScope.rtctransform_event","api.RTCEncodedAudioFrame","api.RTCEncodedAudioFrame.data","api.RTCEncodedAudioFrame.getMetadata","api.RTCEncodedAudioFrame.timestamp","api.RTCEncodedVideoFrame","api.RTCEncodedVideoFrame.data","api.RTCEncodedVideoFrame.getMetadata","api.RTCEncodedVideoFrame.timestamp","api.RTCEncodedVideoFrame.type","api.RTCRtpReceiver.transform","api.RTCRtpScriptTransform","api.RTCRtpScriptTransform.RTCRtpScriptTransform","api.RTCRtpScriptTransformer","api.RTCRtpScriptTransformer.generateKeyFrame","api.RTCRtpScriptTransformer.options","api.RTCRtpScriptTransformer.readable","api.RTCRtpScriptTransformer.sendKeyFrameRequest","api.RTCRtpScriptTransformer.writable","api.RTCRtpSender.transform","api.RTCTransformEvent","api.RTCTransformEvent.transformer"],"description":"The WebRTC encoded transform API allows you to modify audio and video streams in WebRTC connections. For example, it can be used for visual effects or custom codecs.","description_html":"The WebRTC encoded transform API allows you to modify audio and video streams in WebRTC connections. For example, it can be used for visual effects or custom codecs.","name":"WebRTC encoded transform","spec":"https://w3c.github.io/webrtc-encoded-transform/","status":{"baseline":false,"support":{"firefox":"117","firefox_android":"117","safari":"15.4","safari_ios":"15.4"}}},"webrtc-sctp":{"compat_features":["api.RTCPeerConnection.sctp","api.RTCSctpTransport","api.RTCSctpTransport.maxChannels","api.RTCSctpTransport.maxMessageSize","api.RTCSctpTransport.state","api.RTCSctpTransport.statechange_event","api.RTCSctpTransport.transport"],"description":"The sctp object on RTCPeerConnection represents the negotiated SCTP transport. SCTP (Stream Control Transmission Protocol) is the protocol that RTCDataChannel uses.","description_html":"The <code>sctp</code> object on <code>RTCPeerConnection</code> represents the negotiated SCTP transport. SCTP (Stream Control Transmission Protocol) is the protocol that <code>RTCDataChannel</code> uses.","name":"WebRTC SCTP information","spec":"https://w3c.github.io/webrtc-pc/#rtcsctptransport-interface","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"113","firefox_android":"113","safari":"15.4","safari_ios":"15.4"}}},"webtransport":{"caniuse":"webtransport","compat_features":["api.WebTransport","api.WebTransport.WebTransport","api.WebTransport.close","api.WebTransport.closed","api.WebTransport.createBidirectionalStream","api.WebTransport.createUnidirectionalStream","api.WebTransport.datagrams","api.WebTransport.incomingBidirectionalStreams","api.WebTransport.incomingUnidirectionalStreams","api.WebTransport.ready","api.WebTransportBidirectionalStream","api.WebTransportBidirectionalStream.readable","api.WebTransportBidirectionalStream.writable","api.WebTransportDatagramDuplexStream","api.WebTransportDatagramDuplexStream.incomingHighWaterMark","api.WebTransportDatagramDuplexStream.incomingMaxAge","api.WebTransportDatagramDuplexStream.maxDatagramSize","api.WebTransportDatagramDuplexStream.outgoingHighWaterMark","api.WebTransportDatagramDuplexStream.outgoingMaxAge","api.WebTransportDatagramDuplexStream.readable","api.WebTransportDatagramDuplexStream.writable","api.WebTransportError","api.WebTransportError.WebTransportError","api.WebTransportError.source","api.WebTransportError.streamErrorCode"],"description":"The WebTransport API transmits data between a client and a server, by using the HTTP/3 protocol.","description_html":"The <code>WebTransport</code> API transmits data between a client and a server, by using the HTTP/3 protocol.","name":"WebTransport","spec":"https://w3c.github.io/webtransport/","status":{"baseline":false,"support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"114","firefox_android":"114"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3472"},"webusb":{"caniuse":"webusb","compat_features":["api.Navigator.usb","api.USB","api.USB.connect_event","api.USB.disconnect_event","api.USB.getDevices","api.USB.requestDevice","api.USBAlternateInterface","api.USBAlternateInterface.USBAlternateInterface","api.USBAlternateInterface.alternateSetting","api.USBAlternateInterface.endpoints","api.USBAlternateInterface.interfaceClass","api.USBAlternateInterface.interfaceName","api.USBAlternateInterface.interfaceProtocol","api.USBAlternateInterface.interfaceSubclass","api.USBConfiguration","api.USBConfiguration.USBConfiguration","api.USBConfiguration.configurationName","api.USBConfiguration.configurationValue","api.USBConfiguration.interfaces","api.USBConnectionEvent","api.USBConnectionEvent.USBConnectionEvent","api.USBConnectionEvent.device","api.USBDevice","api.USBDevice.claimInterface","api.USBDevice.clearHalt","api.USBDevice.close","api.USBDevice.configuration","api.USBDevice.configurations","api.USBDevice.controlTransferIn","api.USBDevice.controlTransferOut","api.USBDevice.deviceClass","api.USBDevice.deviceProtocol","api.USBDevice.deviceSubclass","api.USBDevice.deviceVersionMajor","api.USBDevice.deviceVersionMinor","api.USBDevice.deviceVersionSubminor","api.USBDevice.isochronousTransferIn","api.USBDevice.isochronousTransferOut","api.USBDevice.manufacturerName","api.USBDevice.open","api.USBDevice.opened","api.USBDevice.productId","api.USBDevice.productName","api.USBDevice.releaseInterface","api.USBDevice.reset","api.USBDevice.selectAlternateInterface","api.USBDevice.selectConfiguration","api.USBDevice.serialNumber","api.USBDevice.transferIn","api.USBDevice.transferOut","api.USBDevice.usbVersionMajor","api.USBDevice.usbVersionMinor","api.USBDevice.usbVersionSubminor","api.USBDevice.vendorId","api.USBEndpoint","api.USBEndpoint.USBEndpoint","api.USBEndpoint.direction","api.USBEndpoint.endpointNumber","api.USBEndpoint.packetSize","api.USBEndpoint.type","api.USBInTransferResult","api.USBInTransferResult.USBInTransferResult","api.USBInTransferResult.data","api.USBInTransferResult.status","api.USBInterface","api.USBInterface.USBInterface","api.USBInterface.alternate","api.USBInterface.alternates","api.USBInterface.claimed","api.USBInterface.interfaceNumber","api.USBIsochronousInTransferPacket","api.USBIsochronousInTransferPacket.USBIsochronousInTransferPacket","api.USBIsochronousInTransferPacket.data","api.USBIsochronousInTransferPacket.status","api.USBIsochronousInTransferResult","api.USBIsochronousInTransferResult.USBIsochronousInTransferResult","api.USBIsochronousInTransferResult.data","api.USBIsochronousInTransferResult.packets","api.USBIsochronousOutTransferPacket","api.USBIsochronousOutTransferPacket.USBIsochronousOutTransferPacket","api.USBIsochronousOutTransferPacket.bytesWritten","api.USBIsochronousOutTransferPacket.status","api.USBIsochronousOutTransferResult","api.USBIsochronousOutTransferResult.USBIsochronousOutTransferResult","api.USBIsochronousOutTransferResult.packets","api.USBOutTransferResult","api.USBOutTransferResult.USBOutTransferResult","api.USBOutTransferResult.bytesWritten","api.USBOutTransferResult.status"],"description":"The WebUSB API exposes USB compatible devices to web pages.","description_html":"The WebUSB API exposes USB compatible devices to web pages.","name":"WebUSB","spec":"https://wicg.github.io/webusb/","status":{"baseline":false,"support":{"chrome":"61","chrome_android":"61","edge":"79"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1519"},"webvtt":{"caniuse":"webvtt","compat_features":["api.VTTCue","api.VTTCue.VTTCue","api.VTTCue.align","api.VTTCue.getCueAsHTML","api.VTTCue.line","api.VTTCue.position","api.VTTCue.size","api.VTTCue.snapToLines","api.VTTCue.text","api.VTTCue.vertical"],"description":"WebVTT is a captions and subtitles format. WebVTT files are loaded using the <track> element, and the VTTCue API can be used to create or update cues dynamically.","description_html":"WebVTT is a captions and subtitles format. WebVTT files are loaded using the <code>&#x3C;track></code> element, and the <code>VTTCue</code> API can be used to create or update cues dynamically.","name":"WebVTT","spec":"https://w3c.github.io/webvtt/","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"33","chrome_android":"33","edge":"79","firefox":"31","firefox_android":"31","safari":"8","safari_ios":"8"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/409"},"webvtt-region":{"compat_features":["api.VTTRegion","api.VTTRegion.VTTRegion","api.VTTRegion.id","api.VTTRegion.regionAnchorX","api.VTTRegion.regionAnchorY","api.VTTRegion.scroll","api.VTTRegion.viewportAnchorX","api.VTTRegion.viewportAnchorY","api.VTTRegion.width"],"description":"WebVTT regions set the areas of the video where captions or subtitles should be rendered, such as placing roll-up captions used for live captions.","description_html":"WebVTT regions set the areas of the video where captions or subtitles should be rendered, such as placing roll-up captions used for live captions.","name":"WebVTT regions","spec":"https://w3c.github.io/webvtt/#regions","status":{"baseline":false,"support":{"firefox":"59","firefox_android":"59","safari":"7","safari_ios":"7"}}},"where":{"compat_features":["css.selectors.where","css.selectors.where.forgiving_selector_list"],"description":"The :where() CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list. It is functionally equivalent to the selectors in the list, but doesn't affect the CSS rule specificity.","description_html":"The <code>:where()</code> CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list. It is functionally equivalent to the selectors in the list, but doesn't affect the CSS rule specificity.","name":":where()","spec":"https://drafts.csswg.org/selectors-4/#zero-matches","status":{"baseline":"high","baseline_high_date":"2023-07-21","baseline_low_date":"2021-01-21","support":{"chrome":"88","chrome_android":"88","edge":"88","firefox":"82","firefox_android":"82","safari":"14","safari_ios":"14"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2431"}}
1
+ {"abortable-fetch":{"compat_features":["api.fetch.init_signal_parameter","api.Request.signal"],"description":"If you construct a fetch request with an AbortSignal, you can cancel the request.","description_html":"If you construct a fetch request with an <code>AbortSignal</code>, you can cancel the request.","name":"Abortable fetch","spec":"https://fetch.spec.whatwg.org/#ref-for-dom-request-signal%E2%91%A1","status":{"baseline":"high","baseline_high_date":"2021-09-25","baseline_low_date":"2019-03-25","support":{"chrome":"66","chrome_android":"66","edge":"16","firefox":"57","firefox_android":"57","safari":"12.1","safari_ios":"12.2"}}},"aborting":{"caniuse":"abortcontroller","compat_features":["api.AbortController","api.AbortController.AbortController","api.AbortController.abort","api.AbortController.signal","api.AbortSignal","api.AbortSignal.abort_event","api.AbortSignal.aborted"],"description":"The AbortController and AbortSignal APIs allow you to cancel an ongoing operation, such as a fetch() request.","description_html":"The <code>AbortController</code> and <code>AbortSignal</code> APIs allow you to cancel an ongoing operation, such as a <code>fetch()</code> request.","name":"AbortController and AbortSignal","spec":"https://dom.spec.whatwg.org/#aborting-ongoing-activities","status":{"baseline":"high","baseline_high_date":"2021-09-25","baseline_low_date":"2019-03-25","support":{"chrome":"66","chrome_android":"66","edge":"16","firefox":"57","firefox_android":"57","safari":"12.1","safari_ios":"12.2"}}},"abortsignal-any":{"compat_features":["api.AbortSignal.any_static"],"description":"The AbortSignal.any() static method combines an iterable of abort signals into a single signal, with the abort reason taken from the first signal to abort.","description_html":"The <code>AbortSignal.any()</code> static method combines an iterable of abort signals into a single signal, with the abort reason taken from the first signal to abort.","name":"AbortSignal.any()","spec":"https://dom.spec.whatwg.org/#dom-abortsignal-any","status":{"baseline":"low","baseline_low_date":"2024-03-19","support":{"chrome":"116","chrome_android":"116","edge":"116","firefox":"124","firefox_android":"124","safari":"17.4","safari_ios":"17.4"}}},"abs-sign":{"compat_features":["css.types.abs","css.types.sign"],"description":"The abs() and sign() CSS functions compute the absolute value or the sign of the input.","description_html":"The <code>abs()</code> and <code>sign()</code> CSS functions compute the absolute value or the sign of the input.","name":"abs() and sign()","spec":"https://drafts.csswg.org/css-values-4/#sign-funcs","status":{"baseline":false,"support":{"firefox":"118","firefox_android":"118","safari":"15.4","safari_ios":"15.4"}}},"accent-color":{"compat_features":["css.properties.accent-color","css.properties.accent-color.auto"],"description":"The accent-color CSS property sets a color for checkboxes, radio buttons, and other form controls.","description_html":"The <code>accent-color</code> CSS property sets a color for checkboxes, radio buttons, and other form controls.","name":"accent-color","spec":"https://drafts.csswg.org/css-ui-4/#widget-accent","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"93","chrome_android":"93","edge":"93","firefox":"92","firefox_android":"92","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/695"},"anchor-positioning":{"caniuse":"css-anchor-positioning","compat_features":["api.CSSPositionTryDescriptors","api.CSSPositionTryDescriptors.align-self","api.CSSPositionTryDescriptors.alignSelf","api.CSSPositionTryDescriptors.block-size","api.CSSPositionTryDescriptors.blockSize","api.CSSPositionTryDescriptors.bottom","api.CSSPositionTryDescriptors.height","api.CSSPositionTryDescriptors.inline-size","api.CSSPositionTryDescriptors.inlineSize","api.CSSPositionTryDescriptors.inset","api.CSSPositionTryDescriptors.inset-area","api.CSSPositionTryDescriptors.inset-block","api.CSSPositionTryDescriptors.inset-block-end","api.CSSPositionTryDescriptors.inset-block-start","api.CSSPositionTryDescriptors.inset-inline","api.CSSPositionTryDescriptors.inset-inline-end","api.CSSPositionTryDescriptors.inset-inline-start","api.CSSPositionTryDescriptors.insetArea","api.CSSPositionTryDescriptors.insetBlock","api.CSSPositionTryDescriptors.insetBlockEnd","api.CSSPositionTryDescriptors.insetBlockStart","api.CSSPositionTryDescriptors.insetInline","api.CSSPositionTryDescriptors.insetInlineEnd","api.CSSPositionTryDescriptors.insetInlineStart","api.CSSPositionTryDescriptors.justify-self","api.CSSPositionTryDescriptors.justifySelf","api.CSSPositionTryDescriptors.left","api.CSSPositionTryDescriptors.margin","api.CSSPositionTryDescriptors.margin-block","api.CSSPositionTryDescriptors.margin-block-end","api.CSSPositionTryDescriptors.margin-block-start","api.CSSPositionTryDescriptors.margin-bottom","api.CSSPositionTryDescriptors.margin-inline","api.CSSPositionTryDescriptors.margin-inline-end","api.CSSPositionTryDescriptors.margin-inline-start","api.CSSPositionTryDescriptors.margin-left","api.CSSPositionTryDescriptors.margin-right","api.CSSPositionTryDescriptors.margin-top","api.CSSPositionTryDescriptors.marginBlock","api.CSSPositionTryDescriptors.marginBlockEnd","api.CSSPositionTryDescriptors.marginBlockStart","api.CSSPositionTryDescriptors.marginBottom","api.CSSPositionTryDescriptors.marginInline","api.CSSPositionTryDescriptors.marginInlineEnd","api.CSSPositionTryDescriptors.marginInlineStart","api.CSSPositionTryDescriptors.marginLeft","api.CSSPositionTryDescriptors.marginRight","api.CSSPositionTryDescriptors.marginTop","api.CSSPositionTryDescriptors.max-block-size","api.CSSPositionTryDescriptors.max-height","api.CSSPositionTryDescriptors.max-inline-size","api.CSSPositionTryDescriptors.max-width","api.CSSPositionTryDescriptors.maxBlockSize","api.CSSPositionTryDescriptors.maxHeight","api.CSSPositionTryDescriptors.maxInlineSize","api.CSSPositionTryDescriptors.maxWidth","api.CSSPositionTryDescriptors.min-block-size","api.CSSPositionTryDescriptors.min-height","api.CSSPositionTryDescriptors.min-inline-size","api.CSSPositionTryDescriptors.min-width","api.CSSPositionTryDescriptors.minBlockSize","api.CSSPositionTryDescriptors.minHeight","api.CSSPositionTryDescriptors.minInlineSize","api.CSSPositionTryDescriptors.minWidth","api.CSSPositionTryDescriptors.place-self","api.CSSPositionTryDescriptors.placeSelf","api.CSSPositionTryDescriptors.position-anchor","api.CSSPositionTryDescriptors.positionAnchor","api.CSSPositionTryDescriptors.right","api.CSSPositionTryDescriptors.top","api.CSSPositionTryDescriptors.width","api.CSSPositionTryRule","api.CSSPositionTryRule.name","api.CSSPositionTryRule.style","css.at-rules.position-try","css.properties.align-items.anchor-center","css.properties.align-self.anchor-center","css.properties.anchor-name","css.properties.anchor-name.none","css.properties.block-size.anchor-size","css.properties.bottom.anchor","css.properties.height.anchor-size","css.properties.inline-size.anchor-size","css.properties.inset.anchor","css.properties.inset-area","css.properties.inset-area.block-end","css.properties.inset-area.block-start","css.properties.inset-area.bottom","css.properties.inset-area.center","css.properties.inset-area.end","css.properties.inset-area.inline-end","css.properties.inset-area.inline-start","css.properties.inset-area.left","css.properties.inset-area.none","css.properties.inset-area.right","css.properties.inset-area.self-end","css.properties.inset-area.self-start","css.properties.inset-area.span-all","css.properties.inset-area.span-block-end","css.properties.inset-area.span-block-start","css.properties.inset-area.span-bottom","css.properties.inset-area.span-end","css.properties.inset-area.span-inline-end","css.properties.inset-area.span-inline-start","css.properties.inset-area.span-start","css.properties.inset-area.span-top","css.properties.inset-area.span-x-end","css.properties.inset-area.span-x-start","css.properties.inset-area.span-y-end","css.properties.inset-area.span-y-start","css.properties.inset-area.start","css.properties.inset-area.top","css.properties.inset-area.x-end","css.properties.inset-area.x-self-end","css.properties.inset-area.x-self-start","css.properties.inset-area.x-start","css.properties.inset-area.y-end","css.properties.inset-area.y-self-end","css.properties.inset-area.y-self-start","css.properties.inset-area.y-start","css.properties.inset-block.anchor","css.properties.inset-block-end.anchor","css.properties.inset-block-start.anchor","css.properties.inset-inline.anchor","css.properties.inset-inline-end.anchor","css.properties.inset-inline-start.anchor","css.properties.justify-items.anchor-center","css.properties.justify-self.anchor-center","css.properties.left.anchor","css.properties.max-block-size.anchor-size","css.properties.max-height.anchor-size","css.properties.max-inline-size.anchor-size","css.properties.max-width.anchor-size","css.properties.min-block-size.anchor-size","css.properties.min-height.anchor-size","css.properties.min-inline-size.anchor-size","css.properties.min-width.anchor-size","css.properties.position-anchor","css.properties.position-try","css.properties.position-try-options","css.properties.position-try-options.flip-block","css.properties.position-try-options.flip-inline","css.properties.position-try-options.flip-start","css.properties.position-try-options.none","css.properties.position-try-order","css.properties.position-try-order.most-block-size","css.properties.position-try-order.most-height","css.properties.position-try-order.most-inline-size","css.properties.position-try-order.most-width","css.properties.position-try-order.normal","css.properties.position-visibility","css.properties.position-visibility.always","css.properties.position-visibility.anchors-visible","css.properties.position-visibility.no-overflow","css.properties.right.anchor","css.properties.top.anchor","css.properties.width.anchor-size","css.types.anchor","css.types.anchor-size"],"description":"Anchor positioning places an element based on the position of another element. For example, you can place a tooltip next to the content it references.","description_html":"Anchor positioning places an element based on the position of another element. For example, you can place a tooltip next to the content it references.","name":"Anchor positioning","spec":"https://drafts.csswg.org/css-anchor-position-1/#anchoring","status":{"baseline":false,"support":{"chrome":"125","chrome_android":"125"}}},"animation-composition":{"compat_features":["css.properties.animation-composition"],"description":"The animation-composition CSS property chooses how to combine animations that affect the same property.","description_html":"The <code>animation-composition</code> CSS property chooses how to combine animations that affect the same property.","name":"animation-composition","spec":"https://drafts.csswg.org/css-animations-2/#animation-composition","status":{"baseline":"low","baseline_low_date":"2023-07-04","support":{"chrome":"112","chrome_android":"112","edge":"112","firefox":"115","firefox_android":"115","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/743"},"appearance":{"compat_features":["css.properties.appearance","css.properties.appearance.auto","css.properties.appearance.button","css.properties.appearance.checkbox","css.properties.appearance.listbox","css.properties.appearance.menulist","css.properties.appearance.menulist-button","css.properties.appearance.meter","css.properties.appearance.none","css.properties.appearance.progress-bar","css.properties.appearance.radio","css.properties.appearance.searchfield","css.properties.appearance.textarea","css.properties.appearance.textfield"],"description":"The appearance CSS property controls the appearance of form controls. Using appearance: none disables any default native appearance and allows the elements to be styled with CSS.","description_html":"The <code>appearance</code> CSS property controls the appearance of form controls. Using <code>appearance: none</code> disables any default native appearance and allows the elements to be styled with CSS.","name":"appearance","spec":"https://drafts.csswg.org/css-ui-4/#appearance-switching","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"84","chrome_android":"84","edge":"84","firefox":"80","firefox_android":"80","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/658"},"aria-attribute-reflection":{"compat_features":["api.Element.ariaAtomic","api.Element.ariaAutoComplete","api.Element.ariaBusy","api.Element.ariaChecked","api.Element.ariaColCount","api.Element.ariaColIndex","api.Element.ariaColSpan","api.Element.ariaCurrent","api.Element.ariaDisabled","api.Element.ariaExpanded","api.Element.ariaHasPopup","api.Element.ariaHidden","api.Element.ariaInvalid","api.Element.ariaKeyShortcuts","api.Element.ariaLabel","api.Element.ariaLevel","api.Element.ariaLive","api.Element.ariaModal","api.Element.ariaMultiLine","api.Element.ariaMultiSelectable","api.Element.ariaOrientation","api.Element.ariaPlaceholder","api.Element.ariaPosInSet","api.Element.ariaPressed","api.Element.ariaReadOnly","api.Element.ariaRelevant","api.Element.ariaRequired","api.Element.ariaRoleDescription","api.Element.ariaRowCount","api.Element.ariaRowIndex","api.Element.ariaRowSpan","api.Element.ariaSelected","api.Element.ariaSetSize","api.Element.ariaSort","api.Element.ariaValueMax","api.Element.ariaValueMin","api.Element.ariaValueNow","api.Element.ariaValueText","api.Element.role"],"description":"WAI-ARIA attributes have corresponding properties on Element and ElementInternals objects.","description_html":"WAI-ARIA attributes have corresponding properties on <code>Element</code> and <code>ElementInternals</code> objects.","name":"ARIA attribute reflection","spec":"https://w3c.github.io/aria/#accessibilityroleandproperties-correspondence","status":{"baseline":"low","baseline_low_date":"2023-10-24","support":{"chrome":"103","chrome_android":"103","edge":"103","firefox":"119","firefox_android":"119","safari":"12.1","safari_ios":"12.2"}}},"array":{"compat_features":["javascript.builtins.Array","javascript.builtins.Array.Array","javascript.builtins.Array.concat","javascript.builtins.Array.join","javascript.builtins.Array.length","javascript.builtins.Array.pop","javascript.builtins.Array.push","javascript.builtins.Array.reverse","javascript.builtins.Array.shift","javascript.builtins.Array.slice","javascript.builtins.Array.sort","javascript.builtins.Array.toLocaleString","javascript.builtins.Array.toString","javascript.builtins.Array.unshift","javascript.grammar.array_literals"],"description":"Arrays are ordered lists of JavaScript values.","description_html":"Arrays are ordered lists of JavaScript values.","name":"Array (initial support)","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array-objects","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array-constructor","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.concat","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.join","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-properties-of-array-instances-length","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.pop","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.push","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.reverse","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.shift","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.slice","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.sort","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tolocalestring","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tostring","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.unshift","https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-array-initializer"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}}},"array-at":{"compat_features":["javascript.builtins.Array.at","javascript.builtins.TypedArray.at"],"description":"The at() method of arrays and typed arrays returns the item at an index, including negative indices for getting items relative to the end of an array. Also known as the relative indexing method.","description_html":"The <code>at()</code> method of arrays and typed arrays returns the item at an index, including negative indices for getting items relative to the end of an array. Also known as the relative indexing method.","name":"Array at()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.at","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"92","chrome_android":"92","edge":"92","firefox":"90","firefox_android":"90","safari":"15.4","safari_ios":"15.4"}}},"array-by-copy":{"compat_features":["javascript.builtins.Array.toReversed","javascript.builtins.Array.toSorted","javascript.builtins.Array.toSpliced","javascript.builtins.Array.with","javascript.builtins.TypedArray.toReversed","javascript.builtins.TypedArray.toSorted","javascript.builtins.TypedArray.with"],"description":"The toReserved(), toSorted(), toSpliced(), and with() methods of arrays and typed arrays return changed copies of arrays. They stand in contrast to methods such as sort() or reverse() that change arrays in place.","description_html":"The <code>toReserved()</code>, <code>toSorted()</code>, <code>toSpliced()</code>, and <code>with()</code> methods of arrays and typed arrays return changed copies of arrays. They stand in contrast to methods such as <code>sort()</code> or <code>reverse()</code> that change arrays in place.","name":"Array by copy","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.toreversed","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tosorted","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.tospliced","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.with","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.toreversed","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.tosorted","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.with"],"status":{"baseline":"low","baseline_low_date":"2023-07-04","support":{"chrome":"110","chrome_android":"110","edge":"110","firefox":"115","firefox_android":"115","safari":"16","safari_ios":"16"}}},"array-copywithin":{"compat_features":["javascript.builtins.Array.copyWithin","javascript.builtins.TypedArray.copyWithin"],"description":"The copyWithin() method of arrays and typed arrays shifts or copies items of an array to another index of the array without changing its length.","description_html":"The <code>copyWithin()</code> method of arrays and typed arrays shifts or copies items of an array to another index of the array without changing its length.","name":"Array copyWithin()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.copywithin","status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"32","firefox_android":"32","safari":"9","safari_ios":"9"}}},"array-fill":{"compat_features":["javascript.builtins.Array.fill","javascript.builtins.TypedArray.fill"],"description":"The fill() method of arrays and typed arrays sets all or some items of an array to a given a value.","description_html":"The <code>fill()</code> method of arrays and typed arrays sets all or some items of an array to a given a value.","name":"Array fill()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.fill","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.fill"],"status":{"baseline":"high","baseline_high_date":"2018-03-01","baseline_low_date":"2015-09-01","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"31","firefox_android":"31","safari":"8","safari_ios":"8"}}},"array-find":{"compat_features":["javascript.builtins.Array.find","javascript.builtins.Array.findIndex","javascript.builtins.TypedArray.find","javascript.builtins.TypedArray.findIndex"],"description":"The find() and findIndex() methods of arrays and typed arrays search an array for the first item that satisfies a test function.","description_html":"The <code>find()</code> and <code>findIndex()</code> methods of arrays and typed arrays search an array for the first item that satisfies a test function.","name":"Array find() and findIndex()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.findindex","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.find","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.findindex"],"status":{"baseline":"high","baseline_high_date":"2018-03-01","baseline_low_date":"2015-09-01","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"25","firefox_android":"4","safari":"8","safari_ios":"8"}}},"array-findlast":{"compat_features":["javascript.builtins.Array.findLast","javascript.builtins.Array.findLastIndex","javascript.builtins.TypedArray.findLast","javascript.builtins.TypedArray.findLastIndex"],"description":"The findLast() and findLastIndex() methods of arrays and typed arrays search an array in reverse order for the first item that satisfies a test function.","description_html":"The <code>findLast()</code> and <code>findLastIndex()</code> methods of arrays and typed arrays search an array in reverse order for the first item that satisfies a test function.","name":"Array findLast() and findLastIndex()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.findlast","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.findlastindex","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.findlast","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.findlastindex"],"status":{"baseline":"low","baseline_low_date":"2022-08-23","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"104","firefox_android":"104","safari":"15.4","safari_ios":"15.4"}}},"array-flat":{"caniuse":"array-flat","compat_features":["javascript.builtins.Array.flat","javascript.builtins.Array.flatMap"],"description":"The flat() and flatMap() methods for arrays creates a new array such that each nested array item is concatenated into it.","description_html":"The <code>flat()</code> and <code>flatMap()</code> methods for arrays creates a new array such that each nested array item is concatenated into it.","name":"Array flat() and flatMap()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.flat","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.flatmap"],"status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"62","firefox_android":"62","safari":"12","safari_ios":"12"}}},"array-from":{"compat_features":["javascript.builtins.Array.from","javascript.builtins.TypedArray.from"],"description":"The Array.from() and typed array .from() static methods copy items from an iterable or array-like object to make a new array.","description_html":"The <code>Array.from()</code> and typed array <code>.from()</code> static methods copy items from an iterable or array-like object to make a new array.","name":"Array.from()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.of"],"status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"32","firefox_android":"32","safari":"9","safari_ios":"9"}}},"array-fromasync":{"compat_features":["javascript.builtins.Array.fromAsync"],"description":"The Array.fromAsync() static method copies items from an async iterable object to make a new array.","description_html":"The <code>Array.fromAsync()</code> static method copies items from an async iterable object to make a new array.","name":"Array.fromAsync()","spec":"https://tc39.es/proposal-array-from-async/#sec-array.fromAsync","status":{"baseline":"low","baseline_low_date":"2024-01-25","support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"115","firefox_android":"115","safari":"16.4","safari_ios":"16.4"}}},"array-group":{"compat_features":["javascript.builtins.Map.groupBy","javascript.builtins.Object.groupBy"],"description":"The Object.groupBy() and Map.groupBy() static methods group values of arrays and iterables based on a function that returns a key for each value.","description_html":"The <code>Object.groupBy()</code> and <code>Map.groupBy()</code> static methods group values of arrays and iterables based on a function that returns a key for each value.","name":"Array grouping","spec":"https://tc39.es/proposal-array-grouping/","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"117","chrome_android":"117","edge":"117","firefox":"119","firefox_android":"119","safari":"17.4","safari_ios":"17.4"}}},"array-includes":{"compat_features":["javascript.builtins.Array.includes","javascript.builtins.TypedArray.includes"],"description":"The includes() method of arrays and typed arrays returns whether a given value appears in the array.","description_html":"The <code>includes()</code> method of arrays and typed arrays returns whether a given value appears in the array.","name":"Array includes()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.includes","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.includes"],"status":{"baseline":"high","baseline_high_date":"2018-06-01","baseline_low_date":"2015-12-01","support":{"chrome":"47","chrome_android":"47","edge":"14","firefox":"43","firefox_android":"43","safari":"9","safari_ios":"9"}}},"array-isarray":{"compat_features":["javascript.builtins.Array.isArray"],"description":"The Array.isArray() static method checks whether a value is an array.","description_html":"The <code>Array.isArray()</code> static method checks whether a value is an array.","name":"Array.isArray()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.isarray","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"4","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"5"}}},"array-iteration-methods":{"compat_features":["javascript.builtins.Array.every","javascript.builtins.Array.filter","javascript.builtins.Array.forEach","javascript.builtins.Array.indexOf","javascript.builtins.Array.lastIndexOf","javascript.builtins.Array.map","javascript.builtins.Array.reduce","javascript.builtins.Array.reduceRight","javascript.builtins.Array.some"],"description":"Array iteration methods","description_html":"Array iteration methods","name":"Array iteration methods","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.every","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.filter","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.foreach","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.indexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.lastindexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.map","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.reduce","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.reduceright","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.some"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"3","chrome_android":"18","edge":"12","firefox":"3","firefox_android":"4","safari":"4","safari_ios":"3.2"}}},"array-iterators":{"compat_features":["javascript.builtins.Array.@@iterator","javascript.builtins.Array.entries","javascript.builtins.Array.keys","javascript.builtins.Array.values"],"description":"Arrays are iterable with the for…of statement and enumerable with the methods entries(), keys(), and values().","description_html":"Arrays are iterable with the <code>for…of</code> statement and enumerable with the methods <code>entries()</code>, <code>keys()</code>, and <code>values()</code>.","name":"Array iterators","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype-@@iterator","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.entries","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.keys","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.values"],"status":{"baseline":"high","baseline_high_date":"2019-03-20","baseline_low_date":"2016-09-20","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"36","firefox_android":"36","safari":"10","safari_ios":"10"}}},"array-of":{"compat_features":["javascript.builtins.Array.of","javascript.builtins.TypedArray.of"],"description":"The Array.of() and typed array .of() static methods create new arrays from the values of any number of arguments.","description_html":"The <code>Array.of()</code> and typed array <code>.of()</code> static methods create new arrays from the values of any number of arguments.","name":"Array.of()","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.of","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.of"],"status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"45","chrome_android":"39","edge":"12","firefox":"25","firefox_android":"25","safari":"9","safari_ios":"9"}}},"array-splice":{"compat_features":["javascript.builtins.Array.splice"],"description":"The array splice() method changes an array in-place. You can use it to delete items, overwrite items, or insert items, starting from an index.","description_html":"The array <code>splice()</code> method changes an array in-place. You can use it to delete items, overwrite items, or insert items, starting from an index.","name":"Array splice()","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.splice","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}}},"aspect-ratio":{"compat_features":["css.properties.aspect-ratio","html.elements.img.aspect_ratio_computed_from_attributes","html.elements.video.aspect_ratio_computed_from_attributes"],"description":"The aspect-ratio CSS property controls the width-to-height ratio of elements. For <img> and <video> elements, the width and height attributes used together with height: auto control the aspect ratio while the image/video is loading.","description_html":"The <code>aspect-ratio</code> CSS property controls the width-to-height ratio of elements. For <code>&#x3C;img></code> and <code>&#x3C;video></code> elements, the <code>width</code> and <code>height</code> attributes used together with <code>height: auto</code> control the aspect ratio while the image/video is loading.","name":"aspect-ratio","spec":"https://drafts.csswg.org/css-sizing-4/#aspect-ratio","status":{"baseline":"high","baseline_high_date":"2024-03-20","baseline_low_date":"2021-09-20","support":{"chrome":"88","chrome_android":"88","edge":"88","firefox":"89","firefox_android":"89","safari":"15","safari_ios":"15"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/657"},"async-await":{"caniuse":"async-functions","compat_features":["javascript.builtins.AsyncFunction","javascript.builtins.AsyncFunction.AsyncFunction","javascript.operators.async_function","javascript.operators.await","javascript.statements.async_function"],"description":"The async and await keywords allow you to use the asynchronous, promise-based behavior of a function without using promise chains.","description_html":"The <code>async</code> and <code>await</code> keywords allow you to use the asynchronous, promise-based behavior of a function without using promise chains.","name":"Async functions","spec":"https://tc39.es/ecma262/multipage/ecmascript-language-functions-and-classes.html#sec-async-function-definitions","status":{"baseline":"high","baseline_high_date":"2019-10-05","baseline_low_date":"2017-04-05","support":{"chrome":"55","chrome_android":"55","edge":"15","firefox":"52","firefox_android":"52","safari":"10.1","safari_ios":"10.3"}}},"async-clipboard":{"caniuse":"async-clipboard","compat_features":["api.Clipboard","api.Clipboard.read","api.Clipboard.readText","api.Clipboard.write","api.Clipboard.writeText","api.ClipboardEvent","api.ClipboardEvent.ClipboardEvent","api.ClipboardEvent.clipboardData","api.ClipboardItem","api.ClipboardItem.ClipboardItem","api.ClipboardItem.getType","api.ClipboardItem.presentationStyle","api.ClipboardItem.types","api.Navigator.clipboard","api.Permissions.permission_clipboard-read"],"description":"The navigator.clipboard API asynchronously reads and writes to the system clipboard.","description_html":"The <code>navigator.clipboard</code> API asynchronously reads and writes to the system clipboard.","name":"Async clipboard","spec":"https://w3c.github.io/clipboard-apis/#async-clipboard-api","status":{"baseline":false,"support":{}}},"audio-session":{"compat_features":["api.AudioSession","api.AudioSession.type","api.Navigator.audioSession"],"description":"The navigator.audioSession API controls how audio playback interacts with other applications. For example, playing music can pause audio from other applications, while ambient audio can play at the same time.","description_html":"The <code>navigator.audioSession</code> API controls how audio playback interacts with other applications. For example, playing music can pause audio from other applications, while ambient audio can play at the same time.","name":"Audio session","spec":"https://w3c.github.io/audio-session/","status":{"baseline":false,"support":{"safari":"16.4","safari_ios":"16.4"}}},"audio-video-tracks":{"caniuse":["audiotracks","videotracks"],"compat_features":["api.AudioTrack","api.AudioTrack.enabled","api.AudioTrack.id","api.AudioTrack.kind","api.AudioTrack.label","api.AudioTrack.language","api.AudioTrackList","api.AudioTrackList.addtrack_event","api.AudioTrackList.change_event","api.AudioTrackList.getTrackById","api.AudioTrackList.length","api.AudioTrackList.removetrack_event","api.HTMLMediaElement.audioTracks","api.HTMLMediaElement.videoTracks","api.VideoTrack","api.VideoTrack.id","api.VideoTrack.kind","api.VideoTrack.label","api.VideoTrack.language","api.VideoTrack.selected","api.VideoTrackList","api.VideoTrackList.addtrack_event","api.VideoTrackList.change_event","api.VideoTrackList.getTrackById","api.VideoTrackList.length","api.VideoTrackList.removetrack_event","api.VideoTrackList.selectedIndex"],"description":"The audioTracks and videoTracks APIs for media elements switch audio and video tracks during playback.","description_html":"The <code>audioTracks</code> and <code>videoTracks</code> APIs for media elements switch audio and video tracks during playback.","name":"Audio and video tracks","spec":"https://html.spec.whatwg.org/multipage/media.html#media-resources-with-multiple-media-tracks","status":{"baseline":false,"support":{"safari":"8","safari_ios":"8"}}},"autofill":{"compat_features":["css.selectors.autofill"],"description":"The :autofill pseudo-class matches <input> elements that have been filled in automatically by the browser.","description_html":"The <code>:autofill</code> pseudo-class matches <code>&#x3C;input></code> elements that have been filled in automatically by the browser.","name":":autofill","spec":"https://html.spec.whatwg.org/multipage/semantics-other.html#selector-autofill","status":{"baseline":"low","baseline_low_date":"2023-02-09","support":{"chrome":"110","chrome_android":"110","edge":"110","firefox":"86","firefox_android":"86","safari":"15","safari_ios":"15"}}},"autofocus":{"caniuse":"autofocus","compat_features":["api.HTMLElement.autofocus","api.MathMLElement.autofocus","api.SVGElement.autofocus","html.global_attributes.autofocus"],"description":"The autofocus HTML attribute gives focus to an element on page load.","description_html":"The <code>autofocus</code> HTML attribute gives focus to an element on page load.","name":"Autofocus","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-autofocus-attribute","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"4","safari_ios":"3.2"}}},"autonomous-custom-elements":{"compat_features":["api.CustomElementRegistry","api.CustomElementRegistry.define","api.Window.customElements","css.selectors.defined"],"description":"Autonomous custom elements are HTML elements with a hyphenated tag name (like <example-element>) that have behaviors you define.","description_html":"Autonomous custom elements are HTML elements with a hyphenated tag name (like <code>&#x3C;example-element></code>) that have behaviors you define.","name":"Autonomous custom elements","spec":"https://html.spec.whatwg.org/multipage/custom-elements.html#autonomous-custom-element","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"54","chrome_android":"54","edge":"79","firefox":"63","firefox_android":"63","safari":"10.1","safari_ios":"10.3"}}},"avif":{"caniuse":"avif","description":"AVIF (AV1 Image File Format) is an image format based on the AV1 video format.","description_html":"AVIF (AV1 Image File Format) is an image format based on the AV1 video format.","name":"AVIF","spec":"https://aomediacodec.github.io/av1-avif/","status":{"baseline":"low","baseline_low_date":"2024-01-26","support":{"chrome":"85","chrome_android":"85","edge":"121","firefox":"93","firefox_android":"93","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3798"},"backdrop-filter":{"caniuse":"css-backdrop-filter","compat_features":["css.properties.backdrop-filter"],"description":"The backdrop-filter CSS property applies graphical effects such as blurring or color shifting to the area behind an element.","description_html":"The <code>backdrop-filter</code> CSS property applies graphical effects such as blurring or color shifting to the area behind an element.","name":"backdrop-filter","spec":"https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty","status":{"baseline":false,"support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"103","firefox_android":"103"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/508"},"background-clip":{"compat_features":["css.properties.background-clip","css.properties.background-clip.border-box","css.properties.background-clip.content-box","css.properties.background-clip.padding-box"],"description":"The background-clip CSS property sets the extent of the background: the padding box, the content box, or the default border box.","description_html":"The <code>background-clip</code> CSS property sets the extent of the background: the padding box, the content box, or the default border box.","name":"background-clip","spec":"https://drafts.csswg.org/css-backgrounds-3/#background-clip","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"5"}}},"background-clip-text":{"compat_features":["css.properties.background-clip.text"],"description":"The background-clip: text CSS declaration draws the background underneath only the text in the element.","description_html":"The <code>background-clip: text</code> CSS declaration draws the background underneath only the text in the element.","name":"background-clip: text","spec":"https://drafts.csswg.org/css-backgrounds-4/#background-clip","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"49","firefox_android":"49","safari":"14","safari_ios":"14"}}},"background-fetch":{"compat_features":["api.BackgroundFetchEvent","api.BackgroundFetchEvent.BackgroundFetchEvent","api.BackgroundFetchEvent.registration","api.BackgroundFetchManager","api.BackgroundFetchManager.fetch","api.BackgroundFetchManager.get","api.BackgroundFetchManager.getIds","api.BackgroundFetchRecord","api.BackgroundFetchRecord.request","api.BackgroundFetchRecord.responseReady","api.BackgroundFetchRegistration.abort","api.BackgroundFetchRegistration.downloadTotal","api.BackgroundFetchRegistration.downloaded","api.BackgroundFetchRegistration.failureReason","api.BackgroundFetchRegistration.id","api.BackgroundFetchRegistration.match","api.BackgroundFetchRegistration.matchAll","api.BackgroundFetchRegistration.progress_event","api.BackgroundFetchRegistration.recordsAvailable","api.BackgroundFetchRegistration.result","api.BackgroundFetchRegistration.uploadTotal","api.BackgroundFetchRegistration.uploaded","api.BackgroundFetchUpdateUIEvent","api.BackgroundFetchUpdateUIEvent.BackgroundFetchUpdateUIEvent","api.BackgroundFetchUpdateUIEvent.updateUI","api.ServiceWorkerGlobalScope.backgroundfetchabort_event","api.ServiceWorkerGlobalScope.backgroundfetchclick_event","api.ServiceWorkerGlobalScope.backgroundfetchfail_event","api.ServiceWorkerGlobalScope.backgroundfetchsuccess_event","api.ServiceWorkerRegistration.backgroundFetch"],"description":"Background fetch downloads data in the background even when the web page is closed.","description_html":"Background fetch downloads data in the background even when the web page is closed.","name":"Background fetch","spec":"https://wicg.github.io/background-fetch/","status":{"baseline":false,"support":{"chrome":"74","chrome_android":"74","edge":"79"}}},"baseline-source":{"compat_features":["css.properties.baseline-source","css.properties.baseline-source.auto","css.properties.baseline-source.first","css.properties.baseline-source.last"],"description":"The baseline-source CSS property controls how inline-level boxes with multiple lines of text are aligned with the surrounding text. By default, which typographic baseline is used depends on the display property value.","description_html":"The <code>baseline-source</code> CSS property controls how inline-level boxes with multiple lines of text are aligned with the surrounding text. By default, which typographic baseline is used depends on the <code>display</code> property value.","name":"baseline-source","spec":"https://drafts.csswg.org/css-inline-3/#baseline-source","status":{"baseline":false,"support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"115","firefox_android":"115"}}},"bigint":{"caniuse":"bigint","compat_features":["javascript.builtins.BigInt","javascript.builtins.BigInt.BigInt","javascript.builtins.BigInt.asIntN","javascript.builtins.BigInt.asUintN","javascript.builtins.BigInt.toLocaleString","javascript.builtins.BigInt.toString","javascript.builtins.BigInt.valueOf"],"description":"The BigInt JavaScript type represents integers of any size, including integers too large for the primitive Number type.","description_html":"The <code>BigInt</code> JavaScript type represents integers of any size, including integers too large for the primitive <code>Number</code> type.","name":"BigInt","spec":"https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-bigint-objects","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"67","chrome_android":"67","edge":"79","firefox":"68","firefox_android":"68","safari":"14","safari_ios":"14"}}},"blocking-render":{"compat_features":["api.HTMLLinkElement.blocking","api.HTMLScriptElement.blocking","api.HTMLStyleElement.blocking","html.elements.link.blocking","html.elements.script.blocking","html.elements.style.blocking"],"description":"The blocking=\"render\" attribute for <link>, <script>, and <style> elements blocks rendering until the external script or stylesheet has been loaded. For <link rel=\"expect\">, rendering is blocked until a specific element is in the DOM.","description_html":"The <code>blocking=\"render\"</code> attribute for <code>&#x3C;link></code>, <code>&#x3C;script></code>, and <code>&#x3C;style></code> elements blocks rendering until the external script or stylesheet has been loaded. For <code>&#x3C;link rel=\"expect\"></code>, rendering is blocked until a specific element is in the DOM.","name":"blocking=\"render\"","spec":"https://html.spec.whatwg.org/multipage/urls-and-fetching.html#blocking-attributes","status":{"baseline":false,"support":{"chrome":"105","chrome_android":"105","edge":"105"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4183"},"border-image":{"caniuse":"border-image","compat_features":["css.properties.border-image","css.properties.border-image.fill","css.properties.border-image.gradient","css.properties.border-image.optional_border_image_slice","css.properties.border-image-outset","css.properties.border-image-repeat","css.properties.border-image-repeat.round","css.properties.border-image-repeat.space","css.properties.border-image-slice","css.properties.border-image-source","css.properties.border-image-width"],"description":"The border-image CSS property draws an image around an element.","description_html":"The <code>border-image</code> CSS property draws an image around an element.","name":"Border images","spec":"https://drafts.csswg.org/css-backgrounds-3/#border-images","status":{"baseline":"high","baseline_high_date":"2019-08-01","baseline_low_date":"2017-02-01","support":{"chrome":"56","chrome_android":"56","edge":"12","firefox":"50","firefox_android":"50","safari":"9.1","safari_ios":"9.3"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/43"},"broadcast-channel":{"caniuse":"broadcastchannel","compat_features":["api.BroadcastChannel","api.BroadcastChannel.BroadcastChannel","api.BroadcastChannel.close","api.BroadcastChannel.message_event","api.BroadcastChannel.messageerror_event","api.BroadcastChannel.name","api.BroadcastChannel.postMessage"],"description":"The BroadcastChannel API allows you to send messages between same-origin browsing contexts, such as between the same page loaded in multiple tabs.","description_html":"The <code>BroadcastChannel</code> API allows you to send messages between same-origin browsing contexts, such as between the same page loaded in multiple tabs.","name":"BroadcastChannel","spec":"https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"60","chrome_android":"60","edge":"79","firefox":"57","firefox_android":"57","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1447"},"calc":{"caniuse":"calc","compat_features":["css.types.calc"],"description":"The calc() CSS function computes mathematical expressions such a calc(100%/3 - 1em).","description_html":"The <code>calc()</code> CSS function computes mathematical expressions such a <code>calc(100%/3 - 1em)</code>.","name":"calc()","spec":"https://drafts.csswg.org/css-values-3/#calc-notation","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"26","chrome_android":"28","edge":"12","firefox":"16","firefox_android":"16","safari":"7","safari_ios":"7"}}},"calc-constants":{"compat_features":["css.types.calc-constant","css.types.calc-constant.NaN","css.types.calc-constant.e","css.types.calc-constant.infinity","css.types.calc-constant.pi"],"description":"The e, pi, infinity, and NaN constants are accepted in CSS math functions such as calc().","description_html":"The <code>e</code>, <code>pi</code>, <code>infinity</code>, and <code>NaN</code> constants are accepted in CSS math functions such as <code>calc()</code>.","name":"calc() constants","spec":"https://drafts.csswg.org/css-values-4/#calc-keywords","status":{"baseline":"low","baseline_low_date":"2023-06-06","support":{"chrome":"110","chrome_android":"110","edge":"110","firefox":"114","firefox_android":"114","safari":"16","safari_ios":"16"}}},"canvas-context-lost":{"compat_features":["api.CanvasRenderingContext2D.isContextLost","api.HTMLCanvasElement.contextlost_event","api.HTMLCanvasElement.contextrestored_event","api.OffscreenCanvas.contextlost_event","api.OffscreenCanvas.contextrestored_event","api.OffscreenCanvasRenderingContext2D.isContextLost"],"description":"The contextlost event for <canvas> fires when the canvas backing storage is lost, while the contextrestored event fires when it is recreated.","description_html":"The <code>contextlost</code> event for <code>&#x3C;canvas></code> fires when the canvas backing storage is lost, while the <code>contextrestored</code> event fires when it is recreated.","name":"contextlost and contextrestored","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#context-lost-steps","status":{"baseline":false,"support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"125","firefox_android":"125"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3974"},"canvas-createconicgradient":{"compat_features":["api.CanvasRenderingContext2D.createConicGradient","api.OffscreenCanvasRenderingContext2D.createConicGradient"],"description":"The createConicGradient() methods draw a conic gradient to a 2D canvas.","description_html":"The <code>createConicGradient()</code> methods draw a conic gradient to a 2D canvas.","name":"Canvas createConicGradient()","spec":"https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-createconicgradient-dev","status":{"baseline":"low","baseline_low_date":"2023-04-11","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"112","firefox_android":"112","safari":"16.4","safari_ios":"16.4"}}},"canvas-reset":{"compat_features":["api.CanvasRenderingContext2D.reset","api.OffscreenCanvasRenderingContext2D.reset"],"description":"The reset() method clears a canvas to its initial state.","description_html":"The <code>reset()</code> method clears a canvas to its initial state.","name":"Canvas reset()","spec":"https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-reset","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"113","firefox_android":"113","safari":"17.2","safari_ios":"17.2"}}},"canvas-roundrect":{"compat_features":["api.CanvasRenderingContext2D.roundRect","api.OffscreenCanvasRenderingContext2D.roundRect"],"description":"The roundRect() methods draw a rounded rectangle to a 2D canvas.","description_html":"The <code>roundRect()</code> methods draw a rounded rectangle to a 2D canvas.","name":"Canvas roundRect()","spec":"https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-roundrect","status":{"baseline":"low","baseline_low_date":"2023-04-11","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"112","firefox_android":"112","safari":"16.4","safari_ios":"16.4"}}},"canvas-text":{"compat_features":["api.CanvasRenderingContext2D.fillText","api.CanvasRenderingContext2D.measureText","api.CanvasRenderingContext2D.strokeText","api.CanvasRenderingContext2D.textAlign","api.CanvasRenderingContext2D.textBaseline","api.TextMetrics","api.TextMetrics.width"],"description":"The fillText() and strokeText() methods draw text to a 2D canvas. The measureText() method measures the width and other metrics which can be used to position the text.","description_html":"The <code>fillText()</code> and <code>strokeText()</code> methods draw text to a 2D canvas. The <code>measureText()</code> method measures the width and other metrics which can be used to position the text.","name":"Canvas text metrics","spec":"https://html.spec.whatwg.org/multipage/canvas.html#drawing-text-to-the-bitmap","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"2","chrome_android":"18","edge":"12","firefox":"3.5","firefox_android":"31","safari":"4","safari_ios":"3.2"}}},"canvas-text-baselines":{"compat_features":["api.TextMetrics.alphabeticBaseline","api.TextMetrics.hangingBaseline","api.TextMetrics.ideographicBaseline"],"description":"The alphabeticBaseline, hangingBaseline, and ideographicBaseline canvas text metrics measure the distance from the used textBaseline to the respective typographic baseline.","description_html":"The <code>alphabeticBaseline</code>, <code>hangingBaseline</code>, and <code>ideographicBaseline</code> canvas text metrics measure the distance from the used <code>textBaseline</code> to the respective typographic baseline.","name":"Canvas text baselines","spec":["https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-alphabeticbaseline-dev","https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-hangingbaseline-dev","https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-ideographicbaseline-dev"],"status":{"baseline":"low","baseline_low_date":"2023-10-13","support":{"chrome":"118","chrome_android":"118","edge":"118","firefox":"116","firefox_android":"116","safari":"11.1","safari_ios":"11.3"}}},"cap":{"compat_features":["css.types.length.cap"],"description":"The CSS cap unit corresponds to the height of Latin capital letters.","description_html":"The CSS <code>cap</code> unit corresponds to the height of Latin capital letters.","name":"cap unit","spec":"https://drafts.csswg.org/css-values-4/#cap","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"117","chrome_android":"117","edge":"117","firefox":"97","firefox_android":"97","safari":"17.2","safari_ios":"17.2"}}},"cascade-layers":{"caniuse":"css-cascade-layers","compat_features":["api.CSSImportRule.layerName","api.CSSLayerBlockRule","api.CSSLayerBlockRule.name","api.CSSLayerStatementRule","api.CSSLayerStatementRule.nameList","css.at-rules.import.layer","css.at-rules.layer"],"description":"The @layer CSS at-rule avoids specificity conflicts by providing priority levels for different groups of CSS rules, such as low-priority styles like resets, and high-priority styles like UI components.","description_html":"The <code>@layer</code> CSS at-rule avoids specificity conflicts by providing priority levels for different groups of CSS rules, such as low-priority styles like resets, and high-priority styles like UI components.","name":"Cascade layers","spec":"https://drafts.csswg.org/css-cascade-5/#layering","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"97","firefox_android":"97","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4007"},"check-visibility":{"compat_features":["api.Element.checkVisibility"],"description":"The checkVisibility() method checks if an element is potentially visible, with optional parameters for the kinds of visibility to check. For example, it checks whether the element has the style display: none, but can also check for visibility: hidden.","description_html":"The <code>checkVisibility()</code> method checks if an element is potentially visible, with optional parameters for the kinds of visibility to check. For example, it checks whether the element has the style <code>display: none</code>, but can also check for <code>visibility: hidden</code>.","name":"checkVisibility()","spec":"https://drafts.csswg.org/cssom-view-1/#dom-element-checkvisibility","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"106","firefox_android":"106","safari":"17.4","safari_ios":"17.4"}}},"class-syntax":{"caniuse":"es6-class","compat_features":["javascript.classes","javascript.classes.constructor","javascript.classes.extends","javascript.classes.static","javascript.operators.super","javascript.statements.class"],"description":"Classes are an object-oriented syntax for JavaScript prototypes.","description_html":"Classes are an object-oriented syntax for JavaScript prototypes.","name":"Classes","spec":"https://tc39.es/ecma262/multipage/ecmascript-language-functions-and-classes.html#sec-class-definitions","status":{"baseline":"high","baseline_high_date":"2019-09-27","baseline_low_date":"2017-03-27","support":{"chrome":"42","chrome_android":"42","edge":"13","firefox":"45","firefox_android":"45","safari":"10.1","safari_ios":"10.3"}}},"color-function":{"caniuse":"css-color-function","compat_features":["css.types.color.color","css.types.color.color.mixed_type_parameters"],"description":"The color() function defines a color within a given color space. Wide gamut color spaces like display-p3 allow showing more vibrant and saturated colors than the standard srgb color space.","description_html":"The <code>color()</code> function defines a color within a given color space. Wide gamut color spaces like <code>display-p3</code> allow showing more vibrant and saturated colors than the standard <code>srgb</code> color space.","name":"color()","spec":"https://drafts.csswg.org/css-color-4/#color-function","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"15","safari_ios":"15"}}},"color-mix":{"compat_features":["css.types.color.color-mix"],"description":"The color-mix() function mixes two colors in a given color space and by a given amount. Commonly, lighter or darker variations of a color are created by mixing with white or black.","description_html":"The <code>color-mix()</code> function mixes two colors in a given color space and by a given amount. Commonly, lighter or darker variations of a color are created by mixing with white or black.","name":"color-mix()","spec":"https://drafts.csswg.org/css-color-5/#color-mix","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"16.2","safari_ios":"16.2"}}},"color-scheme":{"compat_features":["css.properties.color-scheme","css.properties.color-scheme.only_dark","css.properties.color-scheme.only_light"],"description":"The color-scheme CSS property sets which color schemes (light or dark) an element uses and may prevent automatic dark mode adjustments by the browser.","description_html":"The <code>color-scheme</code> CSS property sets which color schemes (light or dark) an element uses and may prevent automatic dark mode adjustments by the browser.","name":"color-scheme","spec":"https://drafts.csswg.org/css-color-adjust-1/#color-scheme-prop","status":{"baseline":"low","baseline_low_date":"2022-02-03","support":{"chrome":"98","chrome_android":"98","edge":"98","firefox":"96","firefox_android":"96","safari":"13","safari_ios":"13"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/637"},"colrv1":{"caniuse":"colr-v1","compat_features":["css.at-rules.font-face.OpenType_COLRv1"],"description":"COLRv1 is a font format that supports multi-color glyphs.","description_html":"COLRv1 is a font format that supports multi-color glyphs.","name":"COLRv1","spec":"https://www.iso.org/standard/87621.html","status":{"baseline":false,"support":{"chrome":"98","chrome_android":"98","edge":"98","firefox":"107","firefox_android":"107"}}},"column-breaks":{"compat_features":["css.properties.break-after.multicol_context","css.properties.break-after.multicol_context.avoid","css.properties.break-after.multicol_context.avoid-column","css.properties.break-after.multicol_context.column","css.properties.break-before.multicol_context","css.properties.break-before.multicol_context.avoid","css.properties.break-before.multicol_context.avoid-column","css.properties.break-before.multicol_context.column","css.properties.break-inside.multicol_context","css.properties.break-inside.multicol_context.avoid-column"],"description":"In columnar layouts (created by the columns or column-count CSS properties), the break-after, break-before, break-inside properties control where columns start or end.","description_html":"In columnar layouts (created by the <code>columns</code> or <code>column-count</code> CSS properties), the <code>break-after</code>, <code>break-before</code>, <code>break-inside</code> properties control where columns start or end.","name":"Column breaks","spec":"https://drafts.csswg.org/css-break-3/#breaking-controls","status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102"}}},"compression-streams":{"compat_features":["api.CompressionStream","api.CompressionStream.CompressionStream","api.CompressionStream.CompressionStream.deflate","api.CompressionStream.CompressionStream.gzip","api.CompressionStream.readable","api.CompressionStream.writable","api.DecompressionStream","api.DecompressionStream.DecompressionStream","api.DecompressionStream.DecompressionStream.deflate","api.DecompressionStream.DecompressionStream.gzip","api.DecompressionStream.readable","api.DecompressionStream.writable"],"description":"The CompressionStream and DecompressionStream interfaces compress and decompress data using the gzip or deflate formats.","description_html":"The <code>CompressionStream</code> and <code>DecompressionStream</code> interfaces compress and decompress data using the gzip or deflate formats.","name":"Compression streams","spec":"https://wicg.github.io/compression/","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"113","firefox_android":"113","safari":"16.4","safari_ios":"16.4"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/3060","https://chromestatus.com/metrics/feature/timeline/popularity/3061"]},"compute-pressure":{"compat_features":["api.Permissions.permission_compute-pressure","api.PressureObserver","api.PressureObserver.PressureObserver","api.PressureObserver.disconnect","api.PressureObserver.knownSources_static","api.PressureObserver.observe","api.PressureObserver.takeRecords","api.PressureObserver.unobserve","api.PressureRecord","api.PressureRecord.source","api.PressureRecord.state","api.PressureRecord.time","api.PressureRecord.toJSON","http.headers.Permissions-Policy.compute-pressure"],"description":"The PressureObserver API monitors CPU load, allowing you to adjust workloads in response to available computing resources. Also known as the Compute Pressure API.","description_html":"The <code>PressureObserver</code> API monitors CPU load, allowing you to adjust workloads in response to available computing resources. Also known as the Compute Pressure API.","name":"CPU compute pressure","spec":"https://w3c.github.io/compute-pressure/","status":{"baseline":false,"support":{"chrome":"125"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3899"},"conic-gradients":{"caniuse":"css-conic-gradients","compat_features":["css.types.image.gradient.conic-gradient","css.types.image.gradient.conic-gradient.doubleposition","css.types.image.gradient.repeating-conic-gradient"],"description":"The conic-gradient() and repeating-conic-gradient() CSS functions create backgrounds that progress between two or more colors around a center point.","description_html":"The <code>conic-gradient()</code> and <code>repeating-conic-gradient()</code> CSS functions create backgrounds that progress between two or more colors around a center point.","name":"Conic gradients","spec":"https://drafts.csswg.org/css-images-4/#conic-gradients","status":{"baseline":"high","baseline_high_date":"2023-05-17","baseline_low_date":"2020-11-17","support":{"chrome":"72","chrome_android":"72","edge":"79","firefox":"83","firefox_android":"83","safari":"12.1","safari_ios":"12.2"}}},"constraint-validation":{"caniuse":"constraint-validation","compat_features":["api.HTMLButtonElement.checkValidity","api.HTMLButtonElement.reportValidity","api.HTMLButtonElement.setCustomValidity","api.HTMLButtonElement.validationMessage","api.HTMLButtonElement.validity","api.HTMLButtonElement.willValidate","api.HTMLFieldSetElement.checkValidity","api.HTMLFieldSetElement.reportValidity","api.HTMLFieldSetElement.setCustomValidity","api.HTMLFieldSetElement.validationMessage","api.HTMLFieldSetElement.validity","api.HTMLFieldSetElement.willValidate","api.HTMLFormElement.checkValidity","api.HTMLFormElement.reportValidity","api.HTMLInputElement.checkValidity","api.HTMLInputElement.reportValidity","api.HTMLInputElement.setCustomValidity","api.HTMLInputElement.validationMessage","api.HTMLInputElement.validity","api.HTMLInputElement.willValidate","api.HTMLObjectElement.checkValidity","api.HTMLObjectElement.reportValidity","api.HTMLObjectElement.setCustomValidity","api.HTMLObjectElement.validationMessage","api.HTMLObjectElement.validity","api.HTMLObjectElement.willValidate","api.HTMLOutputElement.checkValidity","api.HTMLOutputElement.reportValidity","api.HTMLOutputElement.setCustomValidity","api.HTMLOutputElement.validationMessage","api.HTMLOutputElement.validity","api.HTMLOutputElement.willValidate","api.HTMLSelectElement.checkValidity","api.HTMLSelectElement.reportValidity","api.HTMLSelectElement.setCustomValidity","api.HTMLSelectElement.validationMessage","api.HTMLSelectElement.validity","api.HTMLSelectElement.willValidate","api.HTMLTextAreaElement.checkValidity","api.HTMLTextAreaElement.reportValidity","api.HTMLTextAreaElement.setCustomValidity","api.HTMLTextAreaElement.validationMessage","api.HTMLTextAreaElement.validity","api.HTMLTextAreaElement.willValidate","api.ValidityState","api.ValidityState.badInput","api.ValidityState.customError","api.ValidityState.patternMismatch","api.ValidityState.rangeOverflow","api.ValidityState.rangeUnderflow","api.ValidityState.stepMismatch","api.ValidityState.tooLong","api.ValidityState.tooShort","api.ValidityState.typeMismatch","api.ValidityState.valid","api.ValidityState.valueMissing"],"description":"Methods that validate form controls before submission, such as checkValidity(), reportValidity() and setCustomValidity().","description_html":"Methods that validate form controls before submission, such as <code>checkValidity()</code>, <code>reportValidity()</code> and <code>setCustomValidity()</code>.","name":"Constraint validation API","spec":"https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-constraint-validation-api","status":{"baseline":"high","baseline_high_date":"2021-06-11","baseline_low_date":"2018-12-11","support":{"chrome":"40","chrome_android":"40","edge":"18","firefox":"51","firefox_android":"64","safari":"10.1","safari_ios":"10.3"}}},"constructed-stylesheets":{"compat_features":["api.CSSStyleSheet.CSSStyleSheet","api.CSSStyleSheet.replace","api.CSSStyleSheet.replaceSync","api.Document.adoptedStyleSheets","api.ShadowRoot.adoptedStyleSheets"],"description":"The CSSStyleSheet constructor creates a new stylesheet which can be shared between a document and multiple shadow roots using adoptedStyleSheets.","description_html":"The <code>CSSStyleSheet</code> constructor creates a new stylesheet which can be shared between a document and multiple shadow roots using <code>adoptedStyleSheets</code>.","name":"Constructed stylesheets","spec":["https://drafts.csswg.org/cssom-1/#dom-cssstylesheet-cssstylesheet","https://drafts.csswg.org/cssom-1/#dom-documentorshadowroot-adoptedstylesheets"],"status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"73","chrome_android":"73","edge":"79","firefox":"101","firefox_android":"101","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2846"},"contain-intrinsic-size":{"compat_features":["css.properties.contain-intrinsic-block-size","css.properties.contain-intrinsic-height","css.properties.contain-intrinsic-inline-size","css.properties.contain-intrinsic-size","css.properties.contain-intrinsic-width"],"description":"The contain-intrinsic-size CSS property sets the intrinsic size of an element. When using size containment, the browser will layout the element as if it had a single child of this size.","description_html":"The <code>contain-intrinsic-size</code> CSS property sets the intrinsic size of an element. When using size containment, the browser will layout the element as if it had a single child of this size.","name":"contain-intrinsic-size","spec":"https://drafts.csswg.org/css-sizing-4/#intrinsic-size-override","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"95","chrome_android":"95","edge":"95","firefox":"107","firefox_android":"107","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/651"},"container-queries":{"caniuse":"css-container-queries","compat_features":["api.CSSContainerRule","css.at-rules.container","css.properties.contain","css.properties.contain.inline-size","css.properties.contain.style","css.properties.container","css.properties.container-name","css.properties.container-name.none","css.properties.container-type","css.properties.container-type.inline-size","css.properties.container-type.normal","css.properties.container-type.size","css.types.length.container_query_length_units"],"description":"Container size queries with the @container at-rule apply styles to an element based on the dimensions of its container.","description_html":"Container size queries with the <code>@container</code> at-rule apply styles to an element based on the dimensions of its container.","name":"Container queries","spec":"https://drafts.csswg.org/css-contain-3/#container-queries","status":{"baseline":"low","baseline_low_date":"2023-02-14","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"110","firefox_android":"110","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4165"},"container-style-queries":{"caniuse":"css-container-queries-style","compat_features":["css.at-rules.container.style_queries_for_custom_properties"],"description":"Container style queries with the @container at-rule apply styles to an element based on the values of custom properties of its container.","description_html":"Container style queries with the <code>@container</code> at-rule apply styles to an element based on the values of custom properties of its container.","name":"Container style queries","spec":"https://drafts.csswg.org/css-contain-3/#style-container","status":{"baseline":false,"support":{"chrome":"111","chrome_android":"111","edge":"111"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4550"},"content-visibility":{"caniuse":"css-content-visibility","compat_features":["api.ContentVisibilityAutoStateChangeEvent","api.ContentVisibilityAutoStateChangeEvent.ContentVisibilityAutoStateChangeEvent","api.ContentVisibilityAutoStateChangeEvent.skipped","css.properties.content-visibility"],"description":"The content-visibility CSS property delays rendering an element, including layout and painting, until it is needed.","description_html":"The <code>content-visibility</code> CSS property delays rendering an element, including layout and painting, until it is needed.","name":"content-visibility","spec":"https://drafts.csswg.org/css-contain-2/#content-visibility","status":{"baseline":false,"support":{"chrome":"108","chrome_android":"108","edge":"108"}}},"counter-set":{"compat_features":["css.properties.counter-set","css.properties.counter-set.list-item","css.properties.counter-set.none"],"description":"The counter-set CSS property creates (and optionally sets a value for) a counter, the numbers for a series of headings or ordered list items.","description_html":"The <code>counter-set</code> CSS property creates (and optionally sets a value for) a counter, the numbers for a series of headings or ordered list items.","name":"counter-set","spec":"https://drafts.csswg.org/css-lists-3/#propdef-counter-set","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"85","chrome_android":"85","edge":"85","firefox":"68","firefox_android":"68","safari":"17.2","safari_ios":"17.2"}}},"counter-style":{"caniuse":"css-at-counter-style","compat_features":["css.at-rules.counter-style","css.at-rules.counter-style.additive-symbols","css.at-rules.counter-style.fallback","css.at-rules.counter-style.negative","css.at-rules.counter-style.pad","css.at-rules.counter-style.prefix","css.at-rules.counter-style.range","css.at-rules.counter-style.suffix","css.at-rules.counter-style.system","api.CSSCounterStyleRule","api.CSSCounterStyleRule.additiveSymbols","api.CSSCounterStyleRule.fallback","api.CSSCounterStyleRule.name","api.CSSCounterStyleRule.negative","api.CSSCounterStyleRule.pad","api.CSSCounterStyleRule.prefix","api.CSSCounterStyleRule.range","api.CSSCounterStyleRule.system","api.CSSCounterStyleRule.suffix"],"description":"The @counter-style CSS at-rule defines custom counter styles for list items. For example, you can use a sequence of specific symbols instead of numbers for an ordered list.","description_html":"The <code>@counter-style</code> CSS at-rule defines custom counter styles for list items. For example, you can use a sequence of specific symbols instead of numbers for an ordered list.","name":"@counter-style","spec":"https://drafts.csswg.org/css-counter-styles-3/","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"91","chrome_android":"91","edge":"91","firefox":"33","firefox_android":"33","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3809"},"css-modules":{"compat_features":["javascript.statements.import","javascript.statements.import.import_attributes.type_css"],"description":"CSS module scripts allow CSS code to be organized into reusable units. Other modules use import ... with {type: \"css\"} to load CSS modules as constructable stylesheets.","description_html":"CSS module scripts allow CSS code to be organized into reusable units. Other modules use <code>import ... with {type: \"css\"}</code> to load CSS modules as constructable stylesheets.","name":"CSS module scripts","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#css-module-script","status":{"baseline":false,"support":{"chrome":"123","chrome_android":"123","edge":"123"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3805"},"custom-properties":{"caniuse":"css-variables","compat_features":["css.properties.custom-property","css.properties.custom-property.var"],"description":"Custom properties are CSS properties prefixed with -- that set values you can reuse with the var() function. For example, you can set a --key-color property to reuse as border-color: var(--key-color). Also known as CSS variables.","description_html":"Custom properties are CSS properties prefixed with <code>--</code> that set values you can reuse with the <code>var()</code> function. For example, you can set a <code>--key-color</code> property to reuse as <code>border-color: var(--key-color)</code>. Also known as CSS variables.","name":"Custom properties","spec":"https://drafts.csswg.org/css-variables-1/","status":{"baseline":"high","baseline_high_date":"2019-10-05","baseline_low_date":"2017-04-05","support":{"chrome":"49","chrome_android":"49","edge":"15","firefox":"31","firefox_android":"31","safari":"9.1","safari_ios":"9.3"}}},"customized-built-in-elements":{"compat_features":["api.CustomElementRegistry.builtin_element_support","html.global_attributes.is"],"description":"Customized built-in elements are HTML elements that extend built-in elements using the is attribute, to add new behaviors that you define.","description_html":"Customized built-in elements are HTML elements that extend built-in elements using the <code>is</code> attribute, to add new behaviors that you define.","name":"Customized built-in elements","spec":"https://html.spec.whatwg.org/multipage/custom-elements.html#customized-built-in-element","status":{"baseline":false,"support":{"chrome":"67","chrome_android":"67","edge":"79","firefox":"63","firefox_android":"63"}}},"declarative-shadow-dom":{"caniuse":"declarative-shadow-dom","compat_features":["api.HTMLTemplateElement.shadowRootMode","html.elements.template.shadowrootmode"],"description":"The shadowrootmode attribute on <template> creates a shadow root without the use of JavaScript. It is a declarative alternative to the attachShadow() method.","description_html":"The <code>shadowrootmode</code> attribute on <code>&#x3C;template></code> creates a shadow root without the use of JavaScript. It is a declarative alternative to the <code>attachShadow()</code> method.","name":"Declarative shadow DOM","spec":"https://html.spec.whatwg.org/multipage/scripting.html#attr-template-shadowrootmode","status":{"baseline":"low","baseline_low_date":"2024-02-20","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"123","firefox_android":"123","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4421"},"default":{"caniuse":"css-default-pseudo","compat_features":["css.selectors.default"],"description":"The :default CSS pseudo-class matches the default element in a group of related form controls, such as checkboxes and radio buttons with the checked attribute.","description_html":"The <code>:default</code> CSS pseudo-class matches the default element in a group of related form controls, such as checkboxes and radio buttons with the <code>checked</code> attribute.","name":":default","spec":"https://drafts.csswg.org/selectors-4/#the-default-pseudo","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"10","chrome_android":"18","edge":"79","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"5"}}},"details":{"caniuse":"details","compat_features":["api.HTMLDetailsElement","api.HTMLDetailsElement.open","html.elements.details","html.elements.details.open"],"description":"The <details> element is a disclosure widget which can be expanded to reveal additional content. When closed, only the nested <summary> element is visible.","description_html":"The <code>&#x3C;details></code> element is a disclosure widget which can be expanded to reveal additional content. When closed, only the nested <code>&#x3C;summary></code> element is visible.","name":"<details>","spec":"https://html.spec.whatwg.org/multipage/interactive-elements.html#the-details-element","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"12","chrome_android":"18","edge":"79","firefox":"49","firefox_android":"49","safari":"6","safari_ios":"6"}}},"details-name":{"compat_features":["api.HTMLDetailsElement.name","html.elements.details.name"],"description":"Multiple <details> elements which use the same name attribute are mutually exclusive. When one member of the group is opened, all other members are closed.","description_html":"Multiple <code>&#x3C;details></code> elements which use the same <code>name</code> attribute are mutually exclusive. When one member of the group is opened, all other members are closed.","name":"Mutually exclusive <details> elements","spec":"https://html.spec.whatwg.org/multipage/interactive-elements.html#attr-details-name","status":{"baseline":false,"support":{"chrome":"120","chrome_android":"120","edge":"120","safari":"17.2","safari_ios":"17.2"}}},"device-orientation-events":{"caniuse":"deviceorientation","compat_features":["api.DeviceMotionEvent","api.DeviceMotionEvent.acceleration","api.DeviceMotionEvent.accelerationIncludingGravity","api.DeviceMotionEvent.interval","api.DeviceMotionEvent.rotationRate","api.DeviceOrientationEvent","api.DeviceOrientationEvent.alpha","api.DeviceOrientationEvent.beta","api.DeviceOrientationEvent.gamma","api.Window.devicemotion_event","api.Window.deviceorientation_event"],"description":"The DeviceMotion and DeviceOrientation events report the movement and orientation of the browser's device in physical space.","description_html":"The <code>DeviceMotion</code> and <code>DeviceOrientation</code> events report the movement and orientation of the browser's device in physical space.","name":"Device orientation events","spec":"https://w3c.github.io/deviceorientation/","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"31","chrome_android":"31","edge":"12","firefox":"6","firefox_android":"6","safari":"17","safari_ios":"4.2"}}},"device-posture":{"compat_features":["api.DevicePosture","api.DevicePosture.change_event","api.DevicePosture.type","api.Navigator.devicePosture","css.at-rules.media.device-posture"],"description":"The device posture API provides information about the physical posture of a device, such as whether a foldable device is folded or unfolded.","description_html":"The device posture API provides information about the physical posture of a device, such as whether a foldable device is folded or unfolded.","name":"Device posture","spec":"https://w3c.github.io/device-posture/","status":{"baseline":false,"support":{}}},"dialog":{"caniuse":"dialog","compat_features":["api.HTMLDialogElement","api.HTMLDialogElement.cancel_event","api.HTMLDialogElement.close","api.HTMLDialogElement.close_event","api.HTMLDialogElement.open","api.HTMLDialogElement.returnValue","api.HTMLDialogElement.show","api.HTMLDialogElement.showModal","css.selectors.backdrop.dialog","html.elements.dialog","html.elements.dialog.open"],"description":"The <dialog> HTML element represents a modal or non-modal dialog box, such as a confirmation prompt or a subwindow used to enter data.","description_html":"The <code>&#x3C;dialog></code> HTML element represents a modal or non-modal dialog box, such as a confirmation prompt or a subwindow used to enter data.","name":"<dialog>","spec":"https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"37","chrome_android":"37","edge":"79","firefox":"98","firefox_android":"98","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/481"},"dir-pseudo":{"caniuse":"css-dir-pseudo","compat_features":["css.selectors.dir"],"description":"The :dir() CSS functional pseudo-class matches elements by text direction, either right to left (rtl) or left to right (ltr).","description_html":"The <code>:dir()</code> CSS functional pseudo-class matches elements by text direction, either right to left (<code>rtl</code>) or left to right (<code>ltr</code>).","name":":dir()","spec":"https://drafts.csswg.org/selectors-4/#the-dir-pseudo","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"49","firefox_android":"49","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3741"},"dirname":{"compat_features":["api.HTMLInputElement.dirName","api.HTMLTextAreaElement.dirName","html.elements.input.dirname","html.elements.textarea.dirname"],"description":"The dirname attribute of <textarea> and <input> HTML elements includes the field's writing direction as form data on submission.","description_html":"The <code>dirname</code> attribute of <code>&#x3C;textarea></code> and <code>&#x3C;input></code> HTML elements includes the field's writing direction as form data on submission.","name":"dirname","spec":"https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fe-dirname","status":{"baseline":"low","baseline_low_date":"2023-08-01","support":{"chrome":"17","chrome_android":"18","edge":"79","firefox":"116","firefox_android":"116","safari":"6","safari_ios":"6"}}},"display-animation":{"compat_features":["css.properties.content-visibility.is_transitionable","css.properties.content-visibility.keyframe_animatable","css.properties.display.is_transitionable","css.properties.display.keyframe_animatable"],"description":"You can animate elements between display: none and any other display value or animate between content-visibility: hidden and any other content-visibility value. This also applies to transitions.","description_html":"You can animate elements between <code>display: none</code> and any other <code>display</code> value or animate between <code>content-visibility: hidden</code> and any other <code>content-visibility</code> value. This also applies to transitions.","name":"display animation","spec":["https://drafts.csswg.org/css-display-4/#display-animation","https://drafts.csswg.org/css-contain-3/#content-visibility-animation"],"status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117"}}},"document-picture-in-picture":{"compat_features":["api.DocumentPictureInPicture","api.DocumentPictureInPicture.enter_event","api.DocumentPictureInPicture.requestWindow","api.DocumentPictureInPicture.window","api.DocumentPictureInPictureEvent","api.DocumentPictureInPictureEvent.DocumentPictureInPictureEvent","api.DocumentPictureInPictureEvent.window","api.Window.documentPictureInPicture"],"description":"The document picture-in-picture API creates an always-on-top window from arbitrary HTML content.","description_html":"The document picture-in-picture API creates an always-on-top window from arbitrary HTML content.","name":"Document picture-in-picture","spec":"https://wicg.github.io/document-picture-in-picture/","status":{"baseline":false,"support":{"chrome":"116","edge":"116"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4397"},"edit-context":{"compat_features":["api.CharacterBoundsUpdateEvent","api.CharacterBoundsUpdateEvent.CharacterBoundsUpdateEvent","api.CharacterBoundsUpdateEvent.rangeEnd","api.CharacterBoundsUpdateEvent.rangeStart","api.EditContext","api.EditContext.EditContext","api.EditContext.attachedElements","api.EditContext.characterBounds","api.EditContext.characterBoundsRangeStart","api.EditContext.characterboundsupdate_event","api.EditContext.compositionend_event","api.EditContext.compositionstart_event","api.EditContext.selectionEnd","api.EditContext.selectionStart","api.EditContext.text","api.EditContext.textformatupdate_event","api.EditContext.textupdate_event","api.EditContext.updateCharacterBounds","api.EditContext.updateControlBounds","api.EditContext.updateSelection","api.EditContext.updateSelectionBounds","api.EditContext.updateText","api.HTMLElement.editContext","api.TextFormat","api.TextFormat.TextFormat","api.TextFormat.rangeEnd","api.TextFormat.rangeStart","api.TextFormat.underlineStyle","api.TextFormat.underlineThickness","api.TextFormatUpdateEvent","api.TextFormatUpdateEvent.TextFormatUpdateEvent","api.TextFormatUpdateEvent.getTextFormats","api.TextUpdateEvent","api.TextUpdateEvent.TextUpdateEvent","api.TextUpdateEvent.selectionEnd","api.TextUpdateEvent.selectionStart","api.TextUpdateEvent.text","api.TextUpdateEvent.updateRangeEnd","api.TextUpdateEvent.updateRangeStart"],"description":"The EditContext API allows you to build rich text editors that support advanced text input, such as Input Method Editor (IME) composition, an emoji picker, or other platform-specific editing UI.","description_html":"The <code>EditContext</code> API allows you to build rich text editors that support advanced text input, such as Input Method Editor (IME) composition, an emoji picker, or other platform-specific editing UI.","name":"EditContext","spec":"https://w3c.github.io/edit-context/","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121"}}},"exp-functions":{"compat_features":["css.types.exp","css.types.hypot","css.types.log","css.types.pow","css.types.sqrt"],"description":"The pow(), sqrt(), hypot(), log(), and exp() CSS functions compute various exponential functions.","description_html":"The <code>pow()</code>, <code>sqrt()</code>, <code>hypot()</code>, <code>log()</code>, and <code>exp()</code> CSS functions compute various exponential functions.","name":"pow(), sqrt(), hypot(), log(), and exp()","spec":"https://drafts.csswg.org/css-values-4/#exponent-funcs","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"118","firefox_android":"118","safari":"15.4","safari_ios":"15.4"}}},"fast-seek":{"compat_features":["api.HTMLMediaElement.fastSeek"],"description":"The fastSeek() method seeks an <audio> or <video> element as fast as possible, by seeking to a keyframe instead of exactly the requested time.","description_html":"The <code>fastSeek()</code> method seeks an <code>&#x3C;audio></code> or <code>&#x3C;video></code> element as fast as possible, by seeking to a keyframe instead of exactly the requested time.","name":"fastSeek()","spec":"https://html.spec.whatwg.org/multipage/media.html#dom-media-fastseek-dev","status":{"baseline":false,"support":{"firefox":"31","firefox_android":"31","safari":"8","safari_ios":"8"}}},"fetch":{"caniuse":"fetch","compat_features":["api.Headers","api.Headers.Headers","api.Headers.append","api.Headers.delete","api.Headers.get","api.Headers.has","api.Headers.set","api.Request","api.Request.Request","api.Request.arrayBuffer","api.Request.blob","api.Request.bodyUsed","api.Request.clone","api.Request.credentials","api.Request.headers","api.Request.json","api.Request.method","api.Request.mode","api.Request.text","api.Request.url","api.Response","api.Response.Response","api.Response.arrayBuffer","api.Response.blob","api.Response.bodyUsed","api.Response.clone","api.Response.headers","api.Response.json","api.Response.ok","api.Response.status","api.Response.statusText","api.Response.text","api.Response.type","api.Response.url","api.fetch"],"description":"The fetch() method makes asynchronous HTTP requests.","description_html":"The <code>fetch()</code> method makes asynchronous HTTP requests.","name":"Fetch (initial support)","spec":"https://fetch.spec.whatwg.org/","status":{"baseline":"high","baseline_high_date":"2019-09-27","baseline_low_date":"2017-03-27","support":{"chrome":"42","chrome_android":"42","edge":"14","firefox":"39","firefox_android":"39","safari":"10.1","safari_ios":"10.3"}}},"fetch-metadata":{"compat_features":["http.headers.Sec-Fetch-Dest","http.headers.Sec-Fetch-Mode","http.headers.Sec-Fetch-Site","http.headers.Sec-Fetch-User"],"description":"The Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site, and Sec-Fetch-User` HTTP headers provide extra information about the way a request was made, to help servers reject certain kinds of malicious requests.","description_html":"The <code>Sec-Fetch-Dest</code>, <code>Sec-Fetch-Mode, </code>Sec-Fetch-Site<code>, and </code>Sec-Fetch-User` HTTP headers provide extra information about the way a request was made, to help servers reject certain kinds of malicious requests.","name":"Fetch metadata request headers","spec":"https://w3c.github.io/webappsec-fetch-metadata/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"90","firefox_android":"90","safari":"16.4","safari_ios":"16.4"}}},"fetch-priority":{"compat_features":["api.HTMLImageElement.fetchPriority","api.HTMLLinkElement.fetchPriority","api.HTMLScriptElement.fetchPriority","api.Request.Request.init_priority_parameter","api.fetch.init_priority_parameter","html.elements.img.fetchpriority","html.elements.link.fetchpriority","html.elements.script.fetchpriority"],"description":"The fetch() priority option and the fetchPriorty HTML attribute give hints to the browser about which requests to do before other requests of the same type.","description_html":"The <code>fetch()</code> <code>priority</code> option and the <code>fetchPriorty</code> HTML attribute give hints to the browser about which requests to do before other requests of the same type.","name":"Fetch priority","spec":["https://fetch.spec.whatwg.org/#request-priority","https://html.spec.whatwg.org/multipage/urls-and-fetching.html#fetch-priority-attributes"],"status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102","safari":"17.2","safari_ios":"17.2"}}},"field-sizing":{"compat_features":["css.properties.field-sizing","css.properties.field-sizing.content","css.properties.field-sizing.fixed"],"description":"The field-sizing CSS property allows form controls such as <textarea> to be sized based on their content.","description_html":"The <code>field-sizing</code> CSS property allows form controls such as <code>&#x3C;textarea></code> to be sized based on their content.","name":"field-sizing","spec":"https://drafts.csswg.org/css-ui-4/#field-sizing","status":{"baseline":false,"support":{"chrome":"123","chrome_android":"123","edge":"123"}}},"flexbox":{"caniuse":"flexbox","compat_features":["css.properties.align-content.flex_context","css.properties.align-content.flex_context.stretch","css.properties.align-items.flex_context","css.properties.align-items.flex_context.baseline","css.properties.align-self.flex_context","css.properties.align-self.flex_context.baseline","css.properties.align-self.flex_context.stretch","css.properties.display.flex","css.properties.display.inline-flex","css.properties.flex","css.properties.flex-basis","css.properties.flex-basis.auto","css.properties.flex-direction","css.properties.flex-flow","css.properties.flex-grow","css.properties.flex-shrink","css.properties.flex-wrap","css.properties.justify-content.flex_context","css.properties.justify-content.flex_context.stretch","css.properties.justify-items.flex_context","css.properties.justify-self.flex_context","css.properties.order","css.properties.place-content.flex_context","css.properties.place-items.flex_context","css.properties.place-self.flex_context"],"description":"Flexbox is a one-dimensional layout system, which places content either horizontally or vertically, with optional wrapping.","description_html":"Flexbox is a one-dimensional layout system, which places content either horizontally or vertically, with optional wrapping.","name":"Flexbox","spec":"https://drafts.csswg.org/css-flexbox-1/","status":{"baseline":"high","baseline_high_date":"2023-03-22","baseline_low_date":"2020-09-22","support":{"chrome":"59","chrome_android":"59","edge":"79","firefox":"81","firefox_android":"81","safari":"11","safari_ios":"11"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1692"},"flexbox-gap":{"caniuse":"flexbox-gap","compat_features":["css.properties.column-gap.flex_context","css.properties.gap.flex_context","css.properties.row-gap.flex_context"],"description":"The gap CSS property in a flexbox layout sets the size of the space between items.","description_html":"The <code>gap</code> CSS property in a flexbox layout sets the size of the space between items.","name":"Flexbox gap","spec":"https://drafts.csswg.org/css-align-3/#gaps","status":{"baseline":"high","baseline_high_date":"2023-10-26","baseline_low_date":"2021-04-26","support":{"chrome":"84","chrome_android":"84","edge":"84","firefox":"63","firefox_android":"63","safari":"14.1","safari_ios":"14.5"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3307"},"focus-visible":{"caniuse":"css-focus-visible","compat_features":["css.selectors.focus-visible"],"description":"The :focus-visible CSS pseudo-class selects elements that match the :focus pseudo-class and meets the browser's criteria for visually emphasizing focused elements.","description_html":"The <code>:focus-visible</code> CSS pseudo-class selects elements that match the <code>:focus</code> pseudo-class and meets the browser's criteria for visually emphasizing focused elements.","name":":focus-visible","spec":"https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"86","chrome_android":"86","edge":"86","firefox":"85","firefox_android":"85","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2388"},"font-face":{"alias":"fonts","caniuse":"fontface","compat_features":["css.at-rules.font-face","css.at-rules.font-face.font-family","css.at-rules.font-face.src","css.at-rules.font-face.WOFF","css.at-rules.font-face.WOFF_2"],"description":"The @font-face CSS at-rule creates a custom font-family value. The at-rule's descriptors set the font's name, source, and various display settings.","description_html":"The <code>@font-face</code> CSS at-rule creates a custom <code>font-family</code> value. The at-rule's descriptors set the font's name, source, and various display settings.","name":"@font-face","spec":"https://drafts.csswg.org/css-fonts-5/","status":{"baseline":"high","baseline_high_date":"2019-03-20","baseline_low_date":"2016-09-20","support":{"chrome":"36","chrome_android":"36","edge":"14","firefox":"39","firefox_android":"39","safari":"10","safari_ios":"10"}}},"font-optical-sizing":{"compat_features":["css.properties.font-optical-sizing"],"description":"The font-optical-sizing CSS property sets whether text rendering is optimized for viewing at different sizes.","description_html":"The <code>font-optical-sizing</code> CSS property sets whether text rendering is optimized for viewing at different sizes.","name":"font-optical-sizing","spec":"https://drafts.csswg.org/css-fonts-4/#font-optical-sizing-def","status":{"baseline":"high","baseline_high_date":"2022-06-17","baseline_low_date":"2019-12-17","support":{"chrome":"79","chrome_android":"79","edge":"17","firefox":"62","firefox_android":"62","safari":"11","safari_ios":"11"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/647"},"font-palette":{"compat_features":["api.CSSFontPaletteValuesRule","api.CSSFontPaletteValuesRule.basePalette","api.CSSFontPaletteValuesRule.fontFamily","api.CSSFontPaletteValuesRule.name","api.CSSFontPaletteValuesRule.overrideColors","css.at-rules.font-palette-values","css.at-rules.font-palette-values.base-palette","css.at-rules.font-palette-values.font-family","css.at-rules.font-palette-values.override-colors","css.properties.font-palette"],"description":"The font-palette CSS property selects a color palette from the font, optionally overriding individual colors in the @font-palette-values at-rule.","description_html":"The <code>font-palette</code> CSS property selects a color palette from the font, optionally overriding individual colors in the <code>@font-palette-values</code> at-rule.","name":"font-palette","spec":["https://drafts.csswg.org/css-fonts-4/#font-palette-prop","https://drafts.csswg.org/css-fonts-4/#font-palette-values"],"status":{"baseline":"low","baseline_low_date":"2022-11-15","support":{"chrome":"101","chrome_android":"101","edge":"101","firefox":"107","firefox_android":"107","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/709"},"font-palette-animation":{"compat_features":["css.properties.font-palette.animation_computed","css.properties.font-palette.palette-mix_function"],"description":"You can animate color fonts between two font-palette values.","description_html":"You can animate color fonts between two <code>font-palette</code> values.","name":"font-palette animation","spec":"https://drafts.csswg.org/css-fonts-4/#font-palette-prop","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/animated/709"},"font-size-adjust":{"caniuse":"font-size-adjust","compat_features":["css.properties.font-size-adjust"],"description":"The font-size-adjust CSS property preserves apparent text size, regardless of the font used, by scaling fonts to the same size with respect to a specific metric, such as x-height. This can help make fallback fonts look the same size.","description_html":"The <code>font-size-adjust</code> CSS property preserves apparent text size, regardless of the font used, by scaling fonts to the same size with respect to a specific metric, such as x-height. This can help make fallback fonts look the same size.","name":"font-size-adjust","spec":"https://drafts.csswg.org/css-fonts-5/#font-size-adjust-prop","status":{"baseline":false,"support":{"firefox":"3","firefox_android":"4","safari":"16.4","safari_ios":"16.4"}}},"font-synthesis":{"compat_features":["css.properties.font-synthesis"],"description":"The font-synthesis CSS shorthand property disables all font synthesis except the given kinds. To disable a specific kind of font synthesis, instead use the longhand properties such as font-synthesis-style and font-synthesis-weight.","description_html":"The <code>font-synthesis</code> CSS shorthand property disables all font synthesis except the given kinds. To disable a specific kind of font synthesis, instead use the longhand properties such as <code>font-synthesis-style</code> and <code>font-synthesis-weight</code>.","name":"font-synthesis","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis","status":{"baseline":"low","baseline_low_date":"2022-01-06","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"34","firefox_android":"34","safari":"9","safari_ios":"9"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/704"},"font-synthesis-position":{"compat_features":["css.properties.font-synthesis-position","css.properties.font-synthesis-position.auto","css.properties.font-synthesis-position.none"],"description":"The font-synthesis-position CSS property sets whether or not the browser should synthesize subscript and superscript typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-position</code> CSS property sets whether or not the browser should synthesize subscript and superscript typefaces when they're missing from the font.","name":"font-synthesis-position","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-position","status":{"baseline":false,"support":{"firefox":"118","firefox_android":"118"}}},"font-synthesis-small-caps":{"compat_features":["css.properties.font-synthesis-small-caps","css.properties.font-synthesis-small-caps.auto","css.properties.font-synthesis-small-caps.none"],"description":"The font-synthesis-small-caps CSS property sets whether or not the browser should synthesize small caps typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-small-caps</code> CSS property sets whether or not the browser should synthesize small caps typefaces when they're missing from the font.","name":"font-synthesis-small-caps","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-small-caps","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"111","firefox_android":"111","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/703"},"font-synthesis-style":{"compat_features":["css.properties.font-synthesis-style","css.properties.font-synthesis-style.auto","css.properties.font-synthesis-style.none"],"description":"The font-synthesis-style CSS property sets whether or not the browser should synthesize italic and oblique typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-style</code> CSS property sets whether or not the browser should synthesize italic and oblique typefaces when they're missing from the font.","name":"font-synthesis-style","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-style","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"111","firefox_android":"111","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/701"},"font-synthesis-weight":{"compat_features":["css.properties.font-synthesis-weight","css.properties.font-synthesis-weight.auto","css.properties.font-synthesis-weight.none"],"description":"The font-synthesis-weight CSS property sets whether or not the browser should synthesize bold typefaces when they're missing from the font.","description_html":"The <code>font-synthesis-weight</code> CSS property sets whether or not the browser should synthesize bold typefaces when they're missing from the font.","name":"font-synthesis-weight","spec":"https://drafts.csswg.org/css-fonts-4/#font-synthesis-weight","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"111","firefox_android":"111","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/700"},"font-variant-alternates":{"caniuse":"font-variant-alternates","compat_features":["api.CSSFontFeatureValuesRule","api.CSSFontFeatureValuesRule.fontFamily","css.at-rules.font-feature-values","css.at-rules.font-feature-values.annotation","css.at-rules.font-feature-values.character-variant","css.at-rules.font-feature-values.historical-forms","css.at-rules.font-feature-values.ornaments","css.at-rules.font-feature-values.styleset","css.at-rules.font-feature-values.stylistic","css.at-rules.font-feature-values.swash","css.properties.font-variant-alternates","css.properties.font-variant-alternates.annotation","css.properties.font-variant-alternates.character_variant","css.properties.font-variant-alternates.ornaments","css.properties.font-variant-alternates.styleset","css.properties.font-variant-alternates.stylistic","css.properties.font-variant-alternates.swash"],"description":"The font-variant-alternates CSS property, along with the @font-feature-values at-rule, chooses when to use a font's alternate glyphs.","description_html":"The <code>font-variant-alternates</code> CSS property, along with the <code>@font-feature-values</code> at-rule, chooses when to use a font's alternate glyphs.","name":"font-variant-alternates","spec":"https://drafts.csswg.org/css-fonts-4/#font-variant-alternates-prop","status":{"baseline":"low","baseline_low_date":"2023-03-13","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"34","firefox_android":"34","safari":"16.2","safari_ios":"16.2"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/738"},"form-associated-custom-elements":{"compat_features":["api.HTMLElement.attachInternals","api.ElementInternals","api.ElementInternals.checkValidity","api.ElementInternals.form","api.ElementInternals.labels","api.ElementInternals.reportValidity","api.ElementInternals.setFormValue","api.ElementInternals.setValidity","api.ElementInternals.validationMessage","api.ElementInternals.validity","api.ElementInternals.willValidate"],"description":"Custom elements may act like built-in form elements, via the the attachInternals() method of HTMLElement and the ElementInternals API.","description_html":"Custom elements may act like built-in form elements, via the the <code>attachInternals()</code> method of <code>HTMLElement</code> and the <code>ElementInternals</code> API.","name":"Form-associated custom elements","spec":"https://html.spec.whatwg.org/multipage/custom-elements.html#form-associated-custom-elements","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"77","chrome_android":"77","edge":"79","firefox":"98","firefox_android":"98","safari":"16.4","safari_ios":"16.4"}}},"fullscreen":{"caniuse":"fullscreen","compat_features":["api.Document.exitFullscreen","api.Document.exitFullscreen.returns_promise","api.Document.fullscreenchange_event","api.Document.fullscreenElement","api.Document.fullscreenEnabled","api.Document.fullscreenerror_event","api.Element.fullscreenchange_event","api.Element.fullscreenerror_event","api.Element.requestFullscreen","api.Element.requestFullscreen.returns_promise","api.HTMLIFrameElement.allowFullscreen","api.ShadowRoot.fullscreenElement","css.selectors.backdrop.fullscreen","css.selectors.fullscreen","html.elements.iframe.allowfullscreen"],"description":"The fullscreen API makes a specific element fill the whole screen and hides most browser UI.","description_html":"The fullscreen API makes a specific element fill the whole screen and hides most browser UI.","name":"Fullscreen API","spec":"https://fullscreen.spec.whatwg.org/","status":{"baseline":false,"support":{"chrome":"71","chrome_android":"71","edge":"79","firefox":"64","firefox_android":"64","safari":"16.4"}}},"grid":{"caniuse":"css-grid","compat_features":["css.properties.align-content.grid_context","css.properties.align-items.grid_context","css.properties.align-items.grid_context.start_end","css.properties.align-self.grid_context","css.properties.column-gap.grid_context","css.properties.display.grid","css.properties.display.inline-grid","css.properties.gap.grid_context","css.properties.gap.grid_context.calc_values","css.properties.gap.grid_context.percentage_values","css.properties.grid","css.properties.grid-area","css.properties.grid-auto-columns","css.properties.grid-auto-flow","css.properties.grid-auto-rows","css.properties.grid-column","css.properties.grid-column-end","css.properties.grid-column-start","css.properties.grid-row","css.properties.grid-row-end","css.properties.grid-row-start","css.properties.grid-template","css.properties.grid-template-areas","css.properties.grid-template-columns","css.properties.grid-template-columns.fit-content","css.properties.grid-template-columns.minmax","css.properties.grid-template-columns.repeat","css.properties.grid-template-rows","css.properties.grid-template-rows.fit-content","css.properties.grid-template-rows.minmax","css.properties.grid-template-rows.repeat","css.properties.justify-content.grid_context","css.properties.justify-items.grid_context","css.properties.justify-self.grid_context","css.properties.place-content.grid_context","css.properties.place-items.grid_context","css.properties.place-self.grid_context","css.properties.row-gap.grid_context","css.types.flex"],"description":"CSS Grid is a two-dimensional layout system, which lays content out in rows and columns.","description_html":"CSS Grid is a two-dimensional layout system, which lays content out in rows and columns.","name":"Grid","spec":"https://drafts.csswg.org/css-grid-3/","status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"66","chrome_android":"66","edge":"79","firefox":"76","firefox_android":"79","safari":"12.1","safari_ios":"12.2"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1693"},"grid-animation":{"compat_features":["css.properties.grid-template-columns.animation","css.properties.grid-template-rows.animation"],"description":"Grid animation allows you to animate the grid-template-columns and grid-template-rows CSS properties.","description_html":"Grid animation allows you to animate the <code>grid-template-columns</code> and <code>grid-template-rows</code> CSS properties.","name":"Grid animation","spec":"https://drafts.csswg.org/css-grid-2/#track-sizing","status":{"baseline":"low","baseline_low_date":"2022-10-27","support":{"chrome":"107","chrome_android":"107","edge":"107","firefox":"66","firefox_android":"66","safari":"16","safari_ios":"16"}}},"has":{"caniuse":"css-has","compat_features":["css.selectors.has"],"description":"The :has() CSS functional pseudo-class matches an element if any of the selectors passed as parameters would match at least one element.","description_html":"The <code>:has()</code> CSS functional pseudo-class matches an element if any of the selectors passed as parameters would match at least one element.","name":":has()","spec":"https://drafts.csswg.org/selectors-4/#relational","status":{"baseline":"low","baseline_low_date":"2023-12-19","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"121","firefox_android":"121","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4743"},"hidden-until-found":{"compat_features":["html.global_attributes.hidden.until-found_value"],"description":"The hidden=\"until-found\" attribute hides an element until it is found using the browser's find-in-page search or it is directly navigated to by following a URL fragment.","description_html":"The <code>hidden=\"until-found\"</code> attribute hides an element until it is found using the browser's find-in-page search or it is directly navigated to by following a URL fragment.","name":"hidden=\"until-found\"","spec":"https://html.spec.whatwg.org/multipage/interaction.html#attr-hidden-until-found","status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4114"},"highlight":{"compat_features":["api.CSS.highlights_static","api.Highlight","api.Highlight.@@iterator","api.Highlight.Highlight","api.Highlight.add","api.Highlight.clear","api.Highlight.delete","api.Highlight.entries","api.Highlight.forEach","api.Highlight.has","api.Highlight.keys","api.Highlight.priority","api.Highlight.size","api.Highlight.type","api.Highlight.values","api.HighlightRegistry","api.HighlightRegistry.@@iterator","api.HighlightRegistry.clear","api.HighlightRegistry.delete","api.HighlightRegistry.entries","api.HighlightRegistry.forEach","api.HighlightRegistry.get","api.HighlightRegistry.has","api.HighlightRegistry.keys","api.HighlightRegistry.set","api.HighlightRegistry.size","api.HighlightRegistry.values","css.selectors.highlight"],"description":"Custom highlights style arbitrary text ranges, without adding extra elements to the DOM.","description_html":"Custom highlights style arbitrary text ranges, without adding extra elements to the DOM.","name":"Custom highlights","spec":"https://drafts.csswg.org/css-highlight-api-1/","status":{"baseline":false,"support":{"chrome":"105","chrome_android":"105","edge":"105","safari":"17.2","safari_ios":"17.2"}}},"html-media-capture":{"caniuse":"html-media-capture","compat_features":["api.HTMLInputElement.capture","html.elements.input.capture"],"description":"The capture HTML attribute for <input type=\"file\"> elements allows the user to capture media using the device's camera or microphone.","description_html":"The <code>capture</code> HTML attribute for <code>&#x3C;input type=\"file\"></code> elements allows the user to capture media using the device's camera or microphone.","name":"HTML media capture","spec":"https://w3c.github.io/html-media-capture/","status":{"baseline":false,"support":{"chrome_android":"25","firefox_android":"79","safari_ios":"10"}}},"http11":{"compat_features":["http.methods.GET"],"description":"HTTP/1.1 is a network protocol used by browsers and servers. It has been superseded by HTTP/2 and HTTP/3.","description_html":"HTTP/1.1 is a network protocol used by browsers and servers. It has been superseded by HTTP/2 and HTTP/3.","name":"HTTP/1.1","spec":"https://httpwg.org/specs/rfc9112.html","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}}},"http2":{"caniuse":"http2","description":"The HTTP/2 protocol is a major revision of the HTTP network protocol, providing improved performance and efficiency by using a single TCP connection to send multiple streams of data at once.","description_html":"The HTTP/2 protocol is a major revision of the HTTP network protocol, providing improved performance and efficiency by using a single TCP connection to send multiple streams of data at once.","name":"HTTP/2","spec":"https://httpwg.org/specs/rfc9113.html","status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"41","chrome_android":"41","edge":"12","firefox":"36","firefox_android":"36","safari":"9","safari_ios":"9"}}},"http3":{"caniuse":"http3","description":"HTTP/3 is a major revision of the HTTP network protocol, providing improved performance and efficiency by using QUIC as the underlying transport protocol.","description_html":"HTTP/3 is a major revision of the HTTP network protocol, providing improved performance and efficiency by using QUIC as the underlying transport protocol.","name":"HTTP/3","spec":"https://httpwg.org/specs/rfc9114.html","status":{"baseline":false,"support":{"chrome":"87","chrome_android":"87","edge":"87","firefox":"88","firefox_android":"88"}}},"hyphens":{"caniuse":"css-hyphens","compat_features":["css.properties.hyphens"],"description":"The hyphens CSS property controls when long words are broken by line wrapping. Although called hyphens, the property applies to word-splitting behavior across languages, such as customary spelling changes or the use of other characters to mark an intraword line break.","description_html":"The <code>hyphens</code> CSS property controls when long words are broken by line wrapping. Although called <code>hyphens</code>, the property applies to word-splitting behavior across languages, such as customary spelling changes or the use of other characters to mark an intraword line break.","name":"Hyphenation","spec":"https://drafts.csswg.org/css-text-3/#hyphens-property","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"55","chrome_android":"55","edge":"79","firefox":"43","firefox_android":"43","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/534"},"ic":{"compat_features":["css.types.length.ic"],"description":"The CSS ic unit corresponds to the width of CJK ideographic characters.","description_html":"The CSS <code>ic</code> unit corresponds to the width of CJK ideographic characters.","name":"ic unit","spec":"https://drafts.csswg.org/css-values-4/#ic","status":{"baseline":"low","baseline_low_date":"2022-10-03","support":{"chrome":"106","chrome_android":"106","edge":"106","firefox":"97","firefox_android":"97","safari":"15.4","safari_ios":"15.4"}}},"idle-detection":{"compat_features":["api.IdleDetector","api.IdleDetector.IdleDetector","api.IdleDetector.change_event","api.IdleDetector.requestPermission_static","api.IdleDetector.screenState","api.IdleDetector.start","api.IdleDetector.userState","http.headers.Permissions-Policy.idle-detection"],"description":"The IdleDetector API is used to notify a webpage of the user's idle, active, and locked state.","description_html":"The <code>IdleDetector</code> API is used to notify a webpage of the user's idle, active, and locked state.","name":"Idle detection","spec":"https://wicg.github.io/idle-detection/","status":{"baseline":false,"support":{"chrome":"94","chrome_android":"94","edge":"94"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2834"},"image-set":{"caniuse":"css-image-set","compat_features":["css.properties.background-image.image-set","css.properties.content.image-set","css.types.image.image-set"],"description":"The image-set() CSS function provides a set of images at different resolutions or pixel densities, which the browser can pick from, depending on the device capabilities.","description_html":"The <code>image-set()</code> CSS function provides a set of images at different resolutions or pixel densities, which the browser can pick from, depending on the device capabilities.","name":"image-set()","spec":"https://drafts.csswg.org/css-images-4/#image-set-notation","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"113","chrome_android":"113","edge":"113","firefox":"89","firefox_android":"89","safari":"17","safari_ios":"17"}}},"import-maps":{"caniuse":"import-maps","compat_features":["html.elements.script.type.importmap"],"description":"A <script type=\"importmap\"> HTML element provides an import map as a JSON string. An import map controls how the browser should resolve module specifiers when importing JavaScript modules.","description_html":"A <code>&#x3C;script type=\"importmap\"></code> HTML element provides an import map as a JSON string. An import map controls how the browser should resolve module specifiers when importing JavaScript modules.","name":"Import maps","spec":"https://html.spec.whatwg.org/multipage/webappapis.html#import-maps","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"89","chrome_android":"89","edge":"89","firefox":"108","firefox_android":"108","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2831"},"indeterminate":{"caniuse":"css-indeterminate-pseudo","compat_features":["css.selectors.indeterminate","css.selectors.indeterminate.checkbox","css.selectors.indeterminate.progress","css.selectors.indeterminate.radio"],"description":"The :indeterminate CSS pseudo-class selects any form element whose state is indeterminate, such as checkboxes that have been set to an indeterminate state with JavaScript, or radio buttons which are members of a group in which all radio buttons are unchecked.","description_html":"The <code>:indeterminate</code> CSS pseudo-class selects any form element whose state is indeterminate, such as checkboxes that have been set to an indeterminate state with JavaScript, or radio buttons which are members of a group in which all radio buttons are unchecked.","name":":indeterminate","spec":["https://drafts.csswg.org/selectors-4/#indeterminate","https://html.spec.whatwg.org/multipage/semantics-other.html#selector-indeterminate"],"status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"39","chrome_android":"39","edge":"79","firefox":"51","firefox_android":"51","safari":"10","safari_ios":"10"}}},"individual-transforms":{"compat_features":["css.properties.rotate","css.properties.scale","css.properties.translate"],"description":"Transform elements with separate translate, rotate, and scale CSS properties.","description_html":"Transform elements with separate <code>translate</code>, <code>rotate</code>, and <code>scale</code> CSS properties.","name":"Individual transform properties","spec":"https://drafts.csswg.org/css-transforms-2/#individual-transforms","status":{"baseline":"low","baseline_low_date":"2022-08-05","support":{"chrome":"104","chrome_android":"104","edge":"104","firefox":"72","firefox_android":"79","safari":"14.1","safari_ios":"14.5"}},"usage_stats":["https://chromestatus.com/metrics/css/timeline/popularity/504","https://chromestatus.com/metrics/css/timeline/popularity/505","https://chromestatus.com/metrics/css/timeline/popularity/506"]},"inert":{"compat_features":["api.HTMLElement.inert","html.global_attributes.inert"],"description":"The inert HTML attribute marks an element and its descendants as non-interactive. Inert elements don't get focus or fire click events.","description_html":"The <code>inert</code> HTML attribute marks an element and its descendants as non-interactive. Inert elements don't get focus or fire <code>click</code> events.","name":"Inert elements","spec":"https://html.spec.whatwg.org/multipage/interaction.html#inert-subtrees","status":{"baseline":"low","baseline_low_date":"2023-04-11","support":{"chrome":"102","chrome_android":"102","edge":"102","firefox":"112","firefox_android":"112","safari":"15.5","safari_ios":"15.5"}}},"input-event":{"caniuse":"input-event","compat_features":["api.Element.input_event","api.InputEvent","api.InputEvent.InputEvent","api.InputEvent.data","api.InputEvent.dataTransfer","api.InputEvent.getTargetRanges","api.InputEvent.inputType","api.InputEvent.isComposing"],"description":"The input event fires when a form control changes or an element with the contenteditable attribute changes.","description_html":"The <code>input</code> event fires when a form control changes or an element with the <code>contenteditable</code> attribute changes.","name":"input event","spec":"https://w3c.github.io/uievents/#event-type-input","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"60","chrome_android":"60","edge":"79","firefox":"87","firefox_android":"87","safari":"16.4","safari_ios":"16.4"}}},"intersection-observer":{"caniuse":"intersectionobserver","compat_features":["api.IntersectionObserver","api.IntersectionObserver.IntersectionObserver","api.IntersectionObserver.disconnect","api.IntersectionObserver.observe","api.IntersectionObserver.root","api.IntersectionObserver.rootMargin","api.IntersectionObserver.takeRecords","api.IntersectionObserver.thresholds","api.IntersectionObserver.unobserve","api.IntersectionObserverEntry","api.IntersectionObserverEntry.boundingClientRect","api.IntersectionObserverEntry.intersectionRatio","api.IntersectionObserverEntry.intersectionRect","api.IntersectionObserverEntry.isIntersecting","api.IntersectionObserverEntry.rootBounds","api.IntersectionObserverEntry.target","api.IntersectionObserverEntry.time"],"description":"The Intersection Observer API asynchronously observes changes in the intersection of a target element with an ancestor element or with a top-level document's viewport.","description_html":"The Intersection Observer API asynchronously observes changes in the intersection of a target element with an ancestor element or with a top-level document's viewport.","name":"Intersection observer","spec":"https://w3c.github.io/IntersectionObserver/","status":{"baseline":"high","baseline_high_date":"2021-09-25","baseline_low_date":"2019-03-25","support":{"chrome":"58","chrome_android":"58","edge":"16","firefox":"55","firefox_android":"55","safari":"12.1","safari_ios":"12.2"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1368"},"intersection-observer-v2":{"caniuse":"intersectionobserver-v2","description":"The trackVisibility parameter for the IntersectionObserver constructor enables tracking the visibility of an element, to detect if it may be obscured by other content or visual effects. Also known as IntersectionObserver v2.","description_html":"The <code>trackVisibility</code> parameter for the <code>IntersectionObserver</code> constructor enables tracking the visibility of an element, to detect if it may be obscured by other content or visual effects. Also known as IntersectionObserver v2.","name":"Intersection observer visibility tracking","spec":"https://w3c.github.io/IntersectionObserver/v2/","status":{"baseline":false,"support":{"chrome":"74","chrome_android":"74","edge":"79"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3051"},"is":{"caniuse":"css-matches-pseudo","compat_features":["css.selectors.is","css.selectors.is.forgiving_selector_list"],"description":"The :is() CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list.","description_html":"The <code>:is()</code> CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list.","name":":is()","spec":"https://drafts.csswg.org/selectors-4/#matches","status":{"baseline":"high","baseline_high_date":"2023-07-21","baseline_low_date":"2021-01-21","support":{"chrome":"88","chrome_android":"88","edge":"88","firefox":"82","firefox_android":"82","safari":"14","safari_ios":"14"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2322"},"jpegxl":{"caniuse":"jpegxl","description":"The JPEG XL image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","description_html":"The JPEG XL image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","name":"JPEG XL","spec":"https://www.iso.org/standard/85253.html","status":{"baseline":false,"support":{"safari":"17","safari_ios":"17"}}},"js-modules":{"caniuse":"es6-module","compat_features":["html.elements.script.nomodule","html.elements.script.type.module","javascript.statements.export","javascript.statements.export.default","javascript.statements.import"],"description":"JavaScript modules allow code to be organized into reusable units. Modules use import to load other modules and export to declare what is available to import from other modules. In HTML, modules are loaded with <script type=\"module\">.","description_html":"JavaScript modules allow code to be organized into reusable units. Modules use <code>import</code> to load other modules and <code>export</code> to declare what is available to import from other modules. In HTML, modules are loaded with <code>&#x3C;script type=\"module\"></code>.","name":"JavaScript modules","spec":["https://html.spec.whatwg.org/multipage/webappapis.html#javascript-module-script","https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#sec-modules"],"status":{"baseline":"high","baseline_high_date":"2020-11-09","baseline_low_date":"2018-05-09","support":{"chrome":"61","chrome_android":"61","edge":"16","firefox":"60","firefox_android":"60","safari":"11","safari_ios":"11"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/2062","https://chromestatus.com/metrics/feature/timeline/popularity/2615"]},"js-modules-service-workers":{"compat_features":["api.ServiceWorker.ecmascript_modules","javascript.statements.import.service_worker_support"],"description":"The navigator.serviceWorker.register() method accepts { type: \"module\" } to load scripts that use import and export. Also known as ECMAScript modules or ESM in service workers.","description_html":"The <code>navigator.serviceWorker.register()</code> method accepts <code>{ type: \"module\" }</code> to load scripts that use <code>import</code> and <code>export</code>. Also known as ECMAScript modules or ESM in service workers.","name":"JavaScript modules in service workers","spec":"https://w3c.github.io/ServiceWorker/#dom-registrationoptions-type","status":{"baseline":false,"support":{"chrome":"91","chrome_android":"91","edge":"91","safari":"15","safari_ios":"15"}}},"js-modules-shared-workers":{"compat_features":["api.SharedWorker.SharedWorker.ecmascript_modules"],"description":"The SharedWorker() constructor accepts { type: \"module\" } to load scripts that use import and export. Also known as ECMAScript modules or ESM in shared workers.","description_html":"The <code>SharedWorker()</code> constructor accepts <code>{ type: \"module\" }</code> to load scripts that use <code>import</code> and <code>export</code>. Also known as ECMAScript modules or ESM in shared workers.","name":"JavaScript modules in shared workers","spec":"https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the-sharedworker-interface:dom-sharedworker-2","status":{"baseline":false,"support":{"chrome":"80","edge":"80","firefox":"114","firefox_android":"114","safari":"15","safari_ios":"15"}}},"js-modules-workers":{"compat_features":["api.Worker.Worker.ecmascript_modules","api.Worker.Worker.options_type_parameter","javascript.operators.import.worker_support","javascript.statements.import.worker_support"],"description":"The Worker() constructor accepts { type: \"module\" } to load scripts that use import and export. Also known as ECMAScript modules or ESM in workers.","description_html":"The <code>Worker()</code> constructor accepts <code>{ type: \"module\" }</code> to load scripts that use <code>import</code> and <code>export</code>. Also known as ECMAScript modules or ESM in workers.","name":"JavaScript modules in workers","spec":"https://html.spec.whatwg.org/multipage/workers.html#dom-worker-dev","status":{"baseline":"low","baseline_low_date":"2023-06-06","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"114","firefox_android":"114","safari":"15","safari_ios":"15"}}},"lab":{"compat_features":["css.types.color.lab","css.types.color.lch"],"description":"The CIE Lab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is. LCH is a variant of Lab with polar coordinates. These color spaces can be used with the CSS color(), lab(), and lch() functions. Also known as CIELAB and CIELCH.","description_html":"The CIE Lab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is. LCH is a variant of Lab with polar coordinates. These color spaces can be used with the CSS <code>color()</code>, <code>lab()</code>, and <code>lch()</code> functions. Also known as CIELAB and CIELCH.","name":"Lab and LCH","spec":"https://drafts.csswg.org/css-color-4/#cie-lab","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"15","safari_ios":"15"}}},"lh":{"compat_features":["css.types.length.lh"],"description":"The CSS lh unit corresponds to the requested line height, the computed value of the line-height property. Some lines may be higher than this based on their content.","description_html":"The CSS <code>lh</code> unit corresponds to the requested line height, the computed value of the <code>line-height</code> property. Some lines may be higher than this based on their content.","name":"lh unit","spec":"https://drafts.csswg.org/css-values-4/#lh","status":{"baseline":"low","baseline_low_date":"2023-11-21","support":{"chrome":"109","chrome_android":"109","edge":"109","firefox":"120","firefox_android":"120","safari":"16.4","safari_ios":"16.4"}}},"light-dark":{"compat_features":["css.types.color.light-dark"],"description":"The light-dark() CSS function accepts two colors and uses one depending on the current color scheme.","description_html":"The <code>light-dark()</code> CSS function accepts two colors and uses one depending on the current color scheme.","name":"light-dark()","spec":"https://drafts.csswg.org/css-color-5/#light-dark","status":{"baseline":"low","baseline_low_date":"2024-05-13","support":{"chrome":"123","chrome_android":"123","edge":"123","firefox":"120","firefox_android":"120","safari":"17.5","safari_ios":"17.5"}}},"line-clamp":{"caniuse":"css-line-clamp","compat_features":["css.properties.line-clamp"],"description":"The line-clamp CSS property limits the text in a block container to a certain number of lines. The prefixed -webkit-line-clamp is widely supported but only works with -webkit-box-orient: vertical in combination with display: -webkit-box or display: -webkit-inline-box.","description_html":"The <code>line-clamp</code> CSS property limits the text in a block container to a certain number of lines. The prefixed <code>-webkit-line-clamp</code> is widely supported but only works with <code>-webkit-box-orient: vertical</code> in combination with <code>display: -webkit-box</code> or <code>display: -webkit-inline-box</code>.","name":"line-clamp","spec":"https://drafts.csswg.org/css-overflow-4/#line-clamp","status":{"baseline":false,"support":{}}},"linear-easing":{"compat_features":["css.types.easing-function.linear-function"],"description":"The linear() easing function for animations and transitions interpolates linearly between the control points, and can be used to approximate complex easing functions, such as a bounce effect.","description_html":"The <code>linear()</code> easing function for animations and transitions interpolates linearly between the control points, and can be used to approximate complex easing functions, such as a bounce effect.","name":"linear() easing","spec":"https://drafts.csswg.org/css-easing-2/#the-linear-easing-function","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"113","chrome_android":"113","edge":"113","firefox":"112","firefox_android":"112","safari":"17.2","safari_ios":"17.2"}}},"loading-lazy":{"caniuse":"loading-lazy-attr","compat_features":["api.HTMLIFrameElement.loading","api.HTMLImageElement.loading","html.elements.iframe.loading","html.elements.img.loading"],"description":"The loading=\"lazy\" attribute for <img> and <iframe> elements blocks loading the external resource until the user scrolls to that element's part of the page.","description_html":"The <code>loading=\"lazy\"</code> attribute for <code>&#x3C;img></code> and <code>&#x3C;iframe></code> elements blocks loading the external resource until the user scrolls to that element's part of the page.","name":"Lazy-loading images and iframes","spec":"https://html.spec.whatwg.org/multipage/urls-and-fetching.html#lazy-loading-attributes","status":{"baseline":"low","baseline_low_date":"2023-12-19","support":{"chrome":"77","chrome_android":"77","edge":"79","firefox":"121","firefox_android":"121","safari":"16.4","safari_ios":"16.4"}}},"managed-media-source":{"compat_features":["api.ManagedMediaSource","api.ManagedMediaSource.ManagedMediaSource","api.ManagedMediaSource.endstreaming_event","api.ManagedMediaSource.startstreaming_event","api.ManagedMediaSource.streaming","api.ManagedSourceBuffer","api.ManagedSourceBuffer.bufferedchange_event"],"description":"The ManagedMediaSource API is a MediaSource where the browser manages the memory of source buffers and may evict data if needed.","description_html":"The <code>ManagedMediaSource</code> API is a <code>MediaSource</code> where the browser manages the memory of source buffers and may evict data if needed.","name":"Managed media source","spec":"https://w3c.github.io/media-source/#managedmediasource-interface","status":{"baseline":false,"support":{"safari":"17","safari_ios":"17.1"}}},"map":{"compat_features":["javascript.builtins.Map","javascript.builtins.Map.Map","javascript.builtins.Map.Map.iterable_allowed","javascript.builtins.Map.Map.null_allowed","javascript.builtins.Map.clear","javascript.builtins.Map.delete","javascript.builtins.Map.entries","javascript.builtins.Map.forEach","javascript.builtins.Map.get","javascript.builtins.Map.has","javascript.builtins.Map.key_equality_for_zeros","javascript.builtins.Map.keys","javascript.builtins.Map.set","javascript.builtins.Map.size","javascript.builtins.Map.values","javascript.builtins.Map.@@iterator","javascript.builtins.Map.@@species"],"description":"Map objects hold key-value pairs and remember the original insertion order of the keys.","description_html":"Map objects hold key-value pairs and remember the original insertion order of the keys.","name":"Map (initial support)","spec":["https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map-objects","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map-constructor","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.clear","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.delete","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.entries","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.foreach","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.get","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.has","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.keys","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.set","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-get-map.prototype.size","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype.values","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-map.prototype-@@iterator","https://tc39.es/ecma262/multipage/keyed-collections.html#sec-get-map-@@species"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"13","firefox_android":"14","safari":"8","safari_ios":"8"}}},"margin-trim":{"compat_features":["css.properties.margin-trim","css.properties.margin-trim.block","css.properties.margin-trim.block-end","css.properties.margin-trim.block-start","css.properties.margin-trim.inline","css.properties.margin-trim.inline-end","css.properties.margin-trim.inline-start","css.properties.margin-trim.none"],"description":"The margin-trim CSS property removes the margins of child elements when they meet the edges of the container.","description_html":"The <code>margin-trim</code> CSS property removes the margins of child elements when they meet the edges of the container.","name":"margin-trim","spec":"https://drafts.csswg.org/css-box-4/#margin-trim","status":{"baseline":false,"support":{"safari":"16.4","safari_ios":"16.4"}}},"masks":{"caniuse":"css-masks","compat_features":["css.properties.mask","css.properties.mask-clip","css.properties.mask-composite","css.properties.mask-image","css.properties.mask-mode","css.properties.mask-origin","css.properties.mask-position","css.properties.mask-repeat","css.properties.mask-size"],"description":"The mask CSS property (and several longhand properties) partially or completely hides an element according to the shape and depth of an image.","description_html":"The <code>mask</code> CSS property (and several longhand properties) partially or completely hides an element according to the shape and depth of an image.","name":"Masks","spec":"https://drafts.fxtf.org/css-masking-1/#positioned-masks","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"53","firefox_android":"53","safari":"15.4","safari_ios":"15.4"}}},"masonry":{"compat_features":["css.properties.align-tracks","css.properties.grid-template-columns.masonry","css.properties.grid-template-rows.masonry","css.properties.justify-tracks","css.properties.masonry-auto-flow"],"description":"Masonry is a type of CSS grid layout where the items on one of the axes are tightly packed together, like brickwork, instead of leaving gaps to align across the other axis.","description_html":"Masonry is a type of CSS grid layout where the items on one of the axes are tightly packed together, like brickwork, instead of leaving gaps to align across the other axis.","name":"Masonry","spec":"https://drafts.csswg.org/css-grid-3/","status":{"baseline":false,"support":{}}},"mathml":{"caniuse":"mathml","description":"MathML, or the Mathematical Markup Language, describes mathematical notation, such as expressions and formulas. Also known as MathML Core.","description_html":"MathML, or the Mathematical Markup Language, describes mathematical notation, such as expressions and formulas. Also known as MathML Core.","name":"MathML","spec":"https://w3c.github.io/mathml-core/","status":{"baseline":"low","baseline_low_date":"2023-01-12","support":{"chrome":"109","chrome_android":"109","edge":"109","firefox":"4","firefox_android":"4","safari":"10","safari_ios":"10"}}},"media-capture":{"caniuse":"stream","compat_features":["api.MediaDeviceInfo","api.MediaDeviceInfo.deviceId","api.MediaDeviceInfo.groupId","api.MediaDeviceInfo.kind","api.MediaDeviceInfo.label","api.MediaDevices","api.MediaDevices.enumerateDevices","api.MediaDevices.getUserMedia","api.MediaStream.getAudioTracks","api.MediaStream.getTracks","api.MediaStream.getVideoTracks","api.MediaStreamTrack","api.MediaStreamTrack.enabled","api.MediaStreamTrack.id","api.MediaStreamTrack.kind","api.MediaStreamTrack.label","api.MediaStreamTrack.stop"],"description":"The navigator.mediaDevices.getUserMedia() API requests access to devices that produce audio or video streams, such as microphones or video cameras.","description_html":"The <code>navigator.mediaDevices.getUserMedia()</code> API requests access to devices that produce audio or video streams, such as microphones or video cameras.","name":"Media capture","spec":"https://w3c.github.io/mediacapture-main/","status":{"baseline":"high","baseline_high_date":"2020-03-19","baseline_low_date":"2017-09-19","support":{"chrome":"53","chrome_android":"53","edge":"12","firefox":"39","firefox_android":"39","safari":"11","safari_ios":"11"}}},"media-pseudos":{"compat_features":["css.selectors.buffering","css.selectors.muted","css.selectors.paused","css.selectors.playing","css.selectors.seeking","css.selectors.stalled","css.selectors.volume-locked"],"description":"The :playing, :paused, :seeking, :buffering, :stalled, :muted, and :volume-locked CSS pseudo-classes match <audio> and <video> elements based on their state.","description_html":"The <code>:playing</code>, <code>:paused</code>, <code>:seeking</code>, <code>:buffering</code>, <code>:stalled</code>, <code>:muted</code>, and <code>:volume-locked</code> CSS pseudo-classes match <code>&#x3C;audio></code> and <code>&#x3C;video></code> elements based on their state.","name":"Media element pseudo-classes","spec":["https://drafts.csswg.org/selectors-4/#resource-pseudos","https://html.spec.whatwg.org/multipage/semantics-other.html#pseudo-classes"],"status":{"baseline":false,"support":{"safari":"15.4","safari_ios":"15.4"}}},"media-query-range-syntax":{"caniuse":"css-media-range-syntax","compat_features":["css.at-rules.media.range_syntax"],"description":"The range syntax of CSS media queries allows you to use mathematical comparison operators such as <, >, <=, and >= to define a range of values for a media feature. For example, (400px < width < 1000px) returns true if the viewport width is between 400px and 1000px.","description_html":"The range syntax of CSS media queries allows you to use mathematical comparison operators such as <code>&#x3C;</code>, <code>></code>, <code>&#x3C;=</code>, and <code>>=</code> to define a range of values for a media feature. For example, <code>(400px &#x3C; width &#x3C; 1000px)</code> returns true if the viewport width is between 400px and 1000px.","name":"Media query range syntax","spec":"https://drafts.csswg.org/mediaqueries-4/#mq-range-context","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"104","chrome_android":"104","edge":"104","firefox":"102","firefox_android":"102","safari":"16.4","safari_ios":"16.4"}}},"media-session":{"compat_features":["api.MediaMetadata","api.MediaMetadata.album","api.MediaMetadata.artist","api.MediaMetadata.artwork","api.MediaMetadata.MediaMetadata","api.MediaMetadata.title","api.MediaSession","api.MediaSession.metadata","api.MediaSession.playbackState","api.MediaSession.setActionHandler","api.MediaSession.setActionHandler.nexttrack_type","api.MediaSession.setActionHandler.pause_type","api.MediaSession.setActionHandler.play_type","api.MediaSession.setActionHandler.previoustrack_type","api.MediaSession.setActionHandler.seekbackward_type","api.MediaSession.setActionHandler.seekforward_type","api.Navigator.mediaSession"],"description":"The navigator.mediaSession API integrates with platform UI for media playback. It can be used to set metadata such as title and artwork, and to handle user actions like playing, pausing, or seeking.","description_html":"The <code>navigator.mediaSession</code> API integrates with platform UI for media playback. It can be used to set metadata such as title and artwork, and to handle user actions like playing, pausing, or seeking.","name":"Media session","spec":"https://w3c.github.io/mediasession/","status":{"baseline":false,"support":{"chrome":"73","chrome_android":"57","edge":"79","firefox":"82","safari":"15","safari_ios":"15"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1789"},"media-source":{"caniuse":"mediasource","compat_features":["api.MediaSource","api.SourceBuffer","api.SourceBufferList"],"description":"The MediaSource API is a custom data source for media elements commonly used for adaptive streaming. Also known as Media Source Extensions (MSE).","description_html":"The <code>MediaSource</code> API is a custom data source for media elements commonly used for adaptive streaming. Also known as Media Source Extensions (MSE).","name":"Media source","spec":"https://w3c.github.io/media-source/","status":{"baseline":false,"support":{"chrome":"31","chrome_android":"31","edge":"12","firefox":"42","firefox_android":"42","safari":"8"}}},"messageerror":{"compat_features":["api.DedicatedWorkerGlobalScope.messageerror_event","api.MessagePort.messageerror_event","api.ServiceWorkerContainer.messageerror_event","api.Window.messageerror_event"],"description":"The messageerror event fires on a target, such as a window or worker, when an incoming message cannot be deserialized. This event can fire for many types of messages, such as cross-document messages or broadcast channel messages.","description_html":"The <code>messageerror</code> event fires on a target, such as a window or worker, when an incoming message cannot be deserialized. This event can fire for many types of messages, such as cross-document messages or broadcast channel messages.","name":"messageerror","spec":["https://html.spec.whatwg.org/multipage/indices.html#event-messageerror","https://w3c.github.io/ServiceWorker/#eventdef-serviceworkerglobalscope-messageerror"],"status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"65","firefox_android":"65","safari":"16.4","safari_ios":"16.4"}}},"min-max-clamp":{"compat_features":["css.types.clamp","css.types.max","css.types.min"],"description":"The min() and max() CSS functions return the minimum or maximum of the arguments, while clamp() clamps a value to a given range.","description_html":"The <code>min()</code> and <code>max()</code> CSS functions return the minimum or maximum of the arguments, while <code>clamp()</code> clamps a value to a given range.","name":"min(), max(), and clamp()","spec":"https://drafts.csswg.org/css-values-4/#comp-func","status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"79","chrome_android":"79","edge":"79","firefox":"75","firefox_android":"79","safari":"13.1","safari_ios":"13.4"}}},"modal":{"compat_features":["css.selectors.modal"],"description":"The :modal pseudo-class selects elements that put other elements into a non-interactive state, such as a fullscreen element or a <dialog> element used with showModal().","description_html":"The <code>:modal</code> pseudo-class selects elements that put other elements into a non-interactive state, such as a fullscreen element or a <code>&#x3C;dialog></code> element used with <code>showModal()</code>.","name":":modal","spec":"https://drafts.csswg.org/selectors-4/#modal-state","status":{"baseline":"low","baseline_low_date":"2022-09-02","support":{"chrome":"105","chrome_android":"105","edge":"105","firefox":"103","firefox_android":"103","safari":"15.6","safari_ios":"15.6"}}},"modulepreload":{"caniuse":"link-rel-modulepreload","compat_features":["html.elements.link.rel.modulepreload"],"description":"The rel=\"modulepreload\" attribute for the <link> HTML element indicates that a module script should be fetched, parsed, and compiled preemptively, and stored for later execution.","description_html":"The <code>rel=\"modulepreload\"</code> attribute for the <code>&#x3C;link></code> HTML element indicates that a module script should be fetched, parsed, and compiled preemptively, and stored for later execution.","name":"<link rel=\"modulepreload\">","spec":"https://html.spec.whatwg.org/multipage/links.html#link-type-modulepreload","status":{"baseline":"low","baseline_low_date":"2023-09-18","support":{"chrome":"66","chrome_android":"66","edge":"79","firefox":"115","firefox_android":"115","safari":"17","safari_ios":"17"}}},"motion-path":{"caniuse":"css-motion-paths","compat_features":["css.properties.offset","css.properties.offset-anchor","css.properties.offset-distance","css.properties.offset-path","css.properties.offset-path.path","css.properties.offset-rotate"],"description":"The offset CSS property animates an element along a defined motion path.","description_html":"The <code>offset</code> CSS property animates an element along a defined motion path.","name":"Motion path","spec":"https://drafts.fxtf.org/motion-1/","status":{"baseline":"low","baseline_low_date":"2023-08-21","support":{"chrome":"116","chrome_android":"116","edge":"116","firefox":"72","firefox_android":"79","safari":"16","safari_ios":"16"}}},"navigation":{"compat_features":["api.NavigateEvent","api.NavigateEvent.NavigateEvent","api.NavigateEvent.destination","api.NavigateEvent.downloadRequest","api.NavigateEvent.formData","api.NavigateEvent.hashChange","api.NavigateEvent.info","api.NavigateEvent.navigationType","api.NavigateEvent.signal","api.NavigateEvent.userInitiated","api.Navigation","api.Navigation.back","api.Navigation.canGoBack","api.Navigation.canGoForward","api.Navigation.currentEntry","api.Navigation.currententrychange_event","api.Navigation.entries","api.Navigation.forward","api.Navigation.navigate","api.Navigation.navigate_event","api.Navigation.navigateerror_event","api.Navigation.navigatesuccess_event","api.Navigation.reload","api.Navigation.transition","api.Navigation.traverseTo","api.Navigation.updateCurrentEntry","api.NavigationCurrentEntryChangeEvent","api.NavigationCurrentEntryChangeEvent.NavigationCurrentEntryChangeEvent","api.NavigationCurrentEntryChangeEvent.from","api.NavigationCurrentEntryChangeEvent.navigationType","api.NavigationDestination","api.NavigationDestination.getState","api.NavigationDestination.id","api.NavigationDestination.index","api.NavigationDestination.key","api.NavigationDestination.sameDocument","api.NavigationDestination.url","api.NavigationHistoryEntry","api.NavigationHistoryEntry.dispose_event","api.NavigationHistoryEntry.getState","api.NavigationHistoryEntry.id","api.NavigationHistoryEntry.index","api.NavigationHistoryEntry.key","api.NavigationHistoryEntry.sameDocument","api.NavigationHistoryEntry.url","api.NavigationTransition","api.NavigationTransition.finished","api.NavigationTransition.from","api.NavigationTransition.navigationType","api.Window.navigation"],"description":"The navigation API provides mechanisms to initiate, intercept, and manage browser navigation actions.","description_html":"The <code>navigation</code> API provides mechanisms to initiate, intercept, and manage browser navigation actions.","name":"Navigation API","spec":"https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-api","status":{"baseline":false,"support":{"chrome":"102","chrome_android":"102","edge":"102"}}},"nesting":{"caniuse":"css-nesting","compat_features":["api.CSSStyleRule.cssRules","api.CSSStyleRule.deleteRule","api.CSSStyleRule.insertRule","css.selectors.nesting"],"description":"CSS nesting allows for shorter selectors, easier reading, and more modularity by nesting rules inside others.","description_html":"CSS nesting allows for shorter selectors, easier reading, and more modularity by nesting rules inside others.","name":"Nesting","spec":"https://drafts.csswg.org/css-nesting-1/","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"117","firefox_android":"117","safari":"17.2","safari_ios":"17.2"}}},"notifications":{"caniuse":"notifications","description":"The notifications API sends system notifications to the user, often even when the page or browser is not the foreground application.","description_html":"The notifications API sends system notifications to the user, often even when the page or browser is not the foreground application.","name":"Notifications","spec":"https://notifications.spec.whatwg.org/","status":{"baseline":false,"support":{"chrome":"20","chrome_android":"42","edge":"14","firefox":"22","firefox_android":"22","safari":"6"}}},"nth-child":{"compat_features":["css.selectors.nth-child","css.selectors.nth-last-child"],"description":"The :nth-child() and :nth-last-child() CSS functional pseudo-classes match elements by the relative position of elements (first, second, third, fourth, and so on), counted from the first or last sibling.","description_html":"The <code>:nth-child()</code> and <code>:nth-last-child()</code> CSS functional pseudo-classes match elements by the relative position of elements (first, second, third, fourth, and so on), counted from the first or last sibling.","name":":nth-child() (initial support)","spec":["https://drafts.csswg.org/selectors-3/#nth-child-pseudo","https://drafts.csswg.org/selectors-3/#nth-last-child-pseudo"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"4","chrome_android":"18","edge":"12","firefox":"3.5","firefox_android":"4","safari":"3.1","safari_ios":"2"}}},"nth-child-of":{"caniuse":"css-nth-child-of","compat_features":["css.selectors.nth-child.of_syntax","css.selectors.nth-last-child.of_syntax"],"description":"The of syntax for the :nth-child() and :nth-last-child() CSS functional pseudo-classess match elements by the relative position of elements, counted from the first or last sibling matching a selector list.","description_html":"The <code>of</code> syntax for the <code>:nth-child()</code> and <code>:nth-last-child()</code> CSS functional pseudo-classess match elements by the relative position of elements, counted from the first or last sibling matching a selector list.","name":":nth-child() of <selector>","spec":["https://drafts.csswg.org/selectors-4/#the-nth-child-pseudo","https://drafts.csswg.org/selectors-4/#the-nth-last-child-pseudo"],"status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"9","safari_ios":"9"}}},"offscreen-canvas":{"caniuse":"offscreencanvas","compat_features":["api.HTMLCanvasElement.transferControlToOffscreen","api.OffscreenCanvas","api.OffscreenCanvas.convertToBlob","api.OffscreenCanvas.getContext","api.OffscreenCanvas.getContext.2d_context","api.OffscreenCanvas.getContext.bitmaprenderer_context","api.OffscreenCanvas.height","api.OffscreenCanvas.OffscreenCanvas","api.OffscreenCanvas.transferToImageBitmap","api.OffscreenCanvas.width","api.OffscreenCanvasRenderingContext2D","api.OffscreenCanvasRenderingContext2D.arc","api.OffscreenCanvasRenderingContext2D.arcTo","api.OffscreenCanvasRenderingContext2D.beginPath","api.OffscreenCanvasRenderingContext2D.bezierCurveTo","api.OffscreenCanvasRenderingContext2D.canvas","api.OffscreenCanvasRenderingContext2D.clearRect","api.OffscreenCanvasRenderingContext2D.clip","api.OffscreenCanvasRenderingContext2D.closePath","api.OffscreenCanvasRenderingContext2D.createImageData","api.OffscreenCanvasRenderingContext2D.createLinearGradient","api.OffscreenCanvasRenderingContext2D.createPattern","api.OffscreenCanvasRenderingContext2D.createRadialGradient","api.OffscreenCanvasRenderingContext2D.direction","api.OffscreenCanvasRenderingContext2D.drawImage","api.OffscreenCanvasRenderingContext2D.ellipse","api.OffscreenCanvasRenderingContext2D.fill","api.OffscreenCanvasRenderingContext2D.fillRect","api.OffscreenCanvasRenderingContext2D.fillStyle","api.OffscreenCanvasRenderingContext2D.fillText","api.OffscreenCanvasRenderingContext2D.font","api.OffscreenCanvasRenderingContext2D.getImageData","api.OffscreenCanvasRenderingContext2D.getLineDash","api.OffscreenCanvasRenderingContext2D.getTransform","api.OffscreenCanvasRenderingContext2D.globalAlpha","api.OffscreenCanvasRenderingContext2D.globalCompositeOperation","api.OffscreenCanvasRenderingContext2D.imageSmoothingEnabled","api.OffscreenCanvasRenderingContext2D.isPointInPath","api.OffscreenCanvasRenderingContext2D.isPointInStroke","api.OffscreenCanvasRenderingContext2D.lineCap","api.OffscreenCanvasRenderingContext2D.lineDashOffset","api.OffscreenCanvasRenderingContext2D.lineJoin","api.OffscreenCanvasRenderingContext2D.lineTo","api.OffscreenCanvasRenderingContext2D.lineWidth","api.OffscreenCanvasRenderingContext2D.measureText","api.OffscreenCanvasRenderingContext2D.miterLimit","api.OffscreenCanvasRenderingContext2D.moveTo","api.OffscreenCanvasRenderingContext2D.putImageData","api.OffscreenCanvasRenderingContext2D.quadraticCurveTo","api.OffscreenCanvasRenderingContext2D.rect","api.OffscreenCanvasRenderingContext2D.resetTransform","api.OffscreenCanvasRenderingContext2D.restore","api.OffscreenCanvasRenderingContext2D.rotate","api.OffscreenCanvasRenderingContext2D.save","api.OffscreenCanvasRenderingContext2D.scale","api.OffscreenCanvasRenderingContext2D.setLineDash","api.OffscreenCanvasRenderingContext2D.setTransform","api.OffscreenCanvasRenderingContext2D.shadowBlur","api.OffscreenCanvasRenderingContext2D.shadowColor","api.OffscreenCanvasRenderingContext2D.shadowOffsetX","api.OffscreenCanvasRenderingContext2D.shadowOffsetY","api.OffscreenCanvasRenderingContext2D.stroke","api.OffscreenCanvasRenderingContext2D.strokeRect","api.OffscreenCanvasRenderingContext2D.strokeStyle","api.OffscreenCanvasRenderingContext2D.strokeText","api.OffscreenCanvasRenderingContext2D.textAlign","api.OffscreenCanvasRenderingContext2D.textBaseline","api.OffscreenCanvasRenderingContext2D.transform","api.OffscreenCanvasRenderingContext2D.translate"],"description":"The OffscreenCanvas API provides a canvas that can be drawn to off screen, with no dependencies on the DOM, which can be used to run heavy rendering operations inside a worker context.","description_html":"The <code>OffscreenCanvas</code> API provides a canvas that can be drawn to off screen, with no dependencies on the DOM, which can be used to run heavy rendering operations inside a worker context.","name":"Offscreen canvas","spec":"https://html.spec.whatwg.org/multipage/canvas.html#the-offscreencanvas-interface","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"80","chrome_android":"80","edge":"80","firefox":"105","firefox_android":"105","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1624"},"oklab":{"compat_features":["css.types.color.oklab","css.types.color.oklch"],"description":"The Oklab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is, aiming to match how humans perceive colors. Oklch is a variant of Oklab with polar coordinates. These color spaces can be used with the CSS color(), oklab(), and oklch() functions.","description_html":"The Oklab color space expresses colors in terms of lightness and how red/green and blue/yellow a color is, aiming to match how humans perceive colors. Oklch is a variant of Oklab with polar coordinates. These color spaces can be used with the CSS <code>color()</code>, <code>oklab()</code>, and <code>oklch()</code> functions.","name":"Oklab and Oklch","spec":"https://drafts.csswg.org/css-color-4/#ok-lab","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"113","firefox_android":"113","safari":"15.4","safari_ios":"15.4"}}},"origin-private-file-system":{"compat_features":["api.FileSystemDirectoryHandle","api.FileSystemDirectoryHandle.entries","api.FileSystemDirectoryHandle.getDirectoryHandle","api.FileSystemDirectoryHandle.getFileHandle","api.FileSystemDirectoryHandle.keys","api.FileSystemDirectoryHandle.removeEntry","api.FileSystemDirectoryHandle.resolve","api.FileSystemDirectoryHandle.values","api.FileSystemFileHandle","api.FileSystemFileHandle.createSyncAccessHandle","api.FileSystemFileHandle.getFile","api.FileSystemHandle","api.FileSystemHandle.isSameEntry","api.FileSystemHandle.kind","api.FileSystemHandle.name","api.FileSystemSyncAccessHandle","api.FileSystemSyncAccessHandle.close","api.FileSystemSyncAccessHandle.flush","api.FileSystemSyncAccessHandle.getSize","api.FileSystemSyncAccessHandle.read","api.FileSystemSyncAccessHandle.truncate","api.FileSystemSyncAccessHandle.write","api.StorageManager.getDirectory"],"description":"The navigator.storage.getDirectory() method returns a FileSystemDirectoryHandle that is restricted to a specific origin and invisible to the user's actual file system for faster file-based applications, such as SQLite databases.","description_html":"The <code>navigator.storage.getDirectory()</code> method returns a <code>FileSystemDirectoryHandle</code> that is restricted to a specific origin and invisible to the user's actual file system for faster file-based applications, such as SQLite databases.","name":"Origin private file system","spec":"https://fs.spec.whatwg.org/#origin-private-file-system","status":{"baseline":"low","baseline_low_date":"2023-03-14","support":{"chrome":"102","chrome_android":"109","edge":"102","firefox":"111","firefox_android":"111","safari":"15.2","safari_ios":"15.2"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3428"},"overflow-shorthand":{"caniuse":"css-overflow","compat_features":["css.properties.overflow","css.properties.overflow.clip","css.properties.overflow.multiple_keywords","css.properties.overflow-x","css.properties.overflow-x.clip","css.properties.overflow-y","css.properties.overflow-y.clip","css.types.overflow","css.types.overflow.clip"],"description":"The overflow CSS property sets the behavior for when content doesn't fit in an element.","description_html":"The <code>overflow</code> CSS property sets the behavior for when content doesn't fit in an element.","name":"overflow","spec":"https://drafts.csswg.org/css-overflow-3/#propdef-overflow","status":{"baseline":"low","baseline_low_date":"2022-09-12","support":{"chrome":"90","chrome_android":"90","edge":"90","firefox":"81","firefox_android":"81","safari":"16","safari_ios":"16"}}},"page-breaks":{"caniuse":"css-page-break","compat_features":["css.properties.break-after","css.properties.break-after.paged_context","css.properties.break-after.paged_context.page","css.properties.break-before","css.properties.break-before.paged_context","css.properties.break-before.paged_context.page","css.properties.break-inside","css.properties.break-inside.paged_context","css.properties.page-break-after","css.properties.page-break-after.avoid","css.properties.page-break-before","css.properties.page-break-before.avoid","css.properties.page-break-inside","css.properties.page-break-inside.avoid"],"description":"The break-after, break-before, break-inside CSS properties (along with page-break- aliases) control where printed pages start and end. Also known as pagination or page breaking.","description_html":"The <code>break-after</code>, <code>break-before</code>, <code>break-inside</code> CSS properties (along with <code>page-break-</code> aliases) control where printed pages start and end. Also known as pagination or page breaking.","name":"Page breaks","spec":"https://drafts.csswg.org/css-break-3/#breaking-controls","status":{"baseline":false,"support":{"chrome":"50","chrome_android":"50","edge":"12"}}},"parse-html-unsafe":{"compat_features":["api.Document.parseHTMLUnsafe_static","api.Element.setHTMLUnsafe","api.ShadowRoot.setHTMLUnsafe"],"description":"The Document.parseHTMLUnsafe() static method parses HTML into a DOM tree, while the setHTMLUnsafe() method of Element and ShadowRoot parses and inserts HTML into an existing tree. No sanitization applies to these methods, so never call them with user-provided HTML strings.","description_html":"The <code>Document.parseHTMLUnsafe()</code> static method parses HTML into a DOM tree, while the <code>setHTMLUnsafe()</code> method of <code>Element</code> and <code>ShadowRoot</code> parses and inserts HTML into an existing tree. No sanitization applies to these methods, so never call them with user-provided HTML strings.","name":"Unsanitized HTML parsing methods","spec":"https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#unsafe-html-parsing-methods","status":{"baseline":"low","baseline_low_date":"2024-04-18","support":{"chrome":"124","chrome_android":"124","edge":"124","firefox":"123","firefox_android":"123","safari":"17.4","safari_ios":"17.4"}}},"permissions":{"caniuse":"permissions-api","compat_features":["api.Navigator.permissions","api.PermissionStatus","api.PermissionStatus.state","api.Permissions","api.Permissions.query"],"description":"The navigator.permissions API checks whether a permission, such as access to geolocation data, has been granted.","description_html":"The <code>navigator.permissions</code> API checks whether a permission, such as access to geolocation data, has been granted.","name":"Permissions","spec":"https://w3c.github.io/permissions/","status":{"baseline":"low","baseline_low_date":"2022-09-12","support":{"chrome":"44","chrome_android":"44","edge":"79","firefox":"46","firefox_android":"46","safari":"16","safari_ios":"16"}}},"picture-in-picture":{"caniuse":"picture-in-picture","compat_features":["api.Document.exitPictureInPicture","api.Document.pictureInPictureElement","api.Document.pictureInPictureEnabled","api.HTMLVideoElement.disablePictureInPicture","api.HTMLVideoElement.enterpictureinpicture_event","api.HTMLVideoElement.leavepictureinpicture_event","api.HTMLVideoElement.requestPictureInPicture","api.PictureInPictureWindow","api.PictureInPictureWindow.height","api.PictureInPictureWindow.resize_event","api.PictureInPictureWindow.width","api.ShadowRoot.pictureInPictureElement"],"description":"The picture-in-picture API allow websites to create a floating, always-on-top video window. Also known as PiP or pop-out video.","description_html":"The picture-in-picture API allow websites to create a floating, always-on-top video window. Also known as PiP or pop-out video.","name":"Picture-in-picture (video)","spec":"https://w3c.github.io/picture-in-picture/","status":{"baseline":false,"support":{"chrome":"69","chrome_android":"105","edge":"79","safari":"13.1","safari_ios":"13.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2444"},"pointer-lock":{"caniuse":"pointerlock","compat_features":["api.Document.exitPointerLock","api.Document.pointerlockchange_event","api.Document.pointerLockElement","api.Document.pointerlockerror_event","api.Element.requestPointerLock","api.MouseEvent.movementX","api.MouseEvent.movementY"],"description":"Provides access to raw mouse movement by locking the target of mouse events to a single element and hiding the mouse cursor.","description_html":"Provides access to raw mouse movement by locking the target of mouse events to a single element and hiding the mouse cursor.","name":"Pointer lock","spec":"https://w3c.github.io/pointerlock/","status":{"baseline":false,"support":{"chrome":"37","chrome_android":"37","edge":"13","firefox":"50","firefox_android":"50","safari":"10.1"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/417"},"popover":{"compat_features":["api.HTMLButtonElement.popoverTargetAction","api.HTMLButtonElement.popoverTargetElement","api.HTMLElement.beforetoggle_event","api.HTMLElement.hidePopover","api.HTMLElement.popover","api.HTMLElement.showPopover","api.HTMLElement.toggle_event","api.HTMLElement.togglePopover","api.HTMLInputElement.popoverTargetAction","api.HTMLInputElement.popoverTargetElement","api.ToggleEvent","api.ToggleEvent.ToggleEvent","api.ToggleEvent.newState","api.ToggleEvent.oldState","css.selectors.backdrop.popover","css.selectors.popover-open","html.global_attributes.popover","html.elements.button.popovertarget","html.elements.button.popovertargetaction","html.elements.input.popovertarget","html.elements.input.popovertargetaction"],"description":"The popover HTML attribute creates an overlay to display content on top of other page content. Popovers can be shown declaratively using HTML, or using the showPopover() method.","description_html":"The <code>popover</code> HTML attribute creates an overlay to display content on top of other page content. Popovers can be shown declaratively using HTML, or using the <code>showPopover()</code> method.","name":"Popover","spec":"https://html.spec.whatwg.org/multipage/popover.html","status":{"baseline":"low","baseline_low_date":"2024-04-16","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"125","firefox_android":"125","safari":"17","safari_ios":"17"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4191"},"prefers-color-scheme":{"compat_features":["css.at-rules.media.prefers-color-scheme"],"description":"The prefers-color-scheme CSS media query detects the requested color scheme, light or dark.","description_html":"The <code>prefers-color-scheme</code> CSS media query detects the requested color scheme, light or dark.","name":"prefers-color-scheme","spec":"https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"67","firefox_android":"67","safari":"12.1","safari_ios":"13"}}},"preloading-responsive-images":{"compat_features":["api.HTMLLinkElement.imageSizes","api.HTMLLinkElement.imageSrcset","html.elements.link.imagesizes","html.elements.link.imagesrcset"],"description":"The imagesrcset and imagesizes attributes with the rel=\"preload\" attribute for the <link> HTML element starts fetching responsive images before they're found in the body of the document.","description_html":"The <code>imagesrcset</code> and <code>imagesizes</code> attributes with the <code>rel=\"preload\"</code> attribute for the <code>&#x3C;link></code> HTML element starts fetching responsive images before they're found in the body of the document.","name":"Preloading responsive images","spec":"https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"73","chrome_android":"73","edge":"79","firefox":"78","firefox_android":"79","safari":"17.2","safari_ios":"17.2"}}},"preserves-pitch":{"compat_features":["api.HTMLMediaElement.preservesPitch"],"description":"The preservesPitch property for <audio> or <video> adjusts the pitch of audio to sound more natural when the playback rate is faster or slower than the default.","description_html":"The <code>preservesPitch</code> property for <code>&#x3C;audio></code> or <code>&#x3C;video></code> adjusts the pitch of audio to sound more natural when the playback rate is faster or slower than the default.","name":"preservesPitch","spec":"https://html.spec.whatwg.org/multipage/media.html#dom-media-preservespitch-dev","status":{"baseline":"low","baseline_low_date":"2023-12-11","support":{"chrome":"86","chrome_android":"86","edge":"86","firefox":"101","firefox_android":"101","safari":"17.2","safari_ios":"17.2"}}},"print":{"compat_features":["api.Window.print"],"description":"The window.print() method opens the browser's print dialog.","description_html":"The <code>window.print()</code> method opens the browser's print dialog.","name":"window.print()","spec":"https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#printing","status":{"baseline":"low","baseline_low_date":"2023-06-06","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"114","safari":"1.1","safari_ios":"1"}}},"print-events":{"caniuse":"beforeafterprint","compat_features":["api.Window.afterprint_event","api.Window.beforeprint_event"],"description":"An alternative to @media print queries, the beforeprint and afterprint events allow you to change the page for printing and and restore the page after printing.","description_html":"An alternative to <code>@media print</code> queries, the <code>beforeprint</code> and <code>afterprint</code> events allow you to change the page for printing and and restore the page after printing.","name":"Print events","spec":["https://html.spec.whatwg.org/multipage/indices.html#event-afterprint","https://html.spec.whatwg.org/multipage/indices.html#event-beforeprint"],"status":{"baseline":"high","baseline_high_date":"2022-03-19","baseline_low_date":"2019-09-19","support":{"chrome":"63","chrome_android":"63","edge":"12","firefox":"6","firefox_android":"6","safari":"13","safari_ios":"13"}}},"promise":{"alias":"promises","caniuse":"promises","compat_features":["javascript.builtins.Promise","javascript.builtins.Promise.@@species","javascript.builtins.Promise.Promise","javascript.builtins.Promise.all","javascript.builtins.Promise.catch","javascript.builtins.Promise.race","javascript.builtins.Promise.reject","javascript.builtins.Promise.resolve","javascript.builtins.Promise.then"],"description":"A promise represents an asynchronous operation which eventually succeeds or fails.","description_html":"A promise represents an asynchronous operation which eventually succeeds or fails.","name":"Promise (initial support)","spec":["https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-objects","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-get-promise-@@species","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-constructor","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.all","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.prototype.catch","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.race","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.reject","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.resolve","https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.prototype.then"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"32","chrome_android":"32","edge":"12","firefox":"29","firefox_android":"29","safari":"8","safari_ios":"8"}}},"promise-allsettled":{"compat_features":["javascript.builtins.Promise.allSettled"],"description":"The Promise.allSettled() static method waits for an array of promises to settle (resolve or reject).","description_html":"The <code>Promise.allSettled()</code> static method waits for an array of promises to settle (resolve or reject).","name":"Promise.allSettled()","spec":"https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.allsettled","status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"71","firefox_android":"79","safari":"13","safari_ios":"13"}}},"promise-any":{"compat_features":["javascript.builtins.Promise.any"],"description":"The Promise.any() static method returns a promise that fulfills as soon as the first of an iterable of promises fulfills, with that promise's value. Otherwise, it rejects with an AggregateError when all of the promises have rejected.","description_html":"The <code>Promise.any()</code> static method returns a promise that fulfills as soon as the first of an iterable of promises fulfills, with that promise's value. Otherwise, it rejects with an <code>AggregateError</code> when all of the promises have rejected.","name":"Promise.any()","spec":"https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.any","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"85","chrome_android":"85","edge":"85","firefox":"79","firefox_android":"79","safari":"14","safari_ios":"14"}}},"promise-finally":{"caniuse":"promise-finally","compat_features":["javascript.builtins.Promise.finally"],"description":"The promise finally() method executes a function when the promise settles (resolves or rejects).","description_html":"The promise <code>finally()</code> method executes a function when the promise settles (resolves or rejects).","name":"Promise finally()","spec":"https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise.prototype.finally","status":{"baseline":"high","baseline_high_date":"2021-04-02","baseline_low_date":"2018-10-02","support":{"chrome":"63","chrome_android":"63","edge":"18","firefox":"58","firefox_android":"58","safari":"11.1","safari_ios":"11.3"}}},"promise-withresolvers":{"compat_features":["javascript.builtins.Promise.withResolvers"],"description":"The Promise.withResolvers() static method is an alternative to the Promise() constructor that returns both the promise and resolution functions. You can use this to access resolve and reject outside the scope of the executor function.","description_html":"The <code>Promise.withResolvers()</code> static method is an alternative to the <code>Promise()</code> constructor that returns both the promise and resolution functions. You can use this to access <code>resolve</code> and <code>reject</code> outside the scope of the executor function.","name":"Promise.withResolvers()","spec":"https://tc39.es/proposal-promise-with-resolvers/#sec-promise.withResolvers","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"119","chrome_android":"119","edge":"119","firefox":"121","firefox_android":"121","safari":"17.4","safari_ios":"17.4"}}},"push":{"caniuse":"push-api","compat_features":["api.PushEvent","api.PushEvent.PushEvent","api.PushEvent.data","api.PushManager","api.PushManager.getSubscription","api.PushManager.permissionState","api.PushMessageData","api.PushMessageData.arrayBuffer","api.PushMessageData.blob","api.PushMessageData.json","api.PushMessageData.text","api.PushSubscription","api.PushSubscription.endpoint","api.PushSubscription.getKey","api.PushSubscription.toJSON","api.PushSubscription.unsubscribe","api.ServiceWorkerRegistration.pushManager","api.ServiceWorkerGlobalScope.push_event"],"description":"The Push API subscribes to and receives server-initiated messages. Subscribers receive pushed messages in the background, even after periods inactive or offline.","description_html":"The Push API subscribes to and receives server-initiated messages. Subscribers receive pushed messages in the background, even after periods inactive or offline.","name":"Push messages","spec":"https://w3c.github.io/push-api/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"50","chrome_android":"50","edge":"17","firefox":"44","firefox_android":"48","safari":"16","safari_ios":"16.4"}}},"read-write-pseudos":{"alias":"read-write-pseudo-classes","caniuse":"css-read-only-write","compat_features":["css.selectors.read-only","css.selectors.read-write"],"description":"The :read-only and :read-write CSS pseudo-classes match elements that are read-only or read-write, respectively. For example, :read-only matches <input> and <textarea> elements with the readonly attribute.","description_html":"The <code>:read-only</code> and <code>:read-write</code> CSS pseudo-classes match elements that are read-only or read-write, respectively. For example, <code>:read-only</code> matches <code>&#x3C;input></code> and <code>&#x3C;textarea></code> elements with the <code>readonly</code> attribute.","name":":read-only and :read-write","spec":["https://html.spec.whatwg.org/multipage/semantics-other.html#selector-read-only","https://drafts.csswg.org/selectors-4/#rw-pseudos"],"status":{"baseline":"high","baseline_high_date":"2023-01-28","baseline_low_date":"2020-07-28","support":{"chrome":"1","chrome_android":"18","edge":"13","firefox":"78","firefox_android":"79","safari":"4","safari_ios":"3.2"}}},"registered-custom-properties":{"compat_features":["api.CSS.registerProperty_static","api.CSSPropertyRule","api.CSSPropertyRule.inherits","api.CSSPropertyRule.initialValue","api.CSSPropertyRule.name","api.CSSPropertyRule.syntax","css.at-rules.property","css.at-rules.property.inherits","css.at-rules.property.initial-value","css.at-rules.property.syntax"],"description":"The CSS.registerProperty() static method and the @property CSS at-rule register custom properties for which types and behaviors can be defined.","description_html":"The <code>CSS.registerProperty()</code> static method and the <code>@property</code> CSS at-rule register custom properties for which types and behaviors can be defined.","name":"Registered custom properties","spec":"https://drafts.css-houdini.org/css-properties-values-api-1/","status":{"baseline":false,"support":{"chrome":"85","chrome_android":"85","edge":"85","safari":"16.4","safari_ios":"16.4"}}},"relative-color":{"caniuse":"css-relative-colors","compat_features":["css.types.color.lab.relative_syntax","css.types.color.oklab.relative_syntax"],"description":"The from keyword for color functions (color(), hsl(), oklch(), etc.) creates a new color based on a given color by modifying the values of the input color. Also known as relative color syntax (RCS).","description_html":"The <code>from</code> keyword for color functions (<code>color()</code>, <code>hsl()</code>, <code>oklch()</code>, etc.) creates a new color based on a given color by modifying the values of the input color. Also known as relative color syntax (RCS).","name":"Relative colors","spec":"https://drafts.csswg.org/css-color-5/#relative-colors","status":{"baseline":false,"support":{"chrome":"119","chrome_android":"119","edge":"119","safari":"16.4","safari_ios":"16.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4632"},"request-animation-frame":{"caniuse":"requestanimationframe","compat_features":["api.Window.cancelAnimationFrame","api.Window.requestAnimationFrame"],"description":"The requestAnimationFrame() method schedules a function that runs before the next repaint. You can use it to animate content with JavaScript.","description_html":"The <code>requestAnimationFrame()</code> method schedules a function that runs before the next repaint. You can use it to animate content with JavaScript.","name":"requestAnimationFrame()","spec":"https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"24","chrome_android":"25","edge":"12","firefox":"23","firefox_android":"23","safari":"7","safari_ios":"7"}}},"request-animation-frame-workers":{"compat_features":["api.DedicatedWorkerGlobalScope.cancelAnimationFrame","api.DedicatedWorkerGlobalScope.requestAnimationFrame"],"description":"The requestAnimationFrame() method in workers schedules a function that runs before the next repaint. Together with offscreen canvas, you can animate content from a worker.","description_html":"The <code>requestAnimationFrame()</code> method in workers schedules a function that runs before the next repaint. Together with offscreen canvas, you can animate content from a worker.","name":"requestAnimationFrame() in workers","spec":"https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"99","firefox_android":"99","safari":"16.4","safari_ios":"16.4"}}},"request-video-frame-callback":{"compat_features":["api.HTMLVideoElement.requestVideoFrameCallback","api.HTMLVideoElement.cancelVideoFrameCallback"],"description":"The requestVideoFrameCallback() method for <video> schedules a function that runs with the next video frame. It is similar to requestAnimationFrame(), but for video.","description_html":"The <code>requestVideoFrameCallback()</code> method for <code>&#x3C;video></code> schedules a function that runs with the next video frame. It is similar to <code>requestAnimationFrame()</code>, but for video.","name":"requestVideoFrameCallback()","spec":"https://wicg.github.io/video-rvfc/","status":{"baseline":false,"support":{"chrome":"83","chrome_android":"83","edge":"83","safari":"15.4","safari_ios":"15.4"}}},"resource-size":{"compat_features":["api.PerformanceResourceTiming.transferSize","api.PerformanceResourceTiming.decodedBodySize","api.PerformanceResourceTiming.encodedBodySize"],"description":"The decodedSize, encodedSize, and transferSize properties of the PerformanceResourceTiming API reports the size of resources loaded.","description_html":"The <code>decodedSize</code>, <code>encodedSize</code>, and <code>transferSize</code> properties of the <code>PerformanceResourceTiming</code> API reports the size of resources loaded.","name":"Resource size","spec":["https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-decodedbodysize","https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-encodedbodysize","https://w3c.github.io/resource-timing/#dom-performanceresourcetiming-transfersize"],"status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"54","chrome_android":"54","edge":"17","firefox":"45","firefox_android":"45","safari":"16.4","safari_ios":"16.4"}}},"resource-timing":{"caniuse":"resource-timing","compat_features":["api.PerformanceResourceTiming","api.PerformanceResourceTiming.connectEnd","api.PerformanceResourceTiming.connectStart","api.PerformanceResourceTiming.domainLookupEnd","api.PerformanceResourceTiming.domainLookupStart","api.PerformanceResourceTiming.fetchStart","api.PerformanceResourceTiming.initiatorType","api.PerformanceResourceTiming.redirectEnd","api.PerformanceResourceTiming.redirectStart","api.PerformanceResourceTiming.requestStart","api.PerformanceResourceTiming.responseEnd","api.PerformanceResourceTiming.responseStart"],"description":"PerformanceResourceTiming entries report when network events happen while loading a resource, such as when connections start and end. You can use this information to measure loading times.","description_html":"<code>PerformanceResourceTiming</code> entries report when network events happen while loading a resource, such as when connections start and end. You can use this information to measure loading times.","name":"Resource timing (initial support)","spec":"https://w3c.github.io/resource-timing/","status":{"baseline":"high","baseline_high_date":"2020-03-19","baseline_low_date":"2017-09-19","support":{"chrome":"43","chrome_android":"43","edge":"12","firefox":"31","firefox_android":"31","safari":"11","safari_ios":"11"}}},"round-mod-rem":{"compat_features":["css.types.mod","css.types.rem","css.types.round"],"description":"The round(), mod(), and rem() CSS functions compute rounded values and the remainder after division.","description_html":"The <code>round()</code>, <code>mod()</code>, and <code>rem()</code> CSS functions compute rounded values and the remainder after division.","name":"round(), mod(), and rem()","spec":"https://drafts.csswg.org/css-values-4/#round-func","status":{"baseline":false,"support":{"chrome":"125","chrome_android":"125","firefox":"118","firefox_android":"118","safari":"15.4","safari_ios":"15.4"}}},"scheduler":{"compat_features":["api.Scheduler","api.Scheduler.postTask","api.TaskController","api.TaskController.TaskController","api.TaskController.setPriority","api.TaskPriorityChangeEvent","api.TaskPriorityChangeEvent.TaskPriorityChangeEvent","api.TaskPriorityChangeEvent.previousPriority","api.TaskSignal","api.TaskSignal.priority","api.scheduler"],"description":"The scheduler API provides a way to prioritize all tasks belonging to an application.","description_html":"The <code>scheduler</code> API provides a way to prioritize all tasks belonging to an application.","name":"Scheduler API","spec":"https://wicg.github.io/scheduling-apis/","status":{"baseline":false,"support":{"chrome":"94","chrome_android":"94","edge":"94"}}},"scope":{"compat_features":["api.CSSScopeRule","api.CSSScopeRule.end","api.CSSScopeRule.start","css.at-rules.scope"],"description":"The @scope CSS at-rule sets the scope for a group of rules.","description_html":"The <code>@scope</code> CSS at-rule sets the scope for a group of rules.","name":"@scope","spec":"https://drafts.csswg.org/css-cascade-6/#scope-atrule","status":{"baseline":false,"support":{"chrome":"118","chrome_android":"118","edge":"118","safari":"17.4","safari_ios":"17.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4212"},"screen-orientation":{"caniuse":"screen-orientation","compat_features":["api.Screen.orientation","api.ScreenOrientation","api.ScreenOrientation.angle","api.ScreenOrientation.change_event","api.ScreenOrientation.type"],"description":"The screen.orientation API gets information about the orientation of the viewport, such as landscape or portrait. With this API, you can adapt an application's layout or behavior in response to changes in orientation.","description_html":"The <code>screen.orientation</code> API gets information about the orientation of the viewport, such as landscape or portrait. With this API, you can adapt an application's layout or behavior in response to changes in orientation.","name":"Screen orientation","spec":"https://w3c.github.io/screen-orientation/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"38","chrome_android":"39","edge":"79","firefox":"43","firefox_android":"43","safari":"16.4","safari_ios":"16.4"}}},"screen-orientation-lock":{"compat_features":["api.ScreenOrientation.lock","api.ScreenOrientation.unlock"],"description":"The screen.orientation.lock() method prevents changes to the screen orientation, typically in fullscreen applications such as games. For example, while locked, rotating a phone to the side won't change the screen orientation from landscape to portrait.","description_html":"The <code>screen.orientation.lock()</code> method prevents changes to the screen orientation, typically in fullscreen applications such as games. For example, while locked, rotating a phone to the side won't change the screen orientation from landscape to portrait.","name":"Screen orientation lock","spec":"https://w3c.github.io/screen-orientation/#lock-method","status":{"baseline":false,"support":{"chrome_android":"38"}}},"scroll-driven-animations":{"compat_features":["api.ScrollTimeline","api.ScrollTimeline.axis","api.ScrollTimeline.ScrollTimeline","api.ScrollTimeline.source","api.ViewTimeline","api.ViewTimeline.endOffset","api.ViewTimeline.startOffset","api.ViewTimeline.subject","api.ViewTimeline.ViewTimeline","css.properties.animation-range","css.properties.animation-range-end","css.properties.animation-range-start","css.properties.animation-timeline","css.properties.animation-timeline.scroll","css.properties.animation-timeline.view","css.properties.scroll-timeline","css.properties.scroll-timeline-axis","css.properties.scroll-timeline-name","css.properties.view-timeline","css.properties.view-timeline-axis","css.properties.view-timeline-inset","css.properties.view-timeline-name"],"description":"CSS scroll-driven animations are a type of CSS animations that don't run over time, but are instead driven by the user's scroll position.","description_html":"CSS scroll-driven animations are a type of CSS animations that don't run over time, but are instead driven by the user's scroll position.","name":"Scroll-driven animations","spec":"https://drafts.csswg.org/scroll-animations-1/","status":{"baseline":false,"support":{"chrome":"115","chrome_android":"115","edge":"115"}}},"scroll-into-view":{"alias":"scrollintoview","caniuse":"scrollintoview","compat_features":["api.Element.scrollIntoView","api.Element.scrollIntoView.options_parameter"],"description":"The scrollIntoView() method scrolls an element's ancestor containers such that the element is visible to the user.","description_html":"The <code>scrollIntoView()</code> method scrolls an element's ancestor containers such that the element is visible to the user.","name":"scrollIntoView()","spec":"https://drafts.csswg.org/cssom-view-1/#dom-element-scrollintoview","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"61","chrome_android":"61","edge":"79","firefox":"36","firefox_android":"36","safari":"14","safari_ios":"14"}}},"scroll-snap":{"caniuse":"css-snappoints","compat_features":["css.properties.scroll-margin","css.properties.scroll-margin-block","css.properties.scroll-margin-block-end","css.properties.scroll-margin-block-start","css.properties.scroll-margin-bottom","css.properties.scroll-margin-inline","css.properties.scroll-margin-inline-end","css.properties.scroll-margin-inline-start","css.properties.scroll-margin-left","css.properties.scroll-margin-right","css.properties.scroll-margin-top","css.properties.scroll-padding","css.properties.scroll-padding-block","css.properties.scroll-padding-block-end","css.properties.scroll-padding-block-start","css.properties.scroll-padding-bottom","css.properties.scroll-padding-inline","css.properties.scroll-padding-inline-end","css.properties.scroll-padding-inline-start","css.properties.scroll-padding-left","css.properties.scroll-padding-right","css.properties.scroll-padding-top","css.properties.scroll-snap-align","css.properties.scroll-snap-stop","css.properties.scroll-snap-type"],"description":"CSS scroll snap controls the panning and scrolling behavior within a scroll container.","description_html":"CSS scroll snap controls the panning and scrolling behavior within a scroll container.","name":"Scroll snap","spec":"https://drafts.csswg.org/css-scroll-snap-1/","status":{"baseline":"high","baseline_high_date":"2022-01-09","baseline_low_date":"2019-07-09","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"68","firefox_android":"68","safari":"11","safari_ios":"11"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/499"},"scroll-to-text-fragment":{"caniuse":"url-scroll-to-text-fragment","description":"Text fragments are URL fragments on the form #:~:text=snippet and link to a snippet of text within a page. The browser may scroll, highlight, or otherwise bring that text to the reader's attention.","description_html":"Text fragments are URL fragments on the form <code>#:~:text=snippet</code> and link to a snippet of text within a page. The browser may scroll, highlight, or otherwise bring that text to the reader's attention.","name":"Scroll to text fragment","spec":"https://wicg.github.io/scroll-to-text-fragment/","status":{"baseline":false,"support":{"chrome":"81","chrome_android":"81","edge":"83","safari":"16.1","safari_ios":"16.1"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2901"},"scrollbar-color":{"compat_features":["css.properties.scrollbar-color"],"description":"The scrollbar-color CSS property sets the color of the scrollbar track and thumb.","description_html":"The <code>scrollbar-color</code> CSS property sets the color of the scrollbar track and thumb.","name":"scrollbar-color","spec":"https://drafts.csswg.org/css-scrollbars-1/#scrollbar-color","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"64","firefox_android":"64"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/763"},"scrollbar-gutter":{"compat_features":["css.properties.scrollbar-gutter"],"description":"The scrollbar-gutter CSS property reserves space for the scrollbar, preventing unwanted layout changes as the scrollbar appears and disappears.","description_html":"The <code>scrollbar-gutter</code> CSS property reserves space for the scrollbar, preventing unwanted layout changes as the scrollbar appears and disappears.","name":"scrollbar-gutter","spec":"https://drafts.csswg.org/css-overflow-3/#scrollbar-gutter-property","status":{"baseline":false,"support":{"chrome":"94","chrome_android":"94","edge":"94","firefox":"97","firefox_android":"97"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/671"},"scrollbar-width":{"compat_features":["css.properties.scrollbar-width"],"description":"The scrollbar-width CSS property sets the width of the scrollbar.","description_html":"The <code>scrollbar-width</code> CSS property sets the width of the scrollbar.","name":"scrollbar-width","spec":"https://drafts.csswg.org/css-scrollbars-1/#scrollbar-width","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"64","firefox_android":"64"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/680"},"scrollend":{"compat_features":["api.Document.scrollend_event","api.Element.scrollend_event"],"description":"The scrollend event fires when an element or document has finished scrolling.","description_html":"The <code>scrollend</code> event fires when an element or document has finished scrolling.","name":"scrollend","spec":"https://drafts.csswg.org/cssom-view-1/#eventdef-document-scrollend","status":{"baseline":false,"support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"109","firefox_android":"109"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4419"},"search":{"compat_features":["html.elements.search"],"description":"The <search> HTML element is a container that represents the parts of the web page with search functionality.","description_html":"The <code>&#x3C;search></code> HTML element is a container that represents the parts of the web page with search functionality.","name":"<search>","spec":"https://html.spec.whatwg.org/multipage/grouping-content.html#the-search-element","status":{"baseline":"low","baseline_low_date":"2023-10-13","support":{"chrome":"118","chrome_android":"118","edge":"118","firefox":"118","firefox_android":"118","safari":"17","safari_ios":"17"}}},"search-input-type":{"caniuse":"input-search","compat_features":["html.elements.input.type_search"],"description":"The <input> HTML element with the type=\"search\" attribute represents a text field for search queries, which might be styled differently by the browser.","description_html":"The <code>&#x3C;input></code> HTML element with the <code>type=\"search\"</code> attribute represents a text field for search queries, which might be styled differently by the browser.","name":"<input type=\"search\">","spec":"https://html.spec.whatwg.org/multipage/input.html#text-(type=text)-state-and-search-state-(type=search)","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"5","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5","safari_ios":"4.2"}}},"server-timing":{"caniuse":"server-timing","compat_features":["api.PerformanceResourceTiming.serverTiming","api.PerformanceServerTiming","api.PerformanceServerTiming.description","api.PerformanceServerTiming.duration","api.PerformanceServerTiming.name","api.PerformanceServerTiming.toJSON","http.headers.Server-Timing"],"description":"The serverTiming property of the PerformanceResourceTiming API contains server timing information about network requests.","description_html":"The <code>serverTiming</code> property of the <code>PerformanceResourceTiming</code> API contains server timing information about network requests.","name":"Server timing","spec":"https://w3c.github.io/server-timing/","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"65","chrome_android":"65","edge":"79","firefox":"61","firefox_android":"61","safari":"16.4","safari_ios":"16.4"}}},"set":{"compat_features":["javascript.builtins.Set","javascript.builtins.Set.Set","javascript.builtins.Set.Set.iterable_allowed","javascript.builtins.Set.Set.null_allowed","javascript.builtins.Set.add","javascript.builtins.Set.clear","javascript.builtins.Set.delete","javascript.builtins.Set.entries","javascript.builtins.Set.forEach","javascript.builtins.Set.has","javascript.builtins.Set.key_equality_for_zeros","javascript.builtins.Set.keys","javascript.builtins.Set.size","javascript.builtins.Set.values","javascript.builtins.Set.@@iterator","javascript.builtins.Set.@@species"],"description":"Set objects store unique values of any type.","description_html":"Set objects store unique values of any type.","name":"Set (initial support)","spec":"https://tc39.es/ecma262/multipage/keyed-collections.html#sec-set-objects","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"13","firefox_android":"13","safari":"8","safari_ios":"8"}}},"set-methods":{"compat_features":["javascript.builtins.Set.difference","javascript.builtins.Set.intersection","javascript.builtins.Set.isDisjointFrom","javascript.builtins.Set.isSubsetOf","javascript.builtins.Set.isSupersetOf","javascript.builtins.Set.symmetricDifference","javascript.builtins.Set.union"],"description":"The difference(), intersection(), isDisjointFrom(), isSubsetOf(), isSupersetOf(), symmetricDifference(), and union() methods of the JavaScript Set object performs operations between two sets.","description_html":"The <code>difference()</code>, <code>intersection()</code>, <code>isDisjointFrom()</code>, <code>isSubsetOf()</code>, <code>isSupersetOf()</code>, <code>symmetricDifference()</code>, and <code>union()</code> methods of the JavaScript <code>Set</code> object performs operations between two sets.","name":"Set methods","spec":"https://tc39.es/proposal-set-methods/","status":{"baseline":false,"support":{"chrome":"122","chrome_android":"122","edge":"122","safari":"17","safari_ios":"17"}}},"shadow-dom":{"caniuse":"shadowdomv1","compat_features":["api.Element.attachShadow","api.Element.shadowRoot","api.Event.composed","api.Event.composedPath","api.Node.getRootNode","api.Node.isConnected","api.ShadowRoot","api.ShadowRoot.host","api.ShadowRoot.mode"],"description":"Shadow DOM allows you to attach encapsulated \"shadow\" DOM trees to elements. A shadow DOM tree is a separate component, isolated from the scripts and styles in other parts of the document. This is a part of Web Components.","description_html":"Shadow DOM allows you to attach encapsulated \"shadow\" DOM trees to elements. A shadow DOM tree is a separate component, isolated from the scripts and styles in other parts of the document. This is a part of Web Components.","name":"Shadow DOM","spec":"https://dom.spec.whatwg.org/#shadow-trees","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"54","chrome_android":"54","edge":"79","firefox":"63","firefox_android":"63","safari":"10.1","safari_ios":"10.3"}}},"show-picker-input":{"compat_features":["api.HTMLInputElement.showPicker","api.HTMLInputElement.showPicker.color_input","api.HTMLInputElement.showPicker.file_input","api.HTMLInputElement.showPicker.date_input","api.HTMLInputElement.showPicker.datetime_local_input"],"description":"The showPicker() method for <input> elements shows the user interface for picking a value. For example, for <input type=\"date\"> it shows the interface for picking a date.","description_html":"The <code>showPicker()</code> method for <code>&#x3C;input></code> elements shows the user interface for picking a value. For example, for <code>&#x3C;input type=\"date\"></code> it shows the interface for picking a date.","name":"showPicker() for <input>","spec":"https://html.spec.whatwg.org/multipage/input.html#dom-input-showpicker","status":{"baseline":false,"support":{"chrome":"99","chrome_android":"99","edge":"99","firefox":"101","firefox_android":"101","safari":"17.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4097"},"show-picker-select":{"compat_features":["api.HTMLSelectElement.showPicker"],"description":"The showPicker() method for <select> elements shows the dropdown menu or other user interface for picking one of the options.","description_html":"The <code>showPicker()</code> method for <code>&#x3C;select></code> elements shows the dropdown menu or other user interface for picking one of the options.","name":"showPicker() for <select>","spec":"https://html.spec.whatwg.org/multipage/input.html#dom-select-showpicker","status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","firefox":"122","firefox_android":"122"}}},"slot":{"compat_features":["api.Element.assignedSlot","api.Element.slot","api.HTMLSlotElement","api.HTMLSlotElement.assignedNodes","api.HTMLSlotElement.name","api.Text.assignedSlot","css.selectors.slotted","html.elements.slot","html.elements.slot.name","html.global_attributes.slot"],"description":"The <slot> HTML element is a placeholder inside a web component where consumers of the component can insert their own markup.","description_html":"The <code>&#x3C;slot></code> HTML element is a placeholder inside a web component where consumers of the component can insert their own markup.","name":"<slot>","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-slot-element","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"53","chrome_android":"53","edge":"79","firefox":"63","firefox_android":"63","safari":"10","safari_ios":"10"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1898"},"slot-assign":{"compat_features":["api.HTMLSlotElement.assign","api.ShadowRoot.slotAssignment"],"description":"The assign() method for <slot> elements assigns nodes to the slot, as an alternative to using the slot and name HTML attributes. The nodes must be children of a shadow host and the shadow root must be created with the slotAssignment set to \"manual\". Also known as manual slot assignment.","description_html":"The <code>assign()</code> method for <code>&#x3C;slot></code> elements assigns nodes to the slot, as an alternative to using the <code>slot</code> and <code>name</code> HTML attributes. The nodes must be children of a shadow host and the shadow root must be created with the <code>slotAssignment</code> set to \"manual\". Also known as manual slot assignment.","name":"Imperative slot assignment","spec":"https://html.spec.whatwg.org/multipage/scripting.html#dom-slot-assign","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"86","chrome_android":"86","edge":"86","firefox":"92","firefox_android":"92","safari":"16.4","safari_ios":"16.4"}}},"speech-synthesis":{"caniuse":"speech-synthesis","compat_features":["api.SpeechSynthesis","api.SpeechSynthesis.cancel","api.SpeechSynthesis.getVoices","api.SpeechSynthesis.pause","api.SpeechSynthesis.paused","api.SpeechSynthesis.pending","api.SpeechSynthesis.resume","api.SpeechSynthesis.speak","api.SpeechSynthesis.speaking","api.SpeechSynthesisEvent","api.SpeechSynthesisEvent.charIndex","api.SpeechSynthesisEvent.elapsedTime","api.SpeechSynthesisEvent.name","api.SpeechSynthesisEvent.utterance","api.SpeechSynthesisUtterance","api.SpeechSynthesisUtterance.SpeechSynthesisUtterance","api.SpeechSynthesisUtterance.end_event","api.SpeechSynthesisUtterance.error_event","api.SpeechSynthesisUtterance.lang","api.SpeechSynthesisUtterance.mark_event","api.SpeechSynthesisUtterance.pause_event","api.SpeechSynthesisUtterance.pitch","api.SpeechSynthesisUtterance.rate","api.SpeechSynthesisUtterance.resume_event","api.SpeechSynthesisUtterance.start_event","api.SpeechSynthesisUtterance.text","api.SpeechSynthesisUtterance.voice","api.SpeechSynthesisUtterance.volume","api.SpeechSynthesisVoice","api.SpeechSynthesisVoice.default","api.SpeechSynthesisVoice.lang","api.SpeechSynthesisVoice.localService","api.SpeechSynthesisVoice.name","api.SpeechSynthesisVoice.voiceURI","api.Window.speechSynthesis"],"description":"The SpeechSynthesis API converts text into audio using a synthetic voice.","description_html":"The <code>SpeechSynthesis</code> API converts text into audio using a synthetic voice.","name":"Speech synthesis","spec":"https://wicg.github.io/speech-api/#tts-section","status":{"baseline":"high","baseline_high_date":"2021-03-05","baseline_low_date":"2018-09-05","support":{"chrome":"33","chrome_android":"33","edge":"14","firefox":"49","firefox_android":"62","safari":"7","safari_ios":"7"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2483"},"spelling-grammar-error":{"compat_features":["css.selectors.grammar-error","css.selectors.spelling-error"],"description":"The ::spelling-error and ::grammar-error CSS pseudo-elements match text that is highlighted as misspelled and grammatically incorrect, respectively.","description_html":"The <code>::spelling-error</code> and <code>::grammar-error</code> CSS pseudo-elements match text that is highlighted as misspelled and grammatically incorrect, respectively.","name":"::spelling-error and ::grammar-error","spec":["https://drafts.csswg.org/css-pseudo-4/#selectordef-spelling-error","https://drafts.csswg.org/css-pseudo-4/#selectordef-grammar-error"],"status":{"baseline":false,"support":{"chrome":"121","chrome_android":"121","edge":"121","safari":"17.4","safari_ios":"17.4"}}},"stable-array-sort":{"compat_features":["javascript.builtins.Array.sort.stable_sorting"],"description":"Stable array sort() function","description_html":"Stable array sort() function","name":"Stable array sort","spec":"https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.sort","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"70","chrome_android":"70","edge":"79","firefox":"3","firefox_android":"4","safari":"10.1","safari_ios":"10.3"}}},"starting-style":{"compat_features":["api.CSSStartingStyleRule","css.at-rules.starting-style"],"description":"The @starting-style CSS at-rule defines the starting values for properties that are transitioning when the target element's style is first updated.","description_html":"The <code>@starting-style</code> CSS at-rule defines the starting values for properties that are transitioning when the target element's style is first updated.","name":"@starting-style","spec":"https://drafts.csswg.org/css-transitions-2/#defining-before-change-style","status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117","safari":"17.5","safari_ios":"17.5"}}},"sticky-positioning":{"caniuse":"css-sticky","compat_features":["css.properties.position.position_sticky_table_elements","css.properties.position.sticky"],"description":"The position: sticky CSS declaration positions an element in the normal flow until it crosses a specified threshold, at which points it becomes fixed (stuck) at that position.","description_html":"The <code>position: sticky</code> CSS declaration positions an element in the normal flow until it crosses a specified threshold, at which points it becomes fixed (stuck) at that position.","name":"Sticky positioning","spec":"https://drafts.csswg.org/css-position-3/#stickypos-insets","status":{"baseline":"high","baseline_high_date":"2022-03-19","baseline_low_date":"2019-09-19","support":{"chrome":"56","chrome_android":"56","edge":"16","firefox":"59","firefox_android":"59","safari":"13","safari_ios":"13"}}},"storage-access":{"compat_features":["api.Document.hasStorageAccess","api.Document.requestStorageAccess"],"description":"The document.requestStorageAccess() method allows content in iframes to request storing and reading cookies and other site data, while the document.hasStorageAccess() method checks if such access is granted.","description_html":"The <code>document.requestStorageAccess()</code> method allows content in iframes to request storing and reading cookies and other site data, while the <code>document.hasStorageAccess()</code> method checks if such access is granted.","name":"Storage access","spec":"https://privacycg.github.io/storage-access/","status":{"baseline":"low","baseline_low_date":"2023-12-05","support":{"chrome":"119","chrome_android":"120","edge":"85","firefox":"65","firefox_android":"65","safari":"11.1","safari_ios":"11.3"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/3310","https://chromestatus.com/metrics/feature/timeline/popularity/3311"]},"storage-buckets":{"compat_features":["api.Navigator.storageBuckets","api.StorageBucket","api.StorageBucket.caches","api.StorageBucket.estimate","api.StorageBucket.expires","api.StorageBucket.getDirectory","api.StorageBucket.indexedDB","api.StorageBucket.name","api.StorageBucket.persist","api.StorageBucket.persisted","api.StorageBucket.setExpires","api.StorageBucketManager","api.StorageBucketManager.delete","api.StorageBucketManager.keys","api.StorageBucketManager.open","api.WorkerNavigator.storageBuckets"],"description":"The navigator.storageBuckets API allows you to organize locally stored data into groups called storage buckets. Each bucket can have different settings, allowing the browser to manage and delete buckets independently rather than applying the same treatment to all.","description_html":"The <code>navigator.storageBuckets</code> API allows you to organize locally stored data into groups called storage buckets. Each bucket can have different settings, allowing the browser to manage and delete buckets independently rather than applying the same treatment to all.","name":"Storage buckets","spec":"https://wicg.github.io/storage-buckets/","status":{"baseline":false,"support":{"chrome":"122","chrome_android":"122","edge":"122"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4378"},"streams":{"caniuse":"streams","compat_features":["api.ByteLengthQueuingStrategy","api.ByteLengthQueuingStrategy.ByteLengthQueuingStrategy","api.ByteLengthQueuingStrategy.highWaterMark","api.ByteLengthQueuingStrategy.size","api.CountQueuingStrategy","api.CountQueuingStrategy.CountQueuingStrategy","api.CountQueuingStrategy.highWaterMark","api.CountQueuingStrategy.size","api.ReadableStream","api.ReadableStream.ReadableStream","api.ReadableStream.cancel","api.ReadableStream.getReader","api.ReadableStream.locked","api.ReadableStream.pipeThrough","api.ReadableStream.pipeTo","api.ReadableStream.tee","api.WritableStream","api.WritableStream.WritableStream","api.WritableStream.abort","api.WritableStream.getWriter","api.WritableStream.locked","api.WritableStreamDefaultController","api.WritableStreamDefaultController.error","api.WritableStreamDefaultWriter","api.WritableStreamDefaultWriter.abort","api.WritableStreamDefaultWriter.close","api.WritableStreamDefaultWriter.closed","api.WritableStreamDefaultWriter.desiredSize","api.WritableStreamDefaultWriter.ready","api.WritableStreamDefaultWriter.releaseLock","api.WritableStreamDefaultWriter.write"],"description":"The streams API creates, composes, and consumes continuously generated data.","description_html":"The streams API creates, composes, and consumes continuously generated data.","name":"Streams","spec":"https://streams.spec.whatwg.org/","status":{"baseline":"low","baseline_low_date":"2022-06-28","support":{"chrome":"59","chrome_android":"59","edge":"79","firefox":"102","firefox_android":"102","safari":"14.1","safari_ios":"14.5"}}},"structured-clone":{"compat_features":["api.structuredClone"],"description":"The structuredClone() global method creates a deep copy of an object. Values that cannot be cloned can instead be transferred, making the original value no longer usable.","description_html":"The <code>structuredClone()</code> global method creates a deep copy of an object. Values that cannot be cloned can instead be transferred, making the original value no longer usable.","name":"structuredClone()","spec":"https://html.spec.whatwg.org/multipage/structured-data.html#structured-cloning","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"98","chrome_android":"98","edge":"98","firefox":"94","firefox_android":"94","safari":"15.4","safari_ios":"15.4"}}},"subgrid":{"caniuse":"css-subgrid","compat_features":["css.properties.grid-template-columns.subgrid","css.properties.grid-template-rows.subgrid"],"description":"The subgrid value for the grid-template-columns and grid-template-rows properties allows a grid item to inherit the grid definition of its parent grid container.","description_html":"The <code>subgrid</code> value for the <code>grid-template-columns</code> and <code>grid-template-rows</code> properties allows a grid item to inherit the grid definition of its parent grid container.","name":"Subgrid","spec":"https://drafts.csswg.org/css-grid-2/#subgrids","status":{"baseline":"low","baseline_low_date":"2023-09-15","support":{"chrome":"117","chrome_android":"117","edge":"117","firefox":"71","firefox_android":"79","safari":"16","safari_ios":"16"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4680"},"tabindex":{"caniuse":"tabindex-attr","compat_features":["api.HTMLElement.tabIndex","html.global_attributes.tabindex"],"description":"The tabindex HTML attribute make an element focusable, and defines the element's relative ordering for sequential focus navigation.","description_html":"The <code>tabindex</code> HTML attribute make an element focusable, and defines the element's relative ordering for sequential focus navigation.","name":"tabindex","spec":"https://html.spec.whatwg.org/multipage/interaction.html#attr-tabindex","status":{"baseline":"high","baseline_high_date":"2021-04-02","baseline_low_date":"2018-10-02","support":{"chrome":"1","chrome_android":"18","edge":"18","firefox":"1.5","firefox_android":"4","safari":"4","safari_ios":"3.2"}}},"target-text":{"compat_features":["css.selectors.target-text"],"description":"The ::target-text pseudo-element allows you to style text highlighted by a URL text fragment such as #:~:text=snippet.","description_html":"The <code>::target-text</code> pseudo-element allows you to style text highlighted by a URL text fragment such as <code>#:~:text=snippet</code>.","name":"::target-text","spec":"https://drafts.csswg.org/css-pseudo-4/#selectordef-target-text","status":{"baseline":false,"support":{"chrome":"89","chrome_android":"89","edge":"89"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3780"},"template":{"compat_features":["api.HTMLTemplateElement","api.HTMLTemplateElement.content","html.elements.template"],"description":"The <template> HTML element holds HTML fragments which you can clone and insert into the document using JavaScript.","description_html":"The <code>&#x3C;template></code> HTML element holds HTML fragments which you can clone and insert into the document using JavaScript.","name":"<template>","spec":"https://html.spec.whatwg.org/multipage/scripting.html#the-template-element","status":{"baseline":"high","baseline_high_date":"2018-05-12","baseline_low_date":"2015-11-12","support":{"chrome":"26","chrome_android":"26","edge":"13","firefox":"22","firefox_android":"22","safari":"8","safari_ios":"8"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2769"},"temporal":{"caniuse":"temporal","compat_features":["javascript.builtins.Temporal","javascript.builtins.Temporal.Calendar","javascript.builtins.Temporal.Calendar.Calendar","javascript.builtins.Temporal.Calendar.dateAdd","javascript.builtins.Temporal.Calendar.dateFromFields","javascript.builtins.Temporal.Calendar.dateUntil","javascript.builtins.Temporal.Calendar.day","javascript.builtins.Temporal.Calendar.dayOfWeek","javascript.builtins.Temporal.Calendar.dayOfYear","javascript.builtins.Temporal.Calendar.daysInMonth","javascript.builtins.Temporal.Calendar.daysInWeek","javascript.builtins.Temporal.Calendar.daysInYear","javascript.builtins.Temporal.Calendar.era","javascript.builtins.Temporal.Calendar.eraYear","javascript.builtins.Temporal.Calendar.fields","javascript.builtins.Temporal.Calendar.from","javascript.builtins.Temporal.Calendar.id","javascript.builtins.Temporal.Calendar.inLeapYear","javascript.builtins.Temporal.Calendar.mergeFields","javascript.builtins.Temporal.Calendar.month","javascript.builtins.Temporal.Calendar.monthCode","javascript.builtins.Temporal.Calendar.monthDayFromFields","javascript.builtins.Temporal.Calendar.monthsInYear","javascript.builtins.Temporal.Calendar.toJSON","javascript.builtins.Temporal.Calendar.toString","javascript.builtins.Temporal.Calendar.weekOfYear","javascript.builtins.Temporal.Calendar.year","javascript.builtins.Temporal.Calendar.yearMonthFromFields","javascript.builtins.Temporal.Duration","javascript.builtins.Temporal.Duration.Duration","javascript.builtins.Temporal.Duration.abs","javascript.builtins.Temporal.Duration.add","javascript.builtins.Temporal.Duration.blank","javascript.builtins.Temporal.Duration.compare","javascript.builtins.Temporal.Duration.days","javascript.builtins.Temporal.Duration.from","javascript.builtins.Temporal.Duration.hours","javascript.builtins.Temporal.Duration.microseconds","javascript.builtins.Temporal.Duration.milliseconds","javascript.builtins.Temporal.Duration.minutes","javascript.builtins.Temporal.Duration.months","javascript.builtins.Temporal.Duration.nanoseconds","javascript.builtins.Temporal.Duration.negated","javascript.builtins.Temporal.Duration.round","javascript.builtins.Temporal.Duration.seconds","javascript.builtins.Temporal.Duration.sign","javascript.builtins.Temporal.Duration.subtract","javascript.builtins.Temporal.Duration.toJSON","javascript.builtins.Temporal.Duration.toLocaleString","javascript.builtins.Temporal.Duration.toString","javascript.builtins.Temporal.Duration.total","javascript.builtins.Temporal.Duration.valueOf","javascript.builtins.Temporal.Duration.weeks","javascript.builtins.Temporal.Duration.with","javascript.builtins.Temporal.Duration.years","javascript.builtins.Temporal.Instant","javascript.builtins.Temporal.Instant.Instant","javascript.builtins.Temporal.Instant.add","javascript.builtins.Temporal.Instant.compare","javascript.builtins.Temporal.Instant.epochMicroseconds","javascript.builtins.Temporal.Instant.epochMilliseconds","javascript.builtins.Temporal.Instant.epochNanoseconds","javascript.builtins.Temporal.Instant.epochSeconds","javascript.builtins.Temporal.Instant.equals","javascript.builtins.Temporal.Instant.from","javascript.builtins.Temporal.Instant.fromEpochMicroseconds","javascript.builtins.Temporal.Instant.fromEpochMilliseconds","javascript.builtins.Temporal.Instant.fromEpochNanoseconds","javascript.builtins.Temporal.Instant.fromEpochSeconds","javascript.builtins.Temporal.Instant.round","javascript.builtins.Temporal.Instant.since","javascript.builtins.Temporal.Instant.subtract","javascript.builtins.Temporal.Instant.toJSON","javascript.builtins.Temporal.Instant.toLocaleString","javascript.builtins.Temporal.Instant.toString","javascript.builtins.Temporal.Instant.toZonedDateTime","javascript.builtins.Temporal.Instant.toZonedDateTimeISO","javascript.builtins.Temporal.Instant.until","javascript.builtins.Temporal.Instant.valueOf","javascript.builtins.Temporal.Now","javascript.builtins.Temporal.Now.instant","javascript.builtins.Temporal.Now.plainDate","javascript.builtins.Temporal.Now.plainDateISO","javascript.builtins.Temporal.Now.plainDateTime","javascript.builtins.Temporal.Now.plainDateTimeISO","javascript.builtins.Temporal.Now.timeZone","javascript.builtins.Temporal.Now.zonedDateTime","javascript.builtins.Temporal.Now.zonedDateTimeISO","javascript.builtins.Temporal.PlainDate","javascript.builtins.Temporal.PlainDate.PlainDate","javascript.builtins.Temporal.PlainDate.add","javascript.builtins.Temporal.PlainDate.calendar","javascript.builtins.Temporal.PlainDate.compare","javascript.builtins.Temporal.PlainDate.day","javascript.builtins.Temporal.PlainDate.dayOfWeek","javascript.builtins.Temporal.PlainDate.dayOfYear","javascript.builtins.Temporal.PlainDate.daysInMonth","javascript.builtins.Temporal.PlainDate.daysInWeek","javascript.builtins.Temporal.PlainDate.daysInYear","javascript.builtins.Temporal.PlainDate.equals","javascript.builtins.Temporal.PlainDate.era","javascript.builtins.Temporal.PlainDate.eraYear","javascript.builtins.Temporal.PlainDate.from","javascript.builtins.Temporal.PlainDate.getISOFields","javascript.builtins.Temporal.PlainDate.inLeapYear","javascript.builtins.Temporal.PlainDate.month","javascript.builtins.Temporal.PlainDate.monthCode","javascript.builtins.Temporal.PlainDate.monthsInYear","javascript.builtins.Temporal.PlainDate.since","javascript.builtins.Temporal.PlainDate.subtract","javascript.builtins.Temporal.PlainDate.toJSON","javascript.builtins.Temporal.PlainDate.toLocaleString","javascript.builtins.Temporal.PlainDate.toPlainDateTime","javascript.builtins.Temporal.PlainDate.toPlainMonthDay","javascript.builtins.Temporal.PlainDate.toPlainYearMonth","javascript.builtins.Temporal.PlainDate.toString","javascript.builtins.Temporal.PlainDate.toZonedDateTime","javascript.builtins.Temporal.PlainDate.until","javascript.builtins.Temporal.PlainDate.valueOf","javascript.builtins.Temporal.PlainDate.weekOfYear","javascript.builtins.Temporal.PlainDate.with","javascript.builtins.Temporal.PlainDate.withCalendar","javascript.builtins.Temporal.PlainDate.year","javascript.builtins.Temporal.PlainDateTime","javascript.builtins.Temporal.PlainDateTime.PlainDateTime","javascript.builtins.Temporal.PlainDateTime.add","javascript.builtins.Temporal.PlainDateTime.calendar","javascript.builtins.Temporal.PlainDateTime.compare","javascript.builtins.Temporal.PlainDateTime.day","javascript.builtins.Temporal.PlainDateTime.dayOfWeek","javascript.builtins.Temporal.PlainDateTime.dayOfYear","javascript.builtins.Temporal.PlainDateTime.daysInMonth","javascript.builtins.Temporal.PlainDateTime.daysInWeek","javascript.builtins.Temporal.PlainDateTime.daysInYear","javascript.builtins.Temporal.PlainDateTime.equals","javascript.builtins.Temporal.PlainDateTime.era","javascript.builtins.Temporal.PlainDateTime.eraYear","javascript.builtins.Temporal.PlainDateTime.from","javascript.builtins.Temporal.PlainDateTime.getISOFields","javascript.builtins.Temporal.PlainDateTime.hour","javascript.builtins.Temporal.PlainDateTime.inLeapYear","javascript.builtins.Temporal.PlainDateTime.microsecond","javascript.builtins.Temporal.PlainDateTime.millisecond","javascript.builtins.Temporal.PlainDateTime.minute","javascript.builtins.Temporal.PlainDateTime.month","javascript.builtins.Temporal.PlainDateTime.monthCode","javascript.builtins.Temporal.PlainDateTime.monthsInYear","javascript.builtins.Temporal.PlainDateTime.nanosecond","javascript.builtins.Temporal.PlainDateTime.round","javascript.builtins.Temporal.PlainDateTime.second","javascript.builtins.Temporal.PlainDateTime.since","javascript.builtins.Temporal.PlainDateTime.subtract","javascript.builtins.Temporal.PlainDateTime.toJSON","javascript.builtins.Temporal.PlainDateTime.toLocaleString","javascript.builtins.Temporal.PlainDateTime.toPlainDate","javascript.builtins.Temporal.PlainDateTime.toPlainMonthDay","javascript.builtins.Temporal.PlainDateTime.toPlainTime","javascript.builtins.Temporal.PlainDateTime.toPlainYearMonth","javascript.builtins.Temporal.PlainDateTime.toString","javascript.builtins.Temporal.PlainDateTime.toZonedDateTime","javascript.builtins.Temporal.PlainDateTime.until","javascript.builtins.Temporal.PlainDateTime.valueOf","javascript.builtins.Temporal.PlainDateTime.weekOfYear","javascript.builtins.Temporal.PlainDateTime.with","javascript.builtins.Temporal.PlainDateTime.withCalendar","javascript.builtins.Temporal.PlainDateTime.withPlainDate","javascript.builtins.Temporal.PlainDateTime.withPlainTime","javascript.builtins.Temporal.PlainDateTime.year","javascript.builtins.Temporal.PlainMonthDay","javascript.builtins.Temporal.PlainMonthDay.PlainMonthDay","javascript.builtins.Temporal.PlainMonthDay.calendar","javascript.builtins.Temporal.PlainMonthDay.day","javascript.builtins.Temporal.PlainMonthDay.equals","javascript.builtins.Temporal.PlainMonthDay.from","javascript.builtins.Temporal.PlainMonthDay.getISOFields","javascript.builtins.Temporal.PlainMonthDay.monthCode","javascript.builtins.Temporal.PlainMonthDay.toJSON","javascript.builtins.Temporal.PlainMonthDay.toLocaleString","javascript.builtins.Temporal.PlainMonthDay.toPlainDate","javascript.builtins.Temporal.PlainMonthDay.toString","javascript.builtins.Temporal.PlainMonthDay.valueOf","javascript.builtins.Temporal.PlainMonthDay.with","javascript.builtins.Temporal.PlainTime","javascript.builtins.Temporal.PlainTime.PlainTime","javascript.builtins.Temporal.PlainTime.add","javascript.builtins.Temporal.PlainTime.calendar","javascript.builtins.Temporal.PlainTime.compare","javascript.builtins.Temporal.PlainTime.equals","javascript.builtins.Temporal.PlainTime.from","javascript.builtins.Temporal.PlainTime.getISOFields","javascript.builtins.Temporal.PlainTime.hour","javascript.builtins.Temporal.PlainTime.microsecond","javascript.builtins.Temporal.PlainTime.millisecond","javascript.builtins.Temporal.PlainTime.minute","javascript.builtins.Temporal.PlainTime.nanosecond","javascript.builtins.Temporal.PlainTime.round","javascript.builtins.Temporal.PlainTime.second","javascript.builtins.Temporal.PlainTime.since","javascript.builtins.Temporal.PlainTime.subtract","javascript.builtins.Temporal.PlainTime.toJSON","javascript.builtins.Temporal.PlainTime.toLocaleString","javascript.builtins.Temporal.PlainTime.toPlainDateTime","javascript.builtins.Temporal.PlainTime.toString","javascript.builtins.Temporal.PlainTime.toZonedDateTime","javascript.builtins.Temporal.PlainTime.until","javascript.builtins.Temporal.PlainTime.valueOf","javascript.builtins.Temporal.PlainTime.with","javascript.builtins.Temporal.PlainYearMonth","javascript.builtins.Temporal.PlainYearMonth.PlainYearMonth","javascript.builtins.Temporal.PlainYearMonth.add","javascript.builtins.Temporal.PlainYearMonth.calendar","javascript.builtins.Temporal.PlainYearMonth.compare","javascript.builtins.Temporal.PlainYearMonth.daysInMonth","javascript.builtins.Temporal.PlainYearMonth.daysInYear","javascript.builtins.Temporal.PlainYearMonth.equals","javascript.builtins.Temporal.PlainYearMonth.era","javascript.builtins.Temporal.PlainYearMonth.eraYear","javascript.builtins.Temporal.PlainYearMonth.from","javascript.builtins.Temporal.PlainYearMonth.getISOFields","javascript.builtins.Temporal.PlainYearMonth.inLeapYear","javascript.builtins.Temporal.PlainYearMonth.month","javascript.builtins.Temporal.PlainYearMonth.monthCode","javascript.builtins.Temporal.PlainYearMonth.monthsInYear","javascript.builtins.Temporal.PlainYearMonth.since","javascript.builtins.Temporal.PlainYearMonth.subtract","javascript.builtins.Temporal.PlainYearMonth.toJSON","javascript.builtins.Temporal.PlainYearMonth.toLocaleString","javascript.builtins.Temporal.PlainYearMonth.toPlainDate","javascript.builtins.Temporal.PlainYearMonth.toString","javascript.builtins.Temporal.PlainYearMonth.until","javascript.builtins.Temporal.PlainYearMonth.valueOf","javascript.builtins.Temporal.PlainYearMonth.with","javascript.builtins.Temporal.PlainYearMonth.year","javascript.builtins.Temporal.TimeZone","javascript.builtins.Temporal.TimeZone.TimeZone","javascript.builtins.Temporal.TimeZone.from","javascript.builtins.Temporal.TimeZone.getInstantFor","javascript.builtins.Temporal.TimeZone.getNextTransition","javascript.builtins.Temporal.TimeZone.getOffsetNanosecondsFor","javascript.builtins.Temporal.TimeZone.getOffsetStringFor","javascript.builtins.Temporal.TimeZone.getPlainDateTimeFor","javascript.builtins.Temporal.TimeZone.getPossibleInstantsFor","javascript.builtins.Temporal.TimeZone.getPreviousTransition","javascript.builtins.Temporal.TimeZone.id","javascript.builtins.Temporal.TimeZone.toJSON","javascript.builtins.Temporal.TimeZone.toString","javascript.builtins.Temporal.ZonedDateTime","javascript.builtins.Temporal.ZonedDateTime.ZonedDateTime","javascript.builtins.Temporal.ZonedDateTime.add","javascript.builtins.Temporal.ZonedDateTime.calendar","javascript.builtins.Temporal.ZonedDateTime.compare","javascript.builtins.Temporal.ZonedDateTime.day","javascript.builtins.Temporal.ZonedDateTime.dayOfWeek","javascript.builtins.Temporal.ZonedDateTime.dayOfYear","javascript.builtins.Temporal.ZonedDateTime.daysInMonth","javascript.builtins.Temporal.ZonedDateTime.daysInWeek","javascript.builtins.Temporal.ZonedDateTime.daysInYear","javascript.builtins.Temporal.ZonedDateTime.epochMicroseconds","javascript.builtins.Temporal.ZonedDateTime.epochMilliseconds","javascript.builtins.Temporal.ZonedDateTime.epochNanoseconds","javascript.builtins.Temporal.ZonedDateTime.epochSeconds","javascript.builtins.Temporal.ZonedDateTime.equals","javascript.builtins.Temporal.ZonedDateTime.era","javascript.builtins.Temporal.ZonedDateTime.eraYear","javascript.builtins.Temporal.ZonedDateTime.from","javascript.builtins.Temporal.ZonedDateTime.getISOFields","javascript.builtins.Temporal.ZonedDateTime.hour","javascript.builtins.Temporal.ZonedDateTime.hoursInDay","javascript.builtins.Temporal.ZonedDateTime.inLeapYear","javascript.builtins.Temporal.ZonedDateTime.microsecond","javascript.builtins.Temporal.ZonedDateTime.millisecond","javascript.builtins.Temporal.ZonedDateTime.minute","javascript.builtins.Temporal.ZonedDateTime.month","javascript.builtins.Temporal.ZonedDateTime.monthCode","javascript.builtins.Temporal.ZonedDateTime.monthsInYear","javascript.builtins.Temporal.ZonedDateTime.nanosecond","javascript.builtins.Temporal.ZonedDateTime.offset","javascript.builtins.Temporal.ZonedDateTime.offsetNanoseconds","javascript.builtins.Temporal.ZonedDateTime.round","javascript.builtins.Temporal.ZonedDateTime.second","javascript.builtins.Temporal.ZonedDateTime.since","javascript.builtins.Temporal.ZonedDateTime.startOfDay","javascript.builtins.Temporal.ZonedDateTime.subtract","javascript.builtins.Temporal.ZonedDateTime.timeZone","javascript.builtins.Temporal.ZonedDateTime.toInstant","javascript.builtins.Temporal.ZonedDateTime.toJSON","javascript.builtins.Temporal.ZonedDateTime.toLocaleString","javascript.builtins.Temporal.ZonedDateTime.toPlainDate","javascript.builtins.Temporal.ZonedDateTime.toPlainDateTime","javascript.builtins.Temporal.ZonedDateTime.toPlainMonthDay","javascript.builtins.Temporal.ZonedDateTime.toPlainTime","javascript.builtins.Temporal.ZonedDateTime.toPlainYearMonth","javascript.builtins.Temporal.ZonedDateTime.toString","javascript.builtins.Temporal.ZonedDateTime.until","javascript.builtins.Temporal.ZonedDateTime.valueOf","javascript.builtins.Temporal.ZonedDateTime.weekOfYear","javascript.builtins.Temporal.ZonedDateTime.with","javascript.builtins.Temporal.ZonedDateTime.withCalendar","javascript.builtins.Temporal.ZonedDateTime.withPlainDate","javascript.builtins.Temporal.ZonedDateTime.withPlainTime","javascript.builtins.Temporal.ZonedDateTime.withTimeZone","javascript.builtins.Temporal.ZonedDateTime.year"],"description":"The Temporal API allows you to work with dates, times, time zones, and durations. It is more powerful than the Date API.","description_html":"The <code>Temporal</code> API allows you to work with dates, times, time zones, and durations. It is more powerful than the <code>Date</code> API.","name":"Temporal","spec":"https://tc39.es/proposal-temporal/","status":{"baseline":false,"support":{}}},"text-indent":{"caniuse":"css-text-indent","compat_features":["css.properties.text-indent"],"description":"The text-indent CSS property sets the size of the empty space (indentation) at the beginning of lines in a text.","description_html":"The <code>text-indent</code> CSS property sets the size of the empty space (indentation) at the beginning of lines in a text.","name":"text-indent","spec":"https://drafts.csswg.org/css-text-3/#text-indent-property","status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"1","chrome_android":"18","edge":"12","firefox":"1","firefox_android":"4","safari":"1","safari_ios":"1"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/130"},"text-spacing-trim":{"compat_features":["css.properties.text-spacing-trim"],"description":"The text-spacing-trim CSS property controls spacing around CJK characters, avoiding excessive whitespace when using full-width punctuation characters.","description_html":"The <code>text-spacing-trim</code> CSS property controls spacing around CJK characters, avoiding excessive whitespace when using full-width punctuation characters.","name":"text-spacing-trim","spec":"https://drafts.csswg.org/css-text-4/#text-spacing-trim-property","status":{"baseline":false,"support":{"chrome":"123","chrome_android":"123","edge":"123"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/771"},"text-wrap-balance":{"compat_features":["css.properties.text-wrap.balance"],"description":"The text-wrap: balance CSS declaration balances the length of each line when text is broken into multiple lines. Also known as headline balancing.","description_html":"The <code>text-wrap: balance</code> CSS declaration balances the length of each line when text is broken into multiple lines. Also known as headline balancing.","name":"text-wrap: balance","spec":"https://drafts.csswg.org/css-text-4/#valdef-text-wrap-style-balance","status":{"baseline":"low","baseline_low_date":"2024-05-13","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"121","firefox_android":"121","safari":"17.5","safari_ios":"17.5"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4673"},"text-wrap-nowrap":{"compat_features":["css.properties.text-wrap.nowrap","css.properties.text-wrap.wrap"],"description":"The text-wrap: nowrap CSS declaration prevents text breaking into multiple lines. Text that doesn't fit overflows instead.","description_html":"The <code>text-wrap: nowrap</code> CSS declaration prevents text breaking into multiple lines. Text that doesn't fit overflows instead.","name":"text-wrap: nowrap","spec":"https://drafts.csswg.org/css-text-4/#valdef-text-wrap-mode-nowrap","status":{"baseline":"low","baseline_low_date":"2024-03-19","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"124","firefox_android":"124","safari":"17.4","safari_ios":"17.4"}}},"text-wrap-pretty":{"compat_features":["css.properties.text-wrap.pretty"],"description":"The text-wrap: pretty CSS declaration prioritizes better layout over speed when text is broken into multiple lines.","description_html":"The <code>text-wrap: pretty</code> CSS declaration prioritizes better layout over speed when text is broken into multiple lines.","name":"text-wrap: pretty","spec":"https://drafts.csswg.org/css-text-4/#valdef-text-wrap-style-pretty","status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4674"},"transferable-arraybuffer":{"compat_features":["javascript.builtins.ArrayBuffer.transfer","javascript.builtins.ArrayBuffer.transferToFixedLength","javascript.builtins.ArrayBuffer.detached"],"description":"The transfer() and transferToFixedLength() methods of ArrayBuffer move a buffer from one context to another (for example, to a worker).","description_html":"The <code>transfer()</code> and <code>transferToFixedLength()</code> methods of <code>ArrayBuffer</code> move a buffer from one context to another (for example, to a worker).","name":"Transferable ArrayBuffer","spec":"https://tc39.es/proposal-arraybuffer-transfer/#sec-arraybuffer.prototype.transfer","status":{"baseline":"low","baseline_low_date":"2024-03-05","support":{"chrome":"114","chrome_android":"114","edge":"114","firefox":"122","firefox_android":"122","safari":"17.4","safari_ios":"17.4"}}},"transforms2d":{"caniuse":"transforms2d","compat_features":["css.properties.transform","css.properties.transform-origin","css.types.transform-function","css.types.transform-function.matrix","css.types.transform-function.rotate","css.types.transform-function.scale","css.types.transform-function.scaleX","css.types.transform-function.scaleY","css.types.transform-function.skew","css.types.transform-function.skewX","css.types.transform-function.skewY","css.types.transform-function.translate","css.types.transform-function.translateX","css.types.transform-function.translateY"],"description":"The transform CSS property and its 2D transform functions allow rotating, scaling, skewing, and translating an element. Arbitrary 2D transforms are also possible using a transformation matrix.","description_html":"The <code>transform</code> CSS property and its 2D transform functions allow rotating, scaling, skewing, and translating an element. Arbitrary 2D transforms are also possible using a transformation matrix.","name":"2D transforms","spec":"https://drafts.csswg.org/css-transforms-1/","status":{"baseline":"high","baseline_high_date":"2018-03-30","baseline_low_date":"2015-09-30","support":{"chrome":"36","chrome_android":"36","edge":"12","firefox":"16","firefox_android":"16","safari":"9","safari_ios":"9"}}},"transforms3d":{"caniuse":"transforms3d","compat_features":["css.properties.backface-visibility","css.properties.perspective","css.properties.perspective.none","css.properties.perspective-origin","css.properties.perspective-origin.bottom","css.properties.perspective-origin.center","css.properties.perspective-origin.left","css.properties.perspective-origin.right","css.properties.perspective-origin.top","css.properties.transform.3d","css.properties.transform-style","css.types.transform-function.matrix3d","css.types.transform-function.perspective","css.types.transform-function.rotate3d","css.types.transform-function.rotateX","css.types.transform-function.rotateY","css.types.transform-function.rotateZ","css.types.transform-function.scale3d","css.types.transform-function.scaleZ","css.types.transform-function.translate3d","css.types.transform-function.translateZ"],"description":"The transform CSS property and its 3D transform functions allow rotations and other transforms in three dimensions, including perspective transforms.","description_html":"The <code>transform</code> CSS property and its 3D transform functions allow rotations and other transforms in three dimensions, including perspective transforms.","name":"3D transforms","spec":"https://drafts.csswg.org/css-transforms-2/","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"36","chrome_android":"36","edge":"12","firefox":"16","firefox_android":"16","safari":"15.4","safari_ios":"15.4"}}},"transition-behavior":{"compat_features":["css.properties.transition-behavior"],"description":"The transition-behavior: allow-discrete CSS declaration allows transitions for properties whose animation behavior is discrete. Such properties can't be interpolated and swap from their start value to the end value at 50%.","description_html":"The <code>transition-behavior: allow-discrete</code> CSS declaration allows transitions for properties whose animation behavior is discrete. Such properties can't be interpolated and swap from their start value to the end value at 50%.","name":"transition-behavior","spec":"https://drafts.csswg.org/css-transitions-2/#transition-behavior-property","status":{"baseline":false,"support":{"chrome":"117","chrome_android":"117","edge":"117","safari":"17.4","safari_ios":"17.4"}},"usage_stats":"https://chromestatus.com/metrics/css/timeline/popularity/766"},"translate":{"compat_features":["html.global_attributes.translate","api.HTMLElement.translate"],"description":"The translate HTML attribute marks whether an element's text should be translated.","description_html":"The <code>translate</code> HTML attribute marks whether an element's text should be translated.","name":"translate attribute","spec":"https://html.spec.whatwg.org/multipage/dom.html#attr-translate","status":{"baseline":"low","baseline_low_date":"2023-03-14","support":{"chrome":"19","chrome_android":"25","edge":"79","firefox":"111","firefox_android":"111","safari":"6","safari_ios":"6"}}},"trig-functions":{"compat_features":["css.types.acos","css.types.asin","css.types.atan","css.types.atan2","css.types.cos","css.types.sin","css.types.tan"],"description":"The sin(), cos(), tan(), asin(), acos(), atan(), and atan2() CSS functions compute various trigonometric functions.","description_html":"The <code>sin()</code>, <code>cos()</code>, <code>tan()</code>, <code>asin()</code>, <code>acos()</code>, <code>atan()</code>, and <code>atan2()</code> CSS functions compute various trigonometric functions.","name":"sin(), cos(), tan(), asin(), acos(), atan(), and atan2()","spec":"https://drafts.csswg.org/css-values-4/#trig-funcs","status":{"baseline":"low","baseline_low_date":"2023-03-13","support":{"chrome":"111","chrome_android":"111","edge":"111","firefox":"108","firefox_android":"108","safari":"15.4","safari_ios":"15.4"}}},"trusted-types":{"caniuse":"trusted-types","compat_features":["api.TrustedHTML","api.TrustedHTML.toString","api.TrustedScript","api.TrustedScript.toString","api.TrustedScriptURL","api.TrustedScriptURL.toString","api.TrustedTypePolicy","api.TrustedTypePolicy.createHTML","api.TrustedTypePolicy.createScript","api.TrustedTypePolicy.createScriptURL","api.TrustedTypePolicy.name","api.TrustedTypePolicyFactory","api.TrustedTypePolicyFactory.createPolicy","api.TrustedTypePolicyFactory.defaultPolicy","api.TrustedTypePolicyFactory.emptyHTML","api.TrustedTypePolicyFactory.emptyScript","api.TrustedTypePolicyFactory.getAttributeType","api.TrustedTypePolicyFactory.getPropertyType","api.TrustedTypePolicyFactory.isHTML","api.TrustedTypePolicyFactory.isScript","api.TrustedTypePolicyFactory.isScriptURL","api.trustedTypes","http.headers.Content-Security-Policy.require-trusted-types-for","http.headers.Content-Security-Policy.trusted-types"],"description":"Trusted types allow you to lock down insecure parts of the DOM API and prevent client-side cross-site scripting (XSS) attacks.","description_html":"Trusted types allow you to lock down insecure parts of the DOM API and prevent client-side cross-site scripting (XSS) attacks.","name":"Trusted types","spec":"https://w3c.github.io/trusted-types/dist/spec/","status":{"baseline":false,"support":{"chrome":"83","chrome_android":"83","edge":"83"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2722"},"two-value-display":{"compat_features":["css.properties.display.multi-keyword_values"],"description":"The display CSS property accepts multiple keyword values, such as inline flex or block flow, to explicitly set an element's inner and outer layout mode. Also known as 2-value, multi-keyword, or multiple value syntax.","description_html":"The <code>display</code> CSS property accepts multiple keyword values, such as <code>inline flex</code> or <code>block flow</code>, to explicitly set an element's inner and outer layout mode. Also known as 2-value, multi-keyword, or multiple value syntax.","name":"Two-value display property","spec":"https://drafts.csswg.org/css-display-3/#the-display-properties","status":{"baseline":"low","baseline_low_date":"2023-07-21","support":{"chrome":"115","chrome_android":"115","edge":"115","firefox":"70","firefox_android":"79","safari":"15","safari_ios":"15"}}},"typed-array-iteration-methods":{"compat_features":["javascript.builtins.TypedArray.every","javascript.builtins.TypedArray.filter","javascript.builtins.TypedArray.forEach","javascript.builtins.TypedArray.indexOf","javascript.builtins.TypedArray.lastIndexOf","javascript.builtins.TypedArray.map","javascript.builtins.TypedArray.reduce","javascript.builtins.TypedArray.reduceRight","javascript.builtins.TypedArray.some"],"description":"Typed array iteration methods","description_html":"Typed array iteration methods","name":"Typed array iteration methods","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.every","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.filter","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.foreach","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.indexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.lastindexof","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.map","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.reduce","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.reduceright","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.some"],"status":{"baseline":"high","baseline_high_date":"2018-09-21","baseline_low_date":"2016-03-21","support":{"chrome":"45","chrome_android":"45","edge":"12","firefox":"37","firefox_android":"37","safari":"9.1","safari_ios":"9.3"}}},"typed-array-iterators":{"compat_features":["javascript.builtins.TypedArray.@@iterator","javascript.builtins.TypedArray.entries","javascript.builtins.TypedArray.keys","javascript.builtins.TypedArray.values"],"description":"Typed arrays are iterable with the for…of statement and enumerable with the methods entries(), keys(), and values().","description_html":"Typed arrays are iterable with the <code>for…of</code> statement and enumerable with the methods <code>entries()</code>, <code>keys()</code>, and <code>values()</code>.","name":"Typed array iterators","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype-@@iterator","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.entries","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.keys","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.values"],"status":{"baseline":"high","baseline_high_date":"2019-03-20","baseline_low_date":"2016-09-20","support":{"chrome":"38","chrome_android":"38","edge":"12","firefox":"36","firefox_android":"36","safari":"10","safari_ios":"10"}}},"typed-arrays":{"compat_features":["javascript.builtins.Float32Array","javascript.builtins.Float32Array.Float32Array","javascript.builtins.Float32Array.Float32Array.constructor_without_parameters","javascript.builtins.Float32Array.Float32Array.iterable_allowed","javascript.builtins.Float64Array","javascript.builtins.Float64Array.Float64Array","javascript.builtins.Float64Array.Float64Array.constructor_without_parameters","javascript.builtins.Float64Array.Float64Array.iterable_allowed","javascript.builtins.Int16Array","javascript.builtins.Int16Array.Int16Array","javascript.builtins.Int16Array.Int16Array.constructor_without_parameters","javascript.builtins.Int32Array","javascript.builtins.Int32Array.Int32Array","javascript.builtins.Int32Array.Int32Array.constructor_without_parameters","javascript.builtins.Int32Array.Int32Array.iterable_allowed","javascript.builtins.Int8Array","javascript.builtins.Int8Array.Int8Array","javascript.builtins.Int8Array.Int8Array.constructor_without_parameters","javascript.builtins.Int8Array.Int8Array.iterable_allowed","javascript.builtins.TypedArray","javascript.builtins.TypedArray.BYTES_PER_ELEMENT","javascript.builtins.TypedArray.buffer","javascript.builtins.TypedArray.byteLength","javascript.builtins.TypedArray.byteOffset","javascript.builtins.TypedArray.constructor_without_parameters","javascript.builtins.TypedArray.join","javascript.builtins.TypedArray.length","javascript.builtins.TypedArray.name","javascript.builtins.TypedArray.named_properties","javascript.builtins.TypedArray.reverse","javascript.builtins.TypedArray.set","javascript.builtins.TypedArray.slice","javascript.builtins.TypedArray.sort","javascript.builtins.TypedArray.subarray","javascript.builtins.TypedArray.toLocaleString","javascript.builtins.TypedArray.toString","javascript.builtins.Uint16Array","javascript.builtins.Uint16Array.Uint16Array","javascript.builtins.Uint16Array.Uint16Array.constructor_without_parameters","javascript.builtins.Uint16Array.Uint16Array.iterable_allowed","javascript.builtins.Uint32Array","javascript.builtins.Uint32Array.Uint32Array","javascript.builtins.Uint32Array.Uint32Array.constructor_without_parameters","javascript.builtins.Uint32Array.Uint32Array.iterable_allowed","javascript.builtins.Uint8Array","javascript.builtins.Uint8Array.Uint8Array","javascript.builtins.Uint8Array.Uint8Array.constructor_without_parameters","javascript.builtins.Uint8Array.Uint8Array.iterable_allowed","javascript.builtins.Uint8ClampedArray","javascript.builtins.Uint8ClampedArray.Uint8ClampedArray","javascript.builtins.Uint8ClampedArray.Uint8ClampedArray.iterable_allowed"],"description":"Typed arrays are ordered lists of JavaScript values, where all values are of the same numerical type, such as 8-bit integers or 32-bit floating point numbers.","description_html":"Typed arrays are ordered lists of JavaScript values, where all values are of the same numerical type, such as 8-bit integers or 32-bit floating point numbers.","name":"Typed arrays (initial support)","spec":["https://tc39.es/ecma262/multipage/indexed-collections.html#table-49","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-typedarray-constructors","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-typedarray-objects","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-typedarray.bytes_per_element","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.buffer","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.bytelength","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.byteoffset","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.join","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-get-%25typedarray%25.prototype.length","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-properties-of-the-typedarray-constructors","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.reverse","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.set","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.slice","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.sort","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.subarray","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.tolocalestring","https://tc39.es/ecma262/multipage/indexed-collections.html#sec-%25typedarray%25.prototype.tostring"],"status":{"baseline":"high","baseline_high_date":"2018-01-29","baseline_low_date":"2015-07-29","support":{"chrome":"7","chrome_android":"18","edge":"12","firefox":"4","firefox_android":"4","safari":"5.1","safari_ios":"4.2"}}},"url-canparse":{"compat_features":["api.URL.canParse_static"],"description":"The URL.canParse() static method checks whether a URL can be parsed into a valid URL object. It's an alternative to calling new URL() in a try…catch statement.","description_html":"The <code>URL.canParse()</code> static method checks whether a URL can be parsed into a valid <code>URL</code> object. It's an alternative to calling <code>new URL()</code> in a <code>try…catch</code> statement.","name":"URL.canParse()","spec":"https://url.spec.whatwg.org/#dom-url-canparse","status":{"baseline":"low","baseline_low_date":"2023-12-07","support":{"chrome":"120","chrome_android":"120","edge":"120","firefox":"115","firefox_android":"115","safari":"17","safari_ios":"17"}}},"user-activation":{"compat_features":["api.Navigator.userActivation","api.UserActivation","api.UserActivation.hasBeenActive","api.UserActivation.isActive"],"description":"The navigator.userActivation API reveals whether the user has interacted with the page through an \"activation\" gesture such as a click, tap, or key press. User activation gated APIs (such as the fullscreen API) fail without user interaction, and this API allows you to predict such a failure.","description_html":"The <code>navigator.userActivation</code> API reveals whether the user has interacted with the page through an \"activation\" gesture such as a click, tap, or key press. User activation gated APIs (such as the fullscreen API) fail without user interaction, and this API allows you to predict such a failure.","name":"User activation","spec":"https://html.spec.whatwg.org/multipage/interaction.html#the-useractivation-interface","status":{"baseline":"low","baseline_low_date":"2023-11-21","support":{"chrome":"72","chrome_android":"72","edge":"79","firefox":"120","firefox_android":"120","safari":"16.4","safari_ios":"16.4"}}},"user-pseudos":{"compat_features":["css.selectors.user-invalid","css.selectors.user-valid"],"description":"The :user-valid and :user-invalid pseudo-classes match form controls that have been marked as valid or invalid based on their validation constraints.","description_html":"The <code>:user-valid</code> and <code>:user-invalid</code> pseudo-classes match form controls that have been marked as valid or invalid based on their validation constraints.","name":":user-valid and :user-invalid","spec":"https://drafts.csswg.org/selectors-4/#user-pseudos","status":{"baseline":"low","baseline_low_date":"2023-11-02","support":{"chrome":"119","chrome_android":"119","edge":"119","firefox":"88","firefox_android":"88","safari":"16.5","safari_ios":"16.5"}},"usage_stats":["https://chromestatus.com/metrics/feature/timeline/popularity/4958","https://chromestatus.com/metrics/feature/timeline/popularity/4959"]},"view-transitions":{"caniuse":"view-transitions","compat_features":["api.Document.startViewTransition","api.ViewTransition","api.ViewTransition.finished","api.ViewTransition.ready","api.ViewTransition.skipTransition","api.ViewTransition.updateCallbackDone","css.properties.view-transition-name","css.selectors.view-transition","css.selectors.view-transition-group","css.selectors.view-transition-image-pair","css.selectors.view-transition-new","css.selectors.view-transition-old"],"description":"View transitions allow you to create animated visual transitions between different states of a document, or between different documents.","description_html":"View transitions allow you to create animated visual transitions between different states of a document, or between different documents.","name":"View transitions","spec":"https://drafts.csswg.org/css-view-transitions-1/","status":{"baseline":false,"support":{"chrome":"111","chrome_android":"111","edge":"111"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/4383"},"viewport-unit-variants":{"alias":"viewport-relative-unit-variants","caniuse":"viewport-unit-variants","compat_features":["css.types.length.vb","css.types.length.vi","css.types.length.viewport_percentage_units_dynamic","css.types.length.viewport_percentage_units_large","css.types.length.viewport_percentage_units_small"],"description":"The sv*, lv*, and dv* CSS viewport units are relative to the smallest, largest, and current (dynamic) viewport size. They are used to size elements in relation to the viewport's dimensions.","description_html":"The <code>sv*</code>, <code>lv*</code>, and <code>dv*</code> CSS viewport units are relative to the smallest, largest, and current (dynamic) viewport size. They are used to size elements in relation to the viewport's dimensions.","name":"Small, large, and dynamic viewport units","spec":["https://drafts.csswg.org/css-values-4/#viewport-variants","https://drafts.csswg.org/css-values-4/#viewport-relative-lengths"],"status":{"baseline":"low","baseline_low_date":"2022-12-05","support":{"chrome":"108","chrome_android":"108","edge":"108","firefox":"101","firefox_android":"101","safari":"15.4","safari_ios":"15.4"}}},"viewport-units":{"alias":"viewport-relative-units","caniuse":"viewport-units","compat_features":["css.types.length.vh","css.types.length.vmax","css.types.length.vmin","css.types.length.vw"],"description":"The vw, vh, vmin, and vmax CSS viewport units are relative to the size of the viewport, and are used to size elements in relation to the viewport's dimensions.","description_html":"The <code>vw</code>, <code>vh</code>, <code>vmin</code>, and <code>vmax</code> CSS viewport units are relative to the size of the viewport, and are used to size elements in relation to the viewport's dimensions.","name":"Viewport units","spec":"https://drafts.csswg.org/css-values-4/#viewport-relative-lengths","status":{"baseline":"high","baseline_high_date":"2020-04-17","baseline_low_date":"2017-10-17","support":{"chrome":"26","chrome_android":"26","edge":"16","firefox":"19","firefox_android":"19","safari":"7","safari_ios":"7"}}},"visual-viewport":{"compat_features":["api.VisualViewport","api.VisualViewport.height","api.VisualViewport.offsetLeft","api.VisualViewport.offsetTop","api.VisualViewport.pageLeft","api.VisualViewport.pageTop","api.VisualViewport.scale","api.VisualViewport.width","api.Window.visualViewport"],"description":"The visualViewport API provides a way to query and modify the user-visible viewport of a web page.","description_html":"The <code>visualViewport</code> API provides a way to query and modify the user-visible viewport of a web page.","name":"Visual viewport API","spec":"https://drafts.csswg.org/cssom-view-1/#visualViewport","status":{"baseline":"high","baseline_high_date":"2024-02-10","baseline_low_date":"2021-08-10","support":{"chrome":"61","chrome_android":"61","edge":"79","firefox":"91","firefox_android":"68","safari":"13","safari_ios":"13"}}},"wasm-simd":{"caniuse":"wasm-simd","compat_features":["webassembly.fixed-width-SIMD"],"description":"The 128-bit SIMD (Single Instruction Multiple Data) extension to WebAssembly performs one instruction on multiple units of data, when running on hardware that supports such instructions. Also known as vector instructions.","description_html":"The 128-bit SIMD (Single Instruction Multiple Data) extension to WebAssembly performs one instruction on multiple units of data, when running on hardware that supports such instructions. Also known as vector instructions.","name":"WebAssembly SIMD","spec":"https://webassembly.github.io/spec/core/bikeshed/#vector-instructions","status":{"baseline":"low","baseline_low_date":"2023-03-27","support":{"chrome":"91","chrome_android":"91","edge":"91","firefox":"89","firefox_android":"89","safari":"16.4","safari_ios":"16.4"}}},"web-animations":{"caniuse":"web-animation","compat_features":["api.Animation","api.Animation.Animation","api.Animation.cancel_event","api.Animation.cancel","api.Animation.commitStyles","api.Animation.currentTime","api.Animation.effect","api.Animation.finish","api.Animation.finished","api.Animation.finish_event","api.Animation.id","api.Animation.pause","api.Animation.pending","api.Animation.persist","api.Animation.play","api.Animation.playbackRate","api.Animation.playState","api.Animation.ready","api.Animation.remove_event","api.Animation.replaceState","api.Animation.reverse","api.Animation.startTime","api.Animation.timeline","api.Animation.updatePlaybackRate","api.AnimationTimeline","api.AnimationTimeline.currentTime","api.AnimationEffect","api.AnimationEffect.getComputedTiming","api.AnimationEffect.getTiming","api.AnimationEffect.updateTiming","api.AnimationPlaybackEvent","api.AnimationPlaybackEvent.AnimationPlaybackEvent","api.AnimationPlaybackEvent.currentTime","api.AnimationPlaybackEvent.timelineTime","api.KeyframeEffect","api.KeyframeEffect.KeyframeEffect","api.KeyframeEffect.composite","api.KeyframeEffect.getKeyframes","api.KeyframeEffect.pseudoElement","api.KeyframeEffect.setKeyframes","api.KeyframeEffect.target","api.DocumentTimeline","api.DocumentTimeline.DocumentTimeline","api.Document.getAnimations","api.Document.timeline","api.Element.animate"],"description":"The web animations API allows you to animate and synchronize the animations of DOM elements.","description_html":"The web animations API allows you to animate and synchronize the animations of DOM elements.","name":"Web animations","spec":"https://drafts.csswg.org/web-animations-1/","status":{"baseline":"low","baseline_low_date":"2022-09-12","support":{"chrome":"84","chrome_android":"84","edge":"84","firefox":"80","firefox_android":"80","safari":"16","safari_ios":"16"}}},"web-bluetooth":{"caniuse":"web-bluetooth","description":"The Web Bluetooth API enables selecting and communicating with nearby Bluetooth devices.","description_html":"The Web Bluetooth API enables selecting and communicating with nearby Bluetooth devices.","name":"Web Bluetooth","spec":"https://webbluetoothcg.github.io/web-bluetooth/","status":{"baseline":false,"support":{"chrome":"70","chrome_android":"56","edge":"79"}}},"web-locks":{"compat_features":["api.Lock","api.Lock.mode","api.Lock.name","api.LockManager","api.LockManager.query","api.LockManager.request","api.Navigator.locks","api.WorkerNavigator.locks"],"description":"The navigator.locks API coordinates work with shared resources through mutually exclusive ownership of a resource's name. Also known as web locks.","description_html":"The <code>navigator.locks</code> API coordinates work with shared resources through mutually exclusive ownership of a resource's name. Also known as web locks.","name":"Locks","spec":"https://w3c.github.io/web-locks/","status":{"baseline":"low","baseline_low_date":"2022-03-14","support":{"chrome":"69","chrome_android":"69","edge":"79","firefox":"96","firefox_android":"96","safari":"15.4","safari_ios":"15.4"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2375"},"web-midi":{"caniuse":"midi","compat_features":["api.MIDIAccess","api.MIDIAccess.inputs","api.MIDIAccess.outputs","api.MIDIAccess.statechange_event","api.MIDIAccess.sysexEnabled","api.MIDIConnectionEvent","api.MIDIConnectionEvent.MIDIConnectionEvent","api.MIDIConnectionEvent.port","api.MIDIInput","api.MIDIInput.midimessage_event","api.MIDIInputMap","api.MIDIInputMap.entries","api.MIDIInputMap.forEach","api.MIDIInputMap.get","api.MIDIInputMap.has","api.MIDIInputMap.keys","api.MIDIInputMap.size","api.MIDIInputMap.values","api.MIDIInputMap.@@iterator","api.MIDIMessageEvent","api.MIDIMessageEvent.MIDIMessageEvent","api.MIDIMessageEvent.data","api.MIDIOutput","api.MIDIOutput.send","api.MIDIOutputMap","api.MIDIOutputMap.entries","api.MIDIOutputMap.forEach","api.MIDIOutputMap.get","api.MIDIOutputMap.has","api.MIDIOutputMap.keys","api.MIDIOutputMap.size","api.MIDIOutputMap.values","api.MIDIOutputMap.@@iterator","api.MIDIPort","api.MIDIPort.close","api.MIDIPort.connection","api.MIDIPort.id","api.MIDIPort.manufacturer","api.MIDIPort.name","api.MIDIPort.open","api.MIDIPort.state","api.MIDIPort.statechange_event","api.MIDIPort.type","api.MIDIPort.version","api.Navigator.requestMIDIAccess"],"description":"The Web MIDI API enables selecting MIDI input and output devices and sending and receiving MIDI messages.","description_html":"The Web MIDI API enables selecting MIDI input and output devices and sending and receiving MIDI messages.","name":"Web MIDI","spec":"https://webaudio.github.io/web-midi-api/","status":{"baseline":false,"support":{"chrome":"43","chrome_android":"43","edge":"79","firefox":"108"}}},"web-nfc":{"caniuse":"webnfc","compat_features":["api.NDEFMessage","api.NDEFMessage.NDEFMessage","api.NDEFMessage.secure_context_required","api.NDEFMessage.records","api.NDEFReader","api.NDEFReader.NDEFReader","api.NDEFReader.secure_context_required","api.NDEFReader.reading_event","api.NDEFReader.readingerror_event","api.NDEFReader.scan","api.NDEFReader.write","api.NDEFReadingEvent","api.NDEFReadingEvent.NDEFReadingEvent","api.NDEFReadingEvent.secure_context_required","api.NDEFReadingEvent.message","api.NDEFReadingEvent.serialNumber","api.NDEFRecord","api.NDEFRecord.NDEFRecord","api.NDEFRecord.secure_context_required","api.NDEFRecord.data","api.NDEFRecord.encoding","api.NDEFRecord.id","api.NDEFRecord.lang","api.NDEFRecord.mediaType","api.NDEFRecord.recordType","api.NDEFRecord.toRecords"],"description":"The NDEFReader API reads and writes messages to near-field communication (NFC) tags.","description_html":"The <code>NDEFReader</code> API reads and writes messages to near-field communication (NFC) tags.","name":"Web NFC","spec":"https://w3c.github.io/web-nfc/","status":{"baseline":false,"support":{"chrome_android":"89"}}},"webauthn-public-key-easy":{"compat_features":["api.AuthenticatorAttestationResponse.getAuthenticatorData","api.AuthenticatorAttestationResponse.getPublicKey","api.AuthenticatorAttestationResponse.getPublicKeyAlgorithm"],"description":"The getAuthenticatorData(), getPublicKey(), and getPublicKeyAlgorithm() methods of AuthenticatorAttestationResponse access credential data inside attestationObject without the need to parse it.","description_html":"The <code>getAuthenticatorData()</code>, <code>getPublicKey()</code>, and <code>getPublicKeyAlgorithm()</code> methods of <code>AuthenticatorAttestationResponse</code> access credential data inside <code>attestationObject</code> without the need to parse it.","name":"Web authentication easy public key access","spec":"https://w3c.github.io/webauthn/#sctn-public-key-easy","status":{"baseline":"low","baseline_low_date":"2023-10-24","support":{"chrome":"85","chrome_android":"85","edge":"85","firefox":"119","firefox_android":"119","safari":"16","safari_ios":"16"}}},"webcodecs":{"caniuse":"webcodecs","compat_features":["api.AudioData","api.AudioData.AudioData","api.AudioData.allocationSize","api.AudioData.clone","api.AudioData.close","api.AudioData.copyTo","api.AudioData.duration","api.AudioData.format","api.AudioData.numberOfChannels","api.AudioData.numberOfFrames","api.AudioData.sampleRate","api.AudioData.timestamp","api.AudioDecoder","api.AudioDecoder.AudioDecoder","api.AudioDecoder.close","api.AudioDecoder.configure","api.AudioDecoder.decode","api.AudioDecoder.decodeQueueSize","api.AudioDecoder.dequeue_event","api.AudioDecoder.flush","api.AudioDecoder.isConfigSupported_static","api.AudioDecoder.reset","api.AudioDecoder.state","api.AudioEncoder","api.AudioEncoder.AudioEncoder","api.AudioEncoder.close","api.AudioEncoder.configure","api.AudioEncoder.dequeue_event","api.AudioEncoder.encode","api.AudioEncoder.encodeQueueSize","api.AudioEncoder.flush","api.AudioEncoder.isConfigSupported_static","api.AudioEncoder.reset","api.AudioEncoder.state","api.EncodedAudioChunk","api.EncodedAudioChunk.EncodedAudioChunk","api.EncodedAudioChunk.byteLength","api.EncodedAudioChunk.copyTo","api.EncodedAudioChunk.duration","api.EncodedAudioChunk.timestamp","api.EncodedAudioChunk.type","api.EncodedVideoChunk","api.EncodedVideoChunk.EncodedVideoChunk","api.EncodedVideoChunk.byteLength","api.EncodedVideoChunk.copyTo","api.EncodedVideoChunk.duration","api.EncodedVideoChunk.timestamp","api.EncodedVideoChunk.type","api.ImageDecoder","api.ImageDecoder.ImageDecoder","api.ImageDecoder.close","api.ImageDecoder.complete","api.ImageDecoder.completed","api.ImageDecoder.decode","api.ImageDecoder.isTypeSupported_static","api.ImageDecoder.reset","api.ImageDecoder.tracks","api.ImageDecoder.type","api.ImageTrack","api.ImageTrack.animated","api.ImageTrack.frameCount","api.ImageTrack.repetitionCount","api.ImageTrack.selected","api.ImageTrackList","api.ImageTrackList.length","api.ImageTrackList.ready","api.ImageTrackList.selectedIndex","api.ImageTrackList.selectedTrack","api.VideoColorSpace","api.VideoColorSpace.VideoColorSpace","api.VideoColorSpace.fullRange","api.VideoColorSpace.matrix","api.VideoColorSpace.primaries","api.VideoColorSpace.toJSON","api.VideoColorSpace.transfer","api.VideoDecoder","api.VideoDecoder.VideoDecoder","api.VideoDecoder.close","api.VideoDecoder.configure","api.VideoDecoder.decode","api.VideoDecoder.decodeQueueSize","api.VideoDecoder.dequeue_event","api.VideoDecoder.flush","api.VideoDecoder.isConfigSupported_static","api.VideoDecoder.reset","api.VideoDecoder.state","api.VideoEncoder","api.VideoEncoder.VideoEncoder","api.VideoEncoder.close","api.VideoEncoder.configure","api.VideoEncoder.dequeue_event","api.VideoEncoder.encode","api.VideoEncoder.encodeQueueSize","api.VideoEncoder.flush","api.VideoEncoder.isConfigSupported_static","api.VideoEncoder.reset","api.VideoEncoder.state","api.VideoFrame","api.VideoFrame.VideoFrame","api.VideoFrame.allocationSize","api.VideoFrame.clone","api.VideoFrame.close","api.VideoFrame.codedHeight","api.VideoFrame.codedRect","api.VideoFrame.codedWidth","api.VideoFrame.colorSpace","api.VideoFrame.copyTo","api.VideoFrame.displayHeight","api.VideoFrame.displayWidth","api.VideoFrame.duration","api.VideoFrame.format","api.VideoFrame.timestamp","api.VideoFrame.visibleRect"],"description":"The WebCodecs API provides low-level access to individual video frames and chunks of audio samples, for full control over the way media is processed.","description_html":"The WebCodecs API provides low-level access to individual video frames and chunks of audio samples, for full control over the way media is processed.","name":"WebCodecs","spec":"https://w3c.github.io/webcodecs/","status":{"baseline":false,"support":{"chrome":"106","chrome_android":"106","edge":"106"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3464"},"webdriver-bidi":{"description":"WebDriver BiDi is a bidirectional protocol that allows a WebDriver client and a browser to communicate with each other.","description_html":"WebDriver BiDi is a bidirectional protocol that allows a WebDriver client and a browser to communicate with each other.","name":"WebDriver BiDi","spec":"https://w3c.github.io/webdriver-bidi/","status":{"baseline":false,"support":{"chrome":"106","chrome_android":"106","edge":"106","firefox":"102","firefox_android":"102"}}},"webgl-oes-draw-buffers-indexed":{"compat_features":["api.OES_draw_buffers_indexed","api.OES_draw_buffers_indexed.blendEquationiOES","api.OES_draw_buffers_indexed.blendEquationSeparateiOES","api.OES_draw_buffers_indexed.blendFunciOES","api.OES_draw_buffers_indexed.blendFuncSeparateiOES","api.OES_draw_buffers_indexed.colorMaskiOES","api.OES_draw_buffers_indexed.disableiOES","api.OES_draw_buffers_indexed.enableiOES"],"description":"The OES_draw_buffers_indexed extension to WebGL allows you to control blending on a per-color basis when writing to multiple color buffers simultaneously.","description_html":"The <code>OES_draw_buffers_indexed</code> extension to WebGL allows you to control blending on a per-color basis when writing to multiple color buffers simultaneously.","name":"WebGL OES_draw_buffers_indexed extension","spec":"https://registry.khronos.org/webgl/extensions/OES_draw_buffers_indexed/","status":{"baseline":"low","baseline_low_date":"2022-12-13","support":{"chrome":"100","chrome_android":"100","edge":"100","firefox":"108","firefox_android":"108","safari":"16","safari_ios":"16"}}},"webhid":{"caniuse":"webhid","compat_features":["api.HID","api.HID.connect_event","api.HID.disconnect_event","api.HID.getDevices","api.HID.requestDevice","api.HIDConnectionEvent","api.HIDConnectionEvent.HIDConnectionEvent","api.HIDConnectionEvent.device","api.HIDDevice","api.HIDDevice.close","api.HIDDevice.collections","api.HIDDevice.inputreport_event","api.HIDDevice.open","api.HIDDevice.opened","api.HIDDevice.productId","api.HIDDevice.productName","api.HIDDevice.receiveFeatureReport","api.HIDDevice.sendFeatureReport","api.HIDDevice.sendReport","api.HIDDevice.vendorId","api.HIDInputReportEvent","api.HIDInputReportEvent.data","api.HIDInputReportEvent.device","api.HIDInputReportEvent.reportId","api.Navigator.hid","http.headers.Permissions-Policy.hid"],"description":"The WebHID API provides access to Human Interface Devices (HID) that are connected to the user's device.","description_html":"The WebHID API provides access to Human Interface Devices (HID) that are connected to the user's device.","name":"WebHID","spec":"https://wicg.github.io/webhid/","status":{"baseline":false,"support":{"chrome":"89","edge":"89"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2865"},"webp":{"caniuse":"webp","description":"The WebP image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","description_html":"The WebP image format is a raster graphics file format that supports animation, alpha transparency, and lossy as well as lossless compression.","name":"WebP","spec":"https://www.ietf.org/archive/id/draft-zern-webp-15.html","status":{"baseline":"high","baseline_high_date":"2023-03-16","baseline_low_date":"2020-09-16","support":{"chrome":"9","chrome_android":"18","edge":"18","firefox":"65","firefox_android":"65","safari":"14","safari_ios":"14"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3797"},"webrtc":{"caniuse":"rtcpeerconnection","compat_features":["api.RTCPeerConnection","api.RTCDataChannel"],"description":"The WebRTC API establishes real-time communication channels directly between browsers. It is commonly used in video conferencing applications.","description_html":"The WebRTC API establishes real-time communication channels directly between browsers. It is commonly used in video conferencing applications.","name":"WebRTC","spec":"https://w3c.github.io/webrtc-pc/","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"56","chrome_android":"56","edge":"79","firefox":"44","firefox_android":"44","safari":"11","safari_ios":"11"}}},"webrtc-encoded-transform":{"compat_features":["api.DedicatedWorkerGlobalScope.rtctransform_event","api.RTCEncodedAudioFrame","api.RTCEncodedAudioFrame.data","api.RTCEncodedAudioFrame.getMetadata","api.RTCEncodedAudioFrame.timestamp","api.RTCEncodedVideoFrame","api.RTCEncodedVideoFrame.data","api.RTCEncodedVideoFrame.getMetadata","api.RTCEncodedVideoFrame.timestamp","api.RTCEncodedVideoFrame.type","api.RTCRtpReceiver.transform","api.RTCRtpScriptTransform","api.RTCRtpScriptTransform.RTCRtpScriptTransform","api.RTCRtpScriptTransformer","api.RTCRtpScriptTransformer.generateKeyFrame","api.RTCRtpScriptTransformer.options","api.RTCRtpScriptTransformer.readable","api.RTCRtpScriptTransformer.sendKeyFrameRequest","api.RTCRtpScriptTransformer.writable","api.RTCRtpSender.transform","api.RTCTransformEvent","api.RTCTransformEvent.transformer"],"description":"The WebRTC encoded transform API allows you to modify audio and video streams in WebRTC connections. For example, it can be used for visual effects or custom codecs.","description_html":"The WebRTC encoded transform API allows you to modify audio and video streams in WebRTC connections. For example, it can be used for visual effects or custom codecs.","name":"WebRTC encoded transform","spec":"https://w3c.github.io/webrtc-encoded-transform/","status":{"baseline":false,"support":{"firefox":"117","firefox_android":"117","safari":"15.4","safari_ios":"15.4"}}},"webrtc-sctp":{"compat_features":["api.RTCPeerConnection.sctp","api.RTCSctpTransport","api.RTCSctpTransport.maxChannels","api.RTCSctpTransport.maxMessageSize","api.RTCSctpTransport.state","api.RTCSctpTransport.statechange_event","api.RTCSctpTransport.transport"],"description":"The sctp object on RTCPeerConnection represents the negotiated SCTP transport. SCTP (Stream Control Transmission Protocol) is the protocol that RTCDataChannel uses.","description_html":"The <code>sctp</code> object on <code>RTCPeerConnection</code> represents the negotiated SCTP transport. SCTP (Stream Control Transmission Protocol) is the protocol that <code>RTCDataChannel</code> uses.","name":"WebRTC SCTP information","spec":"https://w3c.github.io/webrtc-pc/#rtcsctptransport-interface","status":{"baseline":"low","baseline_low_date":"2023-05-09","support":{"chrome":"76","chrome_android":"76","edge":"79","firefox":"113","firefox_android":"113","safari":"15.4","safari_ios":"15.4"}}},"webtransport":{"caniuse":"webtransport","compat_features":["api.WebTransport","api.WebTransport.WebTransport","api.WebTransport.close","api.WebTransport.closed","api.WebTransport.createBidirectionalStream","api.WebTransport.createUnidirectionalStream","api.WebTransport.datagrams","api.WebTransport.incomingBidirectionalStreams","api.WebTransport.incomingUnidirectionalStreams","api.WebTransport.ready","api.WebTransportBidirectionalStream","api.WebTransportBidirectionalStream.readable","api.WebTransportBidirectionalStream.writable","api.WebTransportDatagramDuplexStream","api.WebTransportDatagramDuplexStream.incomingHighWaterMark","api.WebTransportDatagramDuplexStream.incomingMaxAge","api.WebTransportDatagramDuplexStream.maxDatagramSize","api.WebTransportDatagramDuplexStream.outgoingHighWaterMark","api.WebTransportDatagramDuplexStream.outgoingMaxAge","api.WebTransportDatagramDuplexStream.readable","api.WebTransportDatagramDuplexStream.writable","api.WebTransportError","api.WebTransportError.WebTransportError","api.WebTransportError.source","api.WebTransportError.streamErrorCode"],"description":"The WebTransport API transmits data between a client and a server, by using the HTTP/3 protocol.","description_html":"The <code>WebTransport</code> API transmits data between a client and a server, by using the HTTP/3 protocol.","name":"WebTransport","spec":"https://w3c.github.io/webtransport/","status":{"baseline":false,"support":{"chrome":"97","chrome_android":"97","edge":"97","firefox":"114","firefox_android":"114"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/3472"},"webusb":{"caniuse":"webusb","compat_features":["api.Navigator.usb","api.USB","api.USB.connect_event","api.USB.disconnect_event","api.USB.getDevices","api.USB.requestDevice","api.USBAlternateInterface","api.USBAlternateInterface.USBAlternateInterface","api.USBAlternateInterface.alternateSetting","api.USBAlternateInterface.endpoints","api.USBAlternateInterface.interfaceClass","api.USBAlternateInterface.interfaceName","api.USBAlternateInterface.interfaceProtocol","api.USBAlternateInterface.interfaceSubclass","api.USBConfiguration","api.USBConfiguration.USBConfiguration","api.USBConfiguration.configurationName","api.USBConfiguration.configurationValue","api.USBConfiguration.interfaces","api.USBConnectionEvent","api.USBConnectionEvent.USBConnectionEvent","api.USBConnectionEvent.device","api.USBDevice","api.USBDevice.claimInterface","api.USBDevice.clearHalt","api.USBDevice.close","api.USBDevice.configuration","api.USBDevice.configurations","api.USBDevice.controlTransferIn","api.USBDevice.controlTransferOut","api.USBDevice.deviceClass","api.USBDevice.deviceProtocol","api.USBDevice.deviceSubclass","api.USBDevice.deviceVersionMajor","api.USBDevice.deviceVersionMinor","api.USBDevice.deviceVersionSubminor","api.USBDevice.isochronousTransferIn","api.USBDevice.isochronousTransferOut","api.USBDevice.manufacturerName","api.USBDevice.open","api.USBDevice.opened","api.USBDevice.productId","api.USBDevice.productName","api.USBDevice.releaseInterface","api.USBDevice.reset","api.USBDevice.selectAlternateInterface","api.USBDevice.selectConfiguration","api.USBDevice.serialNumber","api.USBDevice.transferIn","api.USBDevice.transferOut","api.USBDevice.usbVersionMajor","api.USBDevice.usbVersionMinor","api.USBDevice.usbVersionSubminor","api.USBDevice.vendorId","api.USBEndpoint","api.USBEndpoint.USBEndpoint","api.USBEndpoint.direction","api.USBEndpoint.endpointNumber","api.USBEndpoint.packetSize","api.USBEndpoint.type","api.USBInTransferResult","api.USBInTransferResult.USBInTransferResult","api.USBInTransferResult.data","api.USBInTransferResult.status","api.USBInterface","api.USBInterface.USBInterface","api.USBInterface.alternate","api.USBInterface.alternates","api.USBInterface.claimed","api.USBInterface.interfaceNumber","api.USBIsochronousInTransferPacket","api.USBIsochronousInTransferPacket.USBIsochronousInTransferPacket","api.USBIsochronousInTransferPacket.data","api.USBIsochronousInTransferPacket.status","api.USBIsochronousInTransferResult","api.USBIsochronousInTransferResult.USBIsochronousInTransferResult","api.USBIsochronousInTransferResult.data","api.USBIsochronousInTransferResult.packets","api.USBIsochronousOutTransferPacket","api.USBIsochronousOutTransferPacket.USBIsochronousOutTransferPacket","api.USBIsochronousOutTransferPacket.bytesWritten","api.USBIsochronousOutTransferPacket.status","api.USBIsochronousOutTransferResult","api.USBIsochronousOutTransferResult.USBIsochronousOutTransferResult","api.USBIsochronousOutTransferResult.packets","api.USBOutTransferResult","api.USBOutTransferResult.USBOutTransferResult","api.USBOutTransferResult.bytesWritten","api.USBOutTransferResult.status"],"description":"The WebUSB API exposes USB compatible devices to web pages.","description_html":"The WebUSB API exposes USB compatible devices to web pages.","name":"WebUSB","spec":"https://wicg.github.io/webusb/","status":{"baseline":false,"support":{"chrome":"61","chrome_android":"61","edge":"79"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/1519"},"webvtt":{"caniuse":"webvtt","compat_features":["api.VTTCue","api.VTTCue.VTTCue","api.VTTCue.align","api.VTTCue.getCueAsHTML","api.VTTCue.line","api.VTTCue.position","api.VTTCue.size","api.VTTCue.snapToLines","api.VTTCue.text","api.VTTCue.vertical"],"description":"WebVTT is a captions and subtitles format. WebVTT files are loaded using the <track> element, and the VTTCue API can be used to create or update cues dynamically.","description_html":"WebVTT is a captions and subtitles format. WebVTT files are loaded using the <code>&#x3C;track></code> element, and the <code>VTTCue</code> API can be used to create or update cues dynamically.","name":"WebVTT","spec":"https://w3c.github.io/webvtt/","status":{"baseline":"high","baseline_high_date":"2022-07-15","baseline_low_date":"2020-01-15","support":{"chrome":"33","chrome_android":"33","edge":"79","firefox":"31","firefox_android":"31","safari":"8","safari_ios":"8"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/409"},"webvtt-regions":{"compat_features":["api.VTTRegion","api.VTTRegion.VTTRegion","api.VTTRegion.id","api.VTTRegion.regionAnchorX","api.VTTRegion.regionAnchorY","api.VTTRegion.scroll","api.VTTRegion.viewportAnchorX","api.VTTRegion.viewportAnchorY","api.VTTRegion.width"],"description":"WebVTT regions set the areas of the video where captions or subtitles should be rendered, such as placing roll-up captions used for live captions.","description_html":"WebVTT regions set the areas of the video where captions or subtitles should be rendered, such as placing roll-up captions used for live captions.","name":"WebVTT regions","spec":"https://w3c.github.io/webvtt/#regions","status":{"baseline":false,"support":{"firefox":"59","firefox_android":"59","safari":"7","safari_ios":"7"}}},"where":{"compat_features":["css.selectors.where","css.selectors.where.forgiving_selector_list"],"description":"The :where() CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list. It is functionally equivalent to the selectors in the list, but doesn't affect the CSS rule specificity.","description_html":"The <code>:where()</code> CSS functional pseudo-class takes a selector list as its argument, and matches any element that can be selected by one of the selectors in that list. It is functionally equivalent to the selectors in the list, but doesn't affect the CSS rule specificity.","name":":where()","spec":"https://drafts.csswg.org/selectors-4/#zero-matches","status":{"baseline":"high","baseline_high_date":"2023-07-21","baseline_low_date":"2021-01-21","support":{"chrome":"88","chrome_android":"88","edge":"88","firefox":"82","firefox_android":"82","safari":"14","safari_ios":"14"}},"usage_stats":"https://chromestatus.com/metrics/feature/timeline/popularity/2431"}}