REFERENCE
CSS properties
673 entries · Page 2 of 5
@page @top-left-cornerActually painted in PDF. Corner width comes from the left/right margin and height from the top/bottom margin; both must be positive. Painting uses the single @page rule selected for that page. A content declaration is required; a background or border alone cannot activate a box without content. See the corresponding entries for shared font, alignment, decoration, and counter limitations.
@page @top-rightActually painted in PDF. The margin on that page edge must be positive. Each edge has up to three slots. Without explicit sizes, space is divided equally among occupied slots. With explicit sizes, start/center/end slots are anchored and auto slots share the remainder equally. Excess explicit sizes are scaled down proportionally. Painting uses the single @page rule selected for that page. A content declaration is required; a background or border alone cannot activate a box without content. See the corresponding entries for shared font, alignment, decoration, and counter limitations.
@page @top-right-cornerActually painted in PDF. Corner width comes from the left/right margin and height from the top/bottom margin; both must be positive. Painting uses the single @page rule selected for that page. A content declaration is required; a background or border alone cannot activate a box without content. See the corresponding entries for shared font, alignment, decoration, and counter limitations.
@page bleedNo dedicated bleed descriptor parser or PDF consumer was found. PageGeometry only stores page width, height, and four margins. PDF pages open at the opts dimensions, with main content clipped to the content area. Bleed areas, BleedBox/TrimBox, and print bleed output cannot be claimed as supported.
@page content:counter(page)Replaced with the current page number as a decimal integer starting at 1. Can be concatenated with static strings. The optional style argument is discarded; decimal is always used. Other named counters produce an empty string. Rewriting page counters with counter-reset/increment is not handled.
@page content:counter(pages)Replaced with the total page count generated by FragmentStore, including parity blank pages. Can be concatenated with static strings. The optional style argument is discarded; decimal is always used. Other named counters produce an empty string. Rewriting page counters with counter-reset/increment is not handled.
@page marginContributes to the global page content area and available margin strips. The first generic rule without a name or pseudo-class is the base. The first named rule without pseudo-classes whose page name matches consistently across the tree is then overlaid. The ordinary page flow shares one geometry; :first/:left/:right/:blank rules do not change margins per page. The string shorthand recognizes px/in/cm/mm/pt/pc/q. Longhand properties call CSSLength::toPx, with em/rem fixed to a 16px base and vw/vh equal to 0. Percentages have no page-size reference, and calc has no dedicated evaluator.
@page margin-bottomContributes to the global page content area and available margin strips. The first generic rule without a name or pseudo-class is the base. The first named rule without pseudo-classes whose page name matches consistently across the tree is then overlaid. The ordinary page flow shares one geometry; :first/:left/:right/:blank rules do not change margins per page. The string shorthand recognizes px/in/cm/mm/pt/pc/q. Longhand properties call CSSLength::toPx, with em/rem fixed to a 16px base and vw/vh equal to 0. Percentages have no page-size reference, and calc has no dedicated evaluator.
@page margin-box contentUses a separate tolerant scanner. Quoted text and an escaped next character are preserved; inter-token whitespace and separating commas are not output. Other unknown content is copied character by character. There is no full generated-content parsing for attr()/url()/image/string()/element()/target-counter()/quotes. The support of ordinary DOM content cannot be assumed here. No dedicated suppression branch was found for none/normal, which may be treated as text.
@page margin-box width/heightReads only the strip main axis: width for top/bottom boxes and height for left/right boxes. General CSS min/max/percentage sizing is not supported. readLengthPt uses a default of -1 for em/rem, so they cannot produce a positive size. Percentages and other unknown units fall back to a bare point value. The width:50% comment is not evidence of percentage support. Corner boxes always use the margins and do not read explicit width/height.
@page margin-box 字体与排版Reads the margin rule directly, with defaults of sans-serif, 10pt, black, and weight 400. Ordinary DOM ancestor style inheritance does not apply. readLengthPt recognizes pt/px/em/rem/in/mm/cm, but em/rem use the supplied default value; the padding default is 0. Unknown units return the original number in points. backend.computeWrappedLines wraps text. Line height is fixed at font-size times 1.2. Text is vertically centered and switches to top alignment on overflow. The full paragraph behavior of line-height/vertical-align/white-space and related properties is not used.
@page margin-box 装饰Separately uses rectangular backgrounds, solid borders on four sides, and padding. none/hidden sides are not painted. dashed/dotted/double/groove/ridge/inset/outset are all painted as solid strips. Backgrounds are flat colors, without the multilayer image/gradient backgrounds of ordinary DOM boxes. currentColor has no parent inheritance, and borders fall back to black. The default em/rem base for padding is 0. Do not claim the complete units or decoration behavior of an ordinary CSS box.
@page margin-leftContributes to the global page content area and available margin strips. The first generic rule without a name or pseudo-class is the base. The first named rule without pseudo-classes whose page name matches consistently across the tree is then overlaid. The ordinary page flow shares one geometry; :first/:left/:right/:blank rules do not change margins per page. The string shorthand recognizes px/in/cm/mm/pt/pc/q. Longhand properties call CSSLength::toPx, with em/rem fixed to a 16px base and vw/vh equal to 0. Percentages have no page-size reference, and calc has no dedicated evaluator.
@page margin-rightContributes to the global page content area and available margin strips. The first generic rule without a name or pseudo-class is the base. The first named rule without pseudo-classes whose page name matches consistently across the tree is then overlaid. The ordinary page flow shares one geometry; :first/:left/:right/:blank rules do not change margins per page. The string shorthand recognizes px/in/cm/mm/pt/pc/q. Longhand properties call CSSLength::toPx, with em/rem fixed to a 16px base and vw/vh equal to 0. Percentages have no page-size reference, and calc has no dedicated evaluator.
@page margin-topContributes to the global page content area and available margin strips. The first generic rule without a name or pseudo-class is the base. The first named rule without pseudo-classes whose page name matches consistently across the tree is then overlaid. The ordinary page flow shares one geometry; :first/:left/:right/:blank rules do not change margins per page. The string shorthand recognizes px/in/cm/mm/pt/pc/q. Longhand properties call CSSLength::toPx, with em/rem fixed to a 16px base and vw/vh equal to 0. Percentages have no page-size reference, and calc has no dedicated evaluator.
@page marksThe stylesheet only preserves marks as raw multitoken text. PageGeometry, Document::printToPDF, and the PDF backend do not read marks. There is no output consumer for crop or registration marks.
@page sizePageGeometry parses a single length for a square, two lengths, and named paper sizes; a keyword plus landscape swaps width and height. Bare portrait/landscape and automatic orientation are not implemented. String lengths recognize only px/in/cm/mm/pt/pc/q; calc and relative units are not fully supported. The key limitation is that Document::printToPDF subsequently overwrites pageWidth/pageHeight unconditionally with PDFOptions. The final PDF paper dimensions come from opts. CSS size cannot be claimed to control the output paper size.
@page 选择与级联PDF page-margin content matches each page by name/first/left/right/blank. RTL swaps left and right pages; blank uses the actual FragmentStore::isBlank signal. A simple weighted score, with later rules winning ties, selects one complete CSSPageRule. Declarations from multiple rules are not merged. Headers in generic rules are not automatically added to more specific rules. The parser decodes only the first part of a comma-separated selector list and skips unknown pseudo-classes. Global geometry instead uses the first generic/named rule without pseudo-classes. This is separate from per-page decoration selection.
@position-tryparseAtRule has no corresponding branch. It skips the entire statement/block and continues with subsequent rules; this does not implement the feature.
@propertyparseAtRule has no corresponding branch. It skips the entire statement/block and continues with subsequent rules; this does not implement the feature.
@scopeparseAtRule has no corresponding branch. It skips the entire statement/block and continues with subsequent rules; this does not implement the feature.
@starting-styleparseAtRule has no corresponding branch. It skips the entire statement/block and continues with subsequent rules; this does not implement the feature.
@supportsSupports parentheses, not/and/or, declarations and selector(). Mixing and/or at the same level requires parentheses. Results query limited declaration syntax and named capabilities; they do not guarantee layout or painting. Properties outside the limited grammar also depend on acceptance by setProperty.
@supports selector()Builds one complex selector after validating the full token sequence, rather than merely checking for a nonempty AST. Reports true for ::column despite the absence of consumable properties. Approximate pseudo-classes with matchers also return true.
@view-transitionparseAtRule has no corresponding branch. It skips the entire statement/block and continues with subsequent rules; this does not implement the feature.
CSS nesting / &Expands explicit & as :is(parent-selector-list); supports implicit descendants and relative combinators. Nested @media/@supports/@layer rules are available. Does not expand when all parent rules are pseudo-elements. Declaration segments are merged, with limited modeling of interleaved source order; full CSS Nesting conformance is not claimed.
CSS 注释与转义The tokenizer supports comments, Unicode escapes in identifiers and strings, exponent notation and URL tokens. File comments alone do not establish full CSS Syntax conformance.
CSS2 单冒号伪元素The four legacy names are recognized as pseudo-elements rather than pseudo-classes.
ID 选择器HTML tag names are matched in ASCII lowercase; class and id values remain case-sensitive.
SVG 内部 CSS 转交The SVG subtree is serialized and passed to the selected LunaSVG/Skia SVG backend. It is not rendered when the backend is none or its dependency is missing. The host copies only top-level Style rules from enabled Author sheets. It does not recurse into @media/@supports/@layer or extend the full host cascade or selector state into the isolated SVG. The full set of internal SVG CSS capabilities depends on the selected backend and version; it is outside the general KUI element property contract.
Specificityis/not/has use the maximum argument specificity; where is zero. nth-child of S adds its argument specificity. Nested specificity recursion has a budget.
abs()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
accent-colorA search across src found no style application, corresponding field, or control-painting consumer; classification as paint-only does not mean the property is implemented.
acos()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
align-contentUsed in multiline flex layout, grid layout, and block containers. A block container with a value other than normal establishes an independent formatting context.
align-itemsAligns flex/grid items. The supported unsafe combinations explicitly listed in source are self-start and self-end; this should not be generalized to other unsafe combinations.
align-selfanchor-center is stored as an enum and treated as centering in some absolute-positioning paths. The complete CSS Anchor Positioning anchor-name/position-anchor protocol is not implemented.
allExpands registered properties, excluding direction, unicode-bidi and --custom-property.
anchor()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
anchor-size()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
animationA shorthand for multiple animations, with keyframe ticks, events and pause/resume. Animatable properties are limited to the explicit write-back list in applyAnimatedProperty; arbitrary registered properties are not animatable.
animation-delayA single value applies to every AnimationDef; comma-separated time lists are not implemented.
animation-directionThe longhand updates only the first definition; lists are not implemented.
animation-durationA single value applies to every AnimationDef; comma-separated time lists are not implemented.
animation-fill-modeThe longhand updates only the first definition; lists are not implemented.
animation-iteration-countThe longhand updates only the first definition; lists are not implemented.
animation-nameMultiple names match existing definitions and reuse their parameters cyclically.
animation-play-stateThe longhand updates only the first definition; lists are not implemented.
animation-timing-functionThe function list maps cyclically to the existing animations; the CSS linear() piecewise function is not implemented.
appearanceOnly none changes the native control painting. Other compatibility keywords retain their computed values but are painted as auto; they do not switch to the named appearance or provide a dedicated base-select UI.
asin()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
aspect-ratioAccepts positive finite ratios and the natural-ratio branch for replaced elements with auto. Degenerate ratios fall back to auto; the suffix order ratio auto is not parsed.
atan()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
atan2()(通用值)The generic value/length-math parser has no semantics for this function. Storing the text of an unknown function does not establish support.
attr()(通用值)General typed attr() property values are unsupported. Existing generated-content behavior for content:attr(name) must be listed separately under generated content.
backdrop-filterImplements a filter chain. url(SVG-filter) is not supported. Ordinary filter values read only the numeric prefix: relative lengths in blur, angle units other than deg and similar cases do not use complete CSS unit parsing. backdrop-filter has no effect on the root element.
backface-visibilityDetermines the back face from the projection matrix.
backgroundSupports multiple layers, gradient direction, position, color stops, color hints and explicit interpolation spaces. image-set selects for a fixed 1dppx target; calc resolutions are simplified to 1x. The filter() image function is a KUI extension. image(), element(), cross-fade() and paint() are not implemented.
background-attachmentscroll follows the element; fixed uses the viewport as its painting reference; local uses the scrolling-content background path. The background painter uses multilayer properties one layer at a time.
background-blend-modeThe built-in registry, logical mapping, declaration expansion, and apply dispatch currently provide no implementation path that uses this property. Its appearance in examples, storage in CSSOM, or support for the corresponding standard property does not prove this name takes effect.
background-cliptext uses glyph and decoration masks. The prefixed name is an alias for the same path.
background-colorIncludes currentColor and transparent. Final painting is performed by the Skia backend.
background-imageSupports multiple layers, gradient direction, position, color stops, color hints and explicit interpolation spaces. image-set selects for a fixed 1dppx target; calc resolutions are simplified to 1x. The filter() image function is a KUI extension. image(), element(), cross-fade() and paint() are not implemented.
background-originOnly a single global origin field exists. Per-layer comma-separated lists are not implemented.
background-positionThe shared position parser supports keywords, edge offsets, lengths and percentages. Used by both gradients and images.
background-repeatPainting paths implement horizontal/vertical repetition, space spacing and round size adjustment, applied separately to each background layer.
background-sizeEvaluation of calc() lengths and percentages is deferred until the background area is known.
block-ellipsisThe current property registry and StyleCore/Extras have no implementation that uses this element property. Tokenizer acceptance of its name, inclusion in the @supports allowlist, or the existence of imported tests does not establish support.
block-sizeOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
borderExpanded by CSSStyleDeclaration::setProperty.
border-blockOnly maps block/inline in horizontal-tb; the inline direction follows direction. Ordinary inset/margin/padding pair shorthands split one or two values at top-level whitespace.
border-block-colorOnly maps block/inline in horizontal-tb; the inline direction follows direction. Border width/style/color pair shorthands write the same raw value to both sides rather than fully splitting two distinct values.
border-block-endOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-end-colorOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-end-styleOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-end-widthOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-startOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-start-colorOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-start-styleOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-start-widthOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-block-styleOnly maps block/inline in horizontal-tb; the inline direction follows direction. Border width/style/color pair shorthands write the same raw value to both sides rather than fully splitting two distinct values.
border-block-widthOnly maps block/inline in horizontal-tb; the inline direction follows direction. Border width/style/color pair shorthands write the same raw value to both sides rather than fully splitting two distinct values.
border-bottomExpanded by CSSStyleDeclaration::setProperty.
border-bottom-colorIncludes currentColor and transparent.
border-bottom-left-radiusHorizontal and vertical radii at each corner, including percentages, are evaluated against box width and height.
border-bottom-right-radiusHorizontal and vertical radii at each corner, including percentages, are evaluated against box width and height.
border-bottom-styleUsed by the border painting path. Collapsed tables separately use the shared-border conflict winner model. none and hidden do not produce ordinary visible edge strips.
border-bottom-widththin, medium and thick use 1px, 3px and 5px respectively.
border-collapseProvides separate and collapsed border models, including conflict resolution for collapsed borders.
border-colorIncludes currentColor and transparent.
border-imageThe shorthand expands into five longhands, with the same capability limits as those longhands.
border-image-outsetOutsets are currently applied directly as numeric values; per-side number multipliers and length units are not preserved separately.
border-image-repeatNine-slice edge strips use values per axis. One value applies to both axes; two values control horizontal and vertical repetition separately. Corner slices and edge strips follow the border-image painting path.
border-image-sliceOnly a global slicePercent flag exists. Mixed number and percentage values cannot preserve units per side.
border-image-sourceUses nine-slice painting. filter() is a KUI image extension.
border-image-widthcalc() is explicitly rejected. Global widthPercent/widthIsLength/widthAuto flags limit mixed units and per-side auto values; non-px lengths are not converted.
border-inlineOnly maps block/inline in horizontal-tb; the inline direction follows direction. Ordinary inset/margin/padding pair shorthands split one or two values at top-level whitespace.
border-inline-colorOnly maps block/inline in horizontal-tb; the inline direction follows direction. Border width/style/color pair shorthands write the same raw value to both sides rather than fully splitting two distinct values.
border-inline-endOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-end-colorOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-end-styleOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-end-widthOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-startOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-start-colorOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-start-styleOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-start-widthOnly maps horizontal-tb plus direction: RTL swaps inline start/end, block remains top/bottom, and size remains width/height. A vertical writing-mode does not change this mapping.
border-inline-styleOnly maps block/inline in horizontal-tb; the inline direction follows direction. Border width/style/color pair shorthands write the same raw value to both sides rather than fully splitting two distinct values.
border-inline-widthOnly maps block/inline in horizontal-tb; the inline direction follows direction. Border width/style/color pair shorthands write the same raw value to both sides rather than fully splitting two distinct values.
border-leftExpanded by CSSStyleDeclaration::setProperty.
border-left-colorIncludes currentColor and transparent.
border-left-styleUsed by the border painting path. Collapsed tables separately use the shared-border conflict winner model. none and hidden do not produce ordinary visible edge strips.
border-left-widththin, medium and thick use 1px, 3px and 5px respectively.
border-radiusThe shorthand expands elliptical radii into individual corners. Supports affine calc expressions combining lengths and percentages.
border-rightExpanded by CSSStyleDeclaration::setProperty.
border-right-colorIncludes currentColor and transparent.
border-right-styleUsed by the border painting path. Collapsed tables separately use the shared-border conflict winner model. none and hidden do not produce ordinary visible edge strips.
border-right-widththin, medium and thick use 1px, 3px and 5px respectively.
border-spacingProvides independent horizontal and vertical spacing, accepts lengths and math expressions, and uses non-negative used values. In collapse mode, the collapsed-border model handles spacing.
border-styleUsed by the border painting path. Collapsed tables separately use the shared-border conflict winner model. none and hidden do not produce ordinary visible edge strips.
border-topExpanded by CSSStyleDeclaration::setProperty.
border-top-colorIncludes currentColor and transparent.
border-top-left-radiusHorizontal and vertical radii at each corner, including percentages, are evaluated against box width and height.
border-top-right-radiusHorizontal and vertical radii at each corner, including percentages, are evaluated against box width and height.
border-top-styleUsed by the border painting path. Collapsed tables separately use the shared-border conflict winner model. none and hidden do not produce ordinary visible edge strips.
border-top-widththin, medium and thick use 1px, 3px and 5px respectively.
border-widththin, medium and thick use 1px, 3px and 5px respectively.
bottomPercentages are resolved during layout. Affine calc expressions retain px and percentage terms; non-affine expressions are converted to numbers during style resolution, so a complete container reference cannot be claimed for every function.
box-decoration-breakUsed in physical multicolumn fragments. This does not establish complete decoration semantics for inline fragments or paginated fragments.
box-shadowMultiple shadows with blur/spread, inset, dynamic currentColor and length math functions.
box-sizingAffects the used values of sizes and min/max constraints when accounting for padding and borders.
break-afterUsed by pagination and multicolumn layout. Pagination applies only to the Document PDF fragmentation path, not ordinary screen layout. This does not cover all combined avoid constraints or all fragmentation rules.
break-beforeUsed by pagination and multicolumn layout. Pagination applies only to the Document PDF fragmentation path, not ordinary screen layout. This does not cover all combined avoid constraints or all fragmentation rules.
break-insidePagination and multicolumn layout use avoid. There is no separate region layout system.
calc 常量pi/e are f32 approximations; infinity saturates at 1e8, and NaN becomes 0 directly. Does not provide full IEEE/CSS special-number propagation.
calc()Supports nested math, parentheses, arithmetic operator precedence and numeric type validation. Limited by each property's accepted types and the depth budget.
capThe element apply path uses font measurements where possible, and fallback ratios when no callback exists. Other property-specific parsers may still differ.
caption-sideOnly top and bottom are retained. Logical and side-position caption values have no separate implementation.
caret-colorA search across src found no style application, corresponding field, or control-painting consumer; classification as paint-only does not mean the property is implemented.
chThe element apply path uses font measurements where possible, and fallback ratios when no callback exists. Other property-specific parsers may still differ.
clamp()Supports nested math, parentheses, arithmetic operator precedence and numeric type validation. Limited by each property's accepted types and the depth budget.
clearClears floats in block flow. Logical direction values have no corresponding mapping.
clipUsed only for absolute/fixed positioning. Supports consistent comma or space separators and auto edges.
clip-pathurl(SVG clipPath), path() and shape() are not implemented. Basic shapes and geometry boxes are normalized by Painter.
cmUsable only in properties that accept the value type. The consuming property determines the percentage basis. Physical units use 96 CSS px/in.
colorText color; also used by currentColor.
color()Includes conversion branches for predefined color spaces, with results clamped to 8-bit sRGB. Does not provide custom ICC profiles, a wide-gamut framebuffer or the full strict CSS Color grammar. Unknown spaces lack a reliable rejection branch, so acceptance does not establish support.
color-mix()Computes weighted mixtures of two colors, but oklab/oklch actually share Lab interpolation. Splits on bare commas, limiting nested color functions and color functions containing commas. Alpha is directly weighted and weights are normalized; this is not the full premultiplied-alpha or attenuation model for weights totaling less than 100%. Hue interpolation methods are not modeled; other spaces fall back to sRGB.
column-countReal block and text multicolumn layout is implemented. KUI_DISABLE_MULTICOL=ON is a scope marker with no consuming #if branch; it must not be interpreted as disabling multicolumn layout at runtime. Complex nesting and fragmentation do not establish full specification coverage.
column-fillWith a definite height, auto fills columns sequentially. With an indefinite height, auto still falls back to balancing. balance-all is not retained as a distinct value.
column-gapUsed by flex and grid; column-gap also serves multicolumn layout. Affine calc expressions retain px and percentage terms. Non-affine math functions still use a two-sample approximation. normal is zero in flex/grid and 1em for the multicolumn column gap.