diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index aceab88..cf6f7f7 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -48,6 +48,10 @@ jobs:
run: |
node tools/render-hidden-text.mjs
python tools/verify-hidden-text.py
+ - name: Verify SVG cascade and inset-shadow paint from the installed package
+ run: |
+ node tools/render-engine-paint.mjs
+ python tools/verify-engine-paint.py
- name: Verify inline wrapping from the installed package
run: |
npm run render:inline
@@ -65,7 +69,7 @@ jobs:
npm run render:fonts -- --package-root output/font-baseline-consumer/node_modules/fullbleed --out output/font-baseline
npm run verify:fonts -- --evidence-root output/font-baseline --allow-legacy-metadata
npm run render:fonts
- npm run verify:fonts -- --baseline output/font-baseline --reviewed-layout test/fixtures/inline-layout-2.5.24.json
+ npm run verify:fonts -- --baseline output/font-baseline --reviewed-layout test/fixtures/inline-layout-2.5.29.json
- name: Verify installed custom font families against explicit faces
run: |
npm run render:families
@@ -109,6 +113,7 @@ jobs:
output/standard-fonts/
output/engine-regressions/
output/hidden-text/
+ output/engine-paint/
output/component-verification/
retention-days: 7
@@ -150,7 +155,7 @@ jobs:
run: |
python -m pip install pypdf==6.19.0 pypdfium2==5.14.0 fonttools==4.65.0 pillow==12.3.0
npm run render:fonts
- npm run verify:fonts -- --reviewed-layout test/fixtures/inline-layout-2.5.24.json
+ npm run verify:fonts -- --reviewed-layout test/fixtures/inline-layout-2.5.29.json
npm run render:families
npm run verify:families
npm run render:inline
@@ -161,6 +166,8 @@ jobs:
python tools/verify-engine-regressions.py
node tools/render-hidden-text.mjs
python tools/verify-hidden-text.py
+ node tools/render-engine-paint.mjs
+ python tools/verify-engine-paint.py
python tools/verify-components.py
- uses: actions/upload-artifact@v4
if: always() && matrix.os == 'windows-latest' && matrix.node == '22'
@@ -173,6 +180,7 @@ jobs:
output/standard-fonts/
output/engine-regressions/
output/hidden-text/
+ output/engine-paint/
output/component-verification/
retention-days: 7
- uses: actions/upload-artifact@v4
@@ -195,7 +203,7 @@ jobs:
name: Browser package (${{ matrix.browser }})
needs: build
runs-on: ubuntu-latest
- timeout-minutes: 15
+ timeout-minutes: 25
strategy:
fail-fast: false
matrix:
@@ -237,6 +245,7 @@ jobs:
- run: python tools/check-html-export.py --browser ${{ matrix.browser }} --label ci
- run: python tools/verify-engine-regressions.py output/browser-${{ matrix.browser }}-ci --browser
- run: python tools/verify-hidden-text.py output/browser-${{ matrix.browser }}-ci --browser
+ - run: python tools/verify-engine-paint.py output/browser-${{ matrix.browser }}-ci --browser
- uses: actions/upload-artifact@v4
if: always()
with:
diff --git a/README.md b/README.md
index 0e5c6fd..4874704 100644
--- a/README.md
+++ b/README.md
@@ -20,8 +20,8 @@ download a PDF. Each starter also includes a ZIP for local development.
Using Vue? The [Vue and TypeScript starter](examples/vue) includes editable
templates, automatic previews, downloads, and a reusable `usePdfPreview` composable.
-This is an optional integration around the published **Fullbleed 2.5.24** engine.
-The package has its own version, **0.7.0**. Node applications can use a shared
+This is an optional integration around the published **Fullbleed 2.5.29** engine.
+The package has its own version, **0.7.1**. Node applications can use a shared
render queue to bound active renders and waiting requests, include queue time in
deadlines, cancel waiting jobs, and stop rendering cleanly during shutdown.
The browser entry renders in a Web Worker, and the Node API supports worker and
@@ -31,14 +31,20 @@ process isolation. See the [browser guide](docs/browser.md),
[font-family checks](https://github.com/fullbleed-engine/fullbleed-node/blob/main/docs/font-families.md), and
[embedded-font checks](https://github.com/fullbleed-engine/fullbleed-node/blob/main/docs/font-subsets.md) for the retained fixtures.
-Version 0.7.0 adds [static HTML export with or without styles](docs/components.md#export-html-with-or-without-styles):
+Version 0.7.1 brings the stable engine's SVG stylesheet and inset-shadow fixes to
+Node.js and browser workers. The [paint checks](docs/engine-2.5.29.md) cover
+stylesheet selectors, inherited SVG colors and opacity, and clipped, blurred,
+translated and negative-spread inset shadows. The component and static HTML APIs
+remain unchanged.
+
+Version 0.7.0 added [static HTML export with or without styles](docs/components.md#export-html-with-or-without-styles):
`doc.toHtml({ includeStyles: true })` embeds the document stylesheet;
`doc.toHtml({ includeStyles: false })` removes CSS while preserving class names
and content. Documents, fragments and JSX use the same export options. Importing
`fullbleed/ui` does not load the PDF renderer or add JavaScript to the output.
Version 0.6.0 added component authoring, attached stylesheets and explicit document
-rendering. The engine remains pinned to 2.5.24. The [component guide](docs/components.md)
+rendering. The [component guide](docs/components.md)
includes zero-build JavaScript and TSX versions of a complete designed invoice.
Version 0.5.1 brought the engine's hidden-text and font-decoration fixes to both
@@ -67,7 +73,7 @@ Use Node.js 22 or newer. Install the [npm package](https://www.npmjs.com/package
npm install fullbleed
```
-For a version-pinned installation, use `npm install --save-exact fullbleed@0.7.0`.
+For a version-pinned installation, use `npm install --save-exact fullbleed@0.7.1`.
Package archives and retained PDF/PNG evidence are attached to each
[GitHub release](https://github.com/fullbleed-engine/fullbleed-node/releases).
The [installation verification records](https://github.com/fullbleed-engine/fullbleed-node/tree/main/verification)
diff --git a/docs/components.md b/docs/components.md
index 3ed9dbc..cf61c80 100644
--- a/docs/components.md
+++ b/docs/components.md
@@ -32,7 +32,7 @@ await writeFile('invoice.pdf', result.pdf);
await writeFile('invoice.png', result.previews[0]);
```
-Save this as `invoice.mjs`, install `fullbleed@0.7.0`, and run `node invoice.mjs`
+Save this as `invoice.mjs`, install `fullbleed@0.7.1`, and run `node invoice.mjs`
with Node 22 or newer. Functions need no special wrapper. The optional
`component(fn)` identity helper preserves the function and its types.
@@ -233,7 +233,11 @@ stylesheets; use raw CSS for nested at-rules.
`document.toCss(...overrides)` returns layout defaults, document styles and then
overrides in cascade order. `document.toHtml()` returns HTML only. When calling
the underlying API yourself, pass both: `renderPdf({ html: doc.toHtml(), css: doc.toCss() })`.
-The pinned PDF engine does not load embedded stylesheets or remote CSS implicitly.
+Starting with 0.7.1, the pinned engine also reads supported static `
1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-local-style-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-screen-style-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-screen-style-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-plain-text-style-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-plain-text-style-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-print-style-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-print-style-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-nested-screen-media-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-nested-screen-media-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-source-order-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}.mark {fill:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-source-order-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}.mark {fill:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-preferred-set-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-preferred-set-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}svg {color:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}svg {color:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-opacity-replacement-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-opacity-replacement-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-important-opacity-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-important-opacity-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-cdata-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-cdata-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-group-fill-opacity-replacement-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-group-fill-opacity-replacement-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-group-opacity-overlap-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-group-opacity-overlap-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-nested-group-opacity-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-nested-group-opacity-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-root-opacity-once-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-root-opacity-once-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-local-currentcolor-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-local-currentcolor-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-paint-alpha-replacement-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-paint-alpha-replacement-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-invalid-opacity-fallback-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-invalid-opacity-fallback-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-stop-important-priority-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-stop-important-priority-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-custom-property-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}.brand {--ink:#d00000} .mark {fill:var(--ink)}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-custom-property-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}.brand {--ink:#d00000} .mark {fill:var(--ink)}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-invalid-variable-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}svg {--bad:invalid} .mark {fill:#0060c0;fill:var(--bad)}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-invalid-variable-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}svg {--bad:invalid} .mark {fill:#0060c0;fill:var(--bad)}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-symbol-opacity-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-symbol-opacity-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-root-inherit-opacity-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-root-inherit-opacity-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-layer-normal-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}@layer first,second; @layer first {.mark {fill:#0060c0}} @layer second {.mark {fill:#d00000}}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-layer-normal-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}@layer first,second; @layer first {.mark {fill:#0060c0}} @layer second {.mark {fill:#d00000}}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-layer-important-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}@layer first,second; @layer first {.mark {fill:#d00000 !important}} @layer second {.mark {fill:#0060c0 !important}}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-layer-important-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}@layer first,second; @layer first {.mark {fill:#d00000 !important}} @layer second {.mark {fill:#0060c0 !important}}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-layer-revert-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}@layer first,second; @layer first {.mark {fill:#d00000}} @layer second {.mark {fill:#0060c0;fill:revert-layer}}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-document-layer-revert-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}@layer first,second; @layer first {.mark {fill:#d00000}} @layer second {.mark {fill:#0060c0;fill:revert-layer}}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-child-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 96,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-child-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 96,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-fill-initial-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-fill-initial-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-fill-unset-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-fill-unset-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-root-opacity-attribute-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-root-opacity-attribute-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-child-inherits-root-opacity-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-child-inherits-root-opacity-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-child-inherits-root-and-html-opacity-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 249,
+ 223,
+ 223
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-child-inherits-root-and-html-opacity-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 249,
+ 223,
+ 223
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-alpha-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-alpha-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-stroke-alpha-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-stroke-alpha-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 231,
+ 128,
+ 128
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-alpha-child-override-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 96,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-currentcolor-alpha-child-override-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 96,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-transparent-mask-color-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-transparent-mask-color-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-transparent-mask-overlay-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-transparent-mask-overlay-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-transparent-mask-group-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-transparent-mask-group-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-stroke-opacity-replacement-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-stroke-opacity-replacement-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-use-inheritance-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}use {fill:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-use-inheritance-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}use {fill:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-sibling-selector-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}svg > g + rect {fill:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-svg-sibling-selector-filter-fallback",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}svg > g + rect {fill:#d00000}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 208,
+ 0,
+ 0
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-external-svg-isolation-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}.mark {fill:#d00000 !important}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 0,
+ 96,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "svg-css-external-svg-root-opacity-inheritance-default",
+ "family": "svg-cascade",
+ "html": " 1042
",
+ "css": "@page {size:300pt 200pt;margin:0} html,body {margin:0;padding:0} svg {display:block} p {margin:0}body {font-family:Inter}",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 300,
+ 200
+ ],
+ "text": "1042",
+ "probes": [
+ {
+ "x": 24,
+ "y": 24,
+ "expected": [
+ 243,
+ 192,
+ 192
+ ],
+ "tolerance": 2
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-negative-hidden-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 8px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-negative-hidden-block-clear-reference",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: none; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": []
+ }
+ },
+ {
+ "name": "inset-negative-hidden-block-clear-region",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 8px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [],
+ "clearRegion": {
+ "reference": "inset-negative-hidden-block-clear-reference",
+ "start": 0
+ }
+ }
+ },
+ {
+ "name": "inset-negative-hidden-rounded-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 8px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 21,
+ "y": 21,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-negative-hidden-rounded-block-clear-reference",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: none; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": []
+ }
+ },
+ {
+ "name": "inset-negative-hidden-rounded-block-clear-region",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 8px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [],
+ "clearRegion": {
+ "reference": "inset-negative-hidden-rounded-block-clear-reference",
+ "start": 0
+ }
+ }
+ },
+ {
+ "name": "inset-negative-left-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 35,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-negative-right-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset -24px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 125,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-positive-offset-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 12px 0 0 8px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 45,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-diagonal-offset-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 24px 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 60,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 90,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-diagonal-offset-block-clear-reference",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: none; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": []
+ }
+ },
+ {
+ "name": "inset-diagonal-offset-block-clear-region",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 24px 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [],
+ "clearRegion": {
+ "reference": "inset-diagonal-offset-block-clear-reference",
+ "start": 144
+ }
+ }
+ },
+ {
+ "name": "inset-large-left-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 100px 0 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 105,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 125,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-large-right-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset -100px 0 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 45,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-large-down-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 0 60px 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 65,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 90,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-large-up-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 0 -60px 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 45,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 90,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-rounded-offset-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 20px 8px 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 45,
+ "y": 30,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 40,
+ "y": 40,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 65,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 21,
+ "y": 21,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-elliptical-negative-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 6px 14px 12px 20px / 12px 20px 6px 14px;\n box-shadow: inset 24px 12px 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 45,
+ "y": 25,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-collapsed-hole-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 20px 0 0 50px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 21,
+ "y": 21,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-translated-away-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 160px 0 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 21,
+ "y": 21,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-translated-away-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 160px 0 12px 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 21,
+ "y": 21,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-negative-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 0 12px -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 23,
+ "y": 60,
+ "expected": [
+ 12,
+ 96,
+ 162
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 29,
+ "y": 60,
+ "expected": [
+ 49,
+ 126,
+ 187
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 35,
+ "y": 60,
+ "expected": [
+ 104,
+ 170,
+ 223
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 41,
+ "y": 60,
+ "expected": [
+ 136,
+ 195,
+ 244
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 47,
+ "y": 60,
+ "expected": [
+ 143,
+ 201,
+ 249
+ ],
+ "tolerance": 10
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-empty-control-block",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 0 0 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 21,
+ "y": 21,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-negative-hidden-cell",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 8px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-negative-hidden-cell-clear-reference",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: none; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": []
+ }
+ },
+ {
+ "name": "inset-negative-hidden-cell-clear-region",
+ "family": "inset-clear-region",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 8px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 300,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [],
+ "clearRegion": {
+ "reference": "inset-negative-hidden-cell-clear-reference",
+ "start": 0
+ }
+ }
+ },
+ {
+ "name": "inset-negative-left-cell",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 0 0 -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 35,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-positive-offset-cell",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 12px 0 0 8px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 45,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-large-left-cell",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 100px 0 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 25,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 105,
+ "y": 60,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 125,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-large-down-cell",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 0 60px 0 0 #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 80,
+ "y": 25,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 65,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 90,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-negative-cell",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 20px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 0 12px -12px #01579b; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 80,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 135,
+ "y": 60,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 10,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 150,
+ "y": 60,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 10,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 80,
+ "y": 110,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 23,
+ "y": 60,
+ "expected": [
+ 12,
+ 96,
+ 162
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 29,
+ "y": 60,
+ "expected": [
+ 49,
+ 126,
+ 187
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 35,
+ "y": 60,
+ "expected": [
+ 104,
+ 170,
+ 223
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 41,
+ "y": 60,
+ "expected": [
+ 136,
+ 195,
+ 244
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 47,
+ "y": 60,
+ "expected": [
+ 143,
+ 201,
+ 249
+ ],
+ "tolerance": 10
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-translated-away-page-start",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 0px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 160px 0 12px 0 #01579b; }\n.box { position: absolute; left: 0px; top: 0px; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 5,
+ "y": 40,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 60,
+ "y": 40,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 115,
+ "y": 40,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 60,
+ "y": 5,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 1,
+ "y": 1,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 130,
+ "y": 40,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 60,
+ "y": 90,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-negative-page-start",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 0px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 0 12px -12px #01579b; }\n.box { position: absolute; left: 0px; top: 0px; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 60,
+ "y": 40,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 115,
+ "y": 40,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 130,
+ "y": 40,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 60,
+ "y": 90,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 3,
+ "y": 40,
+ "expected": [
+ 12,
+ 96,
+ 162
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 9,
+ "y": 40,
+ "expected": [
+ 49,
+ 126,
+ 187
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 15,
+ "y": 40,
+ "expected": [
+ 104,
+ 170,
+ 223
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 21,
+ "y": 40,
+ "expected": [
+ 136,
+ 195,
+ 244
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 27,
+ "y": 40,
+ "expected": [
+ 143,
+ 201,
+ 249
+ ],
+ "tolerance": 10
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-translated-away-page-end",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 40px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 20px;\n box-shadow: inset 160px 0 12px 0 #01579b; }\n.box { position: absolute; left: 40px; top: 40px; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 45,
+ "y": 80,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 100,
+ "y": 80,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 155,
+ "y": 80,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 100,
+ "y": 45,
+ "expected": [
+ 1,
+ 87,
+ 155
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 41,
+ "y": 41,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 30,
+ "y": 80,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 100,
+ "y": 30,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ }
+ ]
+ }
+ },
+ {
+ "name": "inset-blur-negative-page-end",
+ "family": "inset-shadow",
+ "html": "",
+ "css": "@page { size: 160px 120px; margin: 0; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\nhtml, body { background: white; }\n.stage { padding: 40px; width: 160px; height: 120px; }\ntable { border-collapse: separate; border-spacing: 0; }\n.box { width: 120px; height: 80px; background: #90caf9; border-radius: 0;\n box-shadow: inset 24px 0 12px -12px #01579b; }\n.box { position: absolute; left: 40px; top: 40px; }\n",
+ "pages": 1,
+ "previewDpi": 96,
+ "defaultStyles": false,
+ "expected": {
+ "pageSizePt": [
+ 120,
+ 90
+ ],
+ "text": "",
+ "probes": [
+ {
+ "x": 100,
+ "y": 80,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 155,
+ "y": 80,
+ "expected": [
+ 144,
+ 202,
+ 249
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 30,
+ "y": 80,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 100,
+ "y": 30,
+ "expected": [
+ 255,
+ 255,
+ 255
+ ],
+ "tolerance": 3
+ },
+ {
+ "x": 43,
+ "y": 80,
+ "expected": [
+ 12,
+ 96,
+ 162
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 49,
+ "y": 80,
+ "expected": [
+ 49,
+ 126,
+ 187
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 55,
+ "y": 80,
+ "expected": [
+ 104,
+ 170,
+ 223
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 61,
+ "y": 80,
+ "expected": [
+ 136,
+ 195,
+ 244
+ ],
+ "tolerance": 10
+ },
+ {
+ "x": 67,
+ "y": 80,
+ "expected": [
+ 143,
+ 201,
+ 249
+ ],
+ "tolerance": 10
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/test/fixtures/hidden-text-2.5.24.json b/test/fixtures/hidden-text-2.5.24.json
index 3bbe4e9..a0d9c77 100644
--- a/test/fixtures/hidden-text-2.5.24.json
+++ b/test/fixtures/hidden-text-2.5.24.json
@@ -1,6 +1,6 @@
{
"schema": "fullbleed.javascript.hidden-text-fixtures.v1",
- "engineVersion": "2.5.24",
+ "engineVersion": "2.5.29",
"sourceCommit": "6251674614fff698ce685733e81bf481e6e81313",
"sourceReview": "https://github.com/fullbleed-engine/fullbleed-official/pull/79",
"sourceVerificationSha256": "7d5a431ca20aa50d94022494a0d6acdbfd73632aca7159f6aa60a0cfc541a7cd",
@@ -1604,5 +1604,7 @@
]
}
}
- ]
+ ],
+ "baselineEngineVersion": "2.5.24",
+ "compatibilityScope": "The existing source, control and output hashes are unchanged. Engine 2.5.29 must reproduce them before release."
}
diff --git a/test/fixtures/inline-layout-2.5.29.json b/test/fixtures/inline-layout-2.5.29.json
new file mode 100644
index 0000000..c09fbc0
--- /dev/null
+++ b/test/fixtures/inline-layout-2.5.29.json
@@ -0,0 +1,71 @@
+{
+ "schema": "fullbleed.reviewed_inline_layout.v1",
+ "engineVersion": "2.5.29",
+ "source": "https://crates.io/crates/fullbleed/2.5.29",
+ "reason": "All reviewed input, font, PDF, preview, independent raster and text hashes remain unchanged from the prior engine gate. The candidate must match these controls.",
+ "fonts": [
+ {
+ "name": "Inter-Variable.ttf",
+ "path": "fonts/Inter-Variable.ttf",
+ "bytes": 876576,
+ "sha256": "29160a80ff49ddcab2c97711247e08b1fab27a484a329ce8b813d820dc559031"
+ },
+ {
+ "name": "DMSerifDisplay-Regular.ttf",
+ "path": "fonts/DMSerifDisplay-Regular.ttf",
+ "bytes": 76580,
+ "sha256": "8cc3643535edf039aa5d95440a8542735e9197e4f4b8d9303e980fefbf5ab616"
+ },
+ {
+ "name": "DMSerifDisplay-Italic.ttf",
+ "path": "fonts/DMSerifDisplay-Italic.ttf",
+ "bytes": 71208,
+ "sha256": "df74c0ac387baeaeb0fe4f2324e1668e6a3ed8c09cd9796fe162c71753e19e45"
+ },
+ {
+ "name": "BebasNeue-Regular.ttf",
+ "path": "fonts/BebasNeue-Regular.ttf",
+ "bytes": 61400,
+ "sha256": "08e4623805102d819f58601e46e345648846075e363b2ceb23313c2d1c83ec73"
+ },
+ {
+ "name": "NotoSansMath-Regular.ttf",
+ "path": "fonts/NotoSansMath-Regular.ttf",
+ "bytes": 590904,
+ "sha256": "80b61fd613d3519197e64fff6f7e71fdc7f3e6526440ea4115b554ef7fd59af7"
+ }
+ ],
+ "fixtures": {
+ "invoice": {
+ "htmlSha256": "195725eeeb32c521e19b47dbacbb55048bebb6df8566ab135cdc41fbf33fe57a",
+ "cssSha256": "cda22b39ab1f7a1eeac7cd76d162b05cd3568c2430c099123ba30a2fbd58a296",
+ "pages": 1,
+ "text": "Northstar\nStudio\nD E S I G N W I T H D I R E C T I O N\nB R A N D\nD I G I T A L\nE X P E R I E N C E S\nT H A T M A T T E R .\n42 Cedar Avenue\nPortland, OR 97205\nhello@example.invalid\nnorthstar.example.invalid\nINVOICE\nGOOD WORK.\nCLEAR DETAILS.\nLET'S MAKE\nWHAT'S NEXT.\nP R E P A R E D F O R\nMaple & Finch\nAttn. Avery Morgan\nPortland, Oregon\nT H E P R O J E C T\nAutumn launch\nBrand workshop, digital\ndesign & handoff\nI N V O I C E N S - 1 0 4 2\nIssued \u00b7 01 October 2026\nDue \u00b7 31 October 2026\nCurrency \u00b7 USD\nDESCRIPTION HOURS RATE AMOUNT\nDiscovery & brand workshop\nPositioning, priorities, and a clear creative direction\n8 $125.00 $1,000.00\nDigital design & implementation\nA cohesive visual system, from layout to launch\n6 $95.00 $570.00\nReview & studio handoff\nFinal refinements, documentation, and delivery\n2 $150.00 $300.00\nA little clarity.\nA lot of possibility.\nThank you for inviting us\nto help shape your next chapter.\nSubtotal $1,870.00\nTax \u00b7 0% in this sample $0.00\nT O T A L D U E \u00b7 U S D\n$1,870.00\nP A Y M E N T D E T A I L S\nReference NS-1042 with your payment.\nPayment instructions are supplied separately.\nA N O T E F R O M T H E S T U D I O\nQuestions about a line item?\nWrite to hello@example.invalid.\nNORTHSTAR STUDIO / INVOICE NS-1042 FICTIONAL SAMPLE \u00b7 01 / 01",
+ "pdfSha256": "3078d155f30536f5ad721f7be3c241cd78661ae41249131fc0fd65f37f23e408",
+ "previewsSha256": [
+ "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7"
+ ],
+ "pdfiumPixelSha256": [
+ "d71293741974bef9abffbdf5d88b0827b48fe6523f8d9baf46f46fe1000895a5"
+ ]
+ },
+ "report": {
+ "htmlSha256": "46b0e975d43914c8b4492218feae09ea0ad684091a9f9ee3b18f66a87202e521",
+ "cssSha256": "519591ae75c239ec602324f008dd99108ebeae0b9306df7215fa5f0442905473",
+ "pages": 3,
+ "text": "Common Ground\nC O M M U N I T Y T R U S T\nP E O P L E\nP L A C E S\nP O S S I B I L I T I E S\nCOMMON\nGROUND\nStronger places.\nMore room\nfor everyone.\n2026\nC O M M U N I T Y R E V I E W\nA Y E A R\nI N C O M M O N\n0 2 / O U R R E A C H\nSmall actions,\nshared outcomes.\n0 3 / O U R R E S O U R C E S\nWhere the\nsupport goes.\nCOMMON GROUND / COMMUNITY REVIEW FICTIONAL DATA \u00b7 01 / 03Common Ground 0 2 / O U R R E A C H\nA P L A C E T O B E G I N\nSmall actions.\nShared outcomes.\nAn open door, a working kitchen, a garden plot. This year, our fictional neighborhood\nprograms connected more people with practical spaces to learn, make, and belong.\n1,240\nhouseholds took part\nacross four neighborhoods\n4,860\nvolunteer hours\nshared across our programs\n12\ncommunity spaces\nkept open and active\nMore neighbors, each quarter.\nP A R T I C I P A T I N G H O U S E H O L D S\n420\n560\n790\n980\nQ1 Q2 Q3 Q4\nQuarterly participation counts; a household can participate in more than one quarter.\n\u201cBelonging starts\nwith somewhere\nto show up.\u201d\nO U R P R O G R A M P R I N C I P L E\nBuilt around daily life.\nEvening workshops, shared meals, and weekend garden\nsessions made participation easier for people with different\nschedules. The next step is a longer opening window at\neach neighborhood space.\nILLUSTRATIVE ANNUAL REVIEW / NOT AN ACTUAL ORGANIZATION 02 / 03Common Ground 0 3 / O U R R E S O U R C E S\nF O L L O W T H E S U P P O R T\nGood intentions.\nClear allocations.\nA practical view of this fictional operating budget. Every category supports the same\naim: useful places, open to more people.\nPROGRAM AREA ALLOCATION SHARE\nNeighborhood spaces $168,000.00 40%\nLearning & workshops $126,000.00 30%\nShared meals & gardens $84,000.00 20%\nAccess & transport $42,000.00 10%\nT O T A L O P E R A T I N G A L L O C A T I O N \u00b7 U S D $420,000.00\nWhat we count.\nHouseholds are deduplicated within the annual program\nregister. Volunteer hours include recorded event and\nmaintenance time. Space counts refer to year-round\nlocations, not individual events.\nQuarterly counts show participation within each period and\nmust not be added to estimate unique annual reach.\nWhat comes next.\nExtend evening access. Improve step-free entrances.\nPublish a simple monthly view of program activity and\nspending.\nA shared tomorrow\nis built in the everyday.\nCOMMON GROUND / METHODS & ALLOCATIONS FICTIONAL DATA \u00b7 03 / 03",
+ "pdfSha256": "139df89824e6a73c13ff62f1237bb8eb9f71e790dcbd051b1bb713ed2bc47802",
+ "previewsSha256": [
+ "33ee3398d59f6836368cdab0f3c725c3cf12cbf2f9f3a3ac6a6b168f6c1886f5",
+ "c8fe5102e9219962ea068201be0a6730cb37de797649f4b5f44478433e79b018",
+ "a3e8acbc7ba4147c56d45b606d3974ec4aecbda1b5d7362451e5e8890491dc7d"
+ ],
+ "pdfiumPixelSha256": [
+ "c7dc8db8fc08a78f74c4477629e0f68f3b34aa37b9b9eba46a977805933d3f03",
+ "c5e9d15bae4f208ecb0466ba3521e22c1f98c83aeab0e1112deec2fe20d8a711",
+ "05d2ebd36749c7421db665a5bba2ab36559e691b5bc5570ebc095d81af2585b7"
+ ]
+ }
+ },
+ "baselineSource": "https://crates.io/crates/fullbleed/2.5.24"
+}
diff --git a/test/test_release.py b/test/test_release.py
index 38da756..86aff17 100644
--- a/test/test_release.py
+++ b/test/test_release.py
@@ -322,5 +322,65 @@ def test_missing_installed_export_evidence_is_rejected(self):
release_check.verify_html_export_evidence(self.report)
+class PaintReleaseEvidenceTests(unittest.TestCase):
+ def setUp(self):
+ data = release_check.ENGINE_PAINT_SOURCE.read_bytes()
+ fixture = json.loads(data)
+ digest = hashlib.sha256(data).hexdigest()
+ names = sorted(case['name'] for case in fixture['cases'])
+ families = sorted({case['family'] for case in fixture['cases']})
+ self.report = dict(package_version='0.7.1', engine_version=fixture['engineVersion'], package_sha256='a'*64,
+ engine_paint=[dict(platform=platform, ok=True, package_version='0.7.1',
+ engine_version=fixture['engineVersion'], tarball_sha256='a'*64, source_sha256=digest,
+ negative_control=False, cases=2*len(names), families=families, case_names=names)
+ for platform in ['win32', 'linux']],
+ browser_matrix=[dict(browser=browser, paint_ok=True, paint_cases=len(names),
+ paint_source_sha256=digest, paint_negative_control=False) for browser in ['chrome', 'firefox', 'webkit']],
+ native_wasi_fixtures=[dict(name=name, nativeWasiPdfEqual=True, nativeWasiPreviewsEqual=True) for name in names])
+
+ def test_complete_paint_evidence_is_accepted(self):
+ release_check.verify_engine_paint_evidence(self.report)
+
+ def test_missing_or_duplicate_platform_is_rejected(self):
+ self.report['engine_paint'][0]['platform'] = 'linux'
+ with self.assertRaisesRegex(ValueError, 'Windows and Linux'):
+ release_check.verify_engine_paint_evidence(self.report)
+
+ def test_wrong_package_or_incomplete_evidence_is_rejected(self):
+ for key, value in [('ok', False), ('package_version', '0.7.0'), ('engine_version', '2.5.24'),
+ ('tarball_sha256', 'b'*64), ('source_sha256', 'b'*64), ('negative_control', True),
+ ('cases', 1), ('families', ['svg-cascade']), ('case_names', [])]:
+ with self.subTest(key=key):
+ self.setUp()
+ self.report['engine_paint'][0][key] = value
+ with self.assertRaisesRegex(ValueError, 'Paint inspection is incomplete'):
+ release_check.verify_engine_paint_evidence(self.report)
+
+ def test_browser_gaps_and_negative_controls_are_rejected(self):
+ for key, value in [('paint_ok', False), ('paint_cases', 0), ('paint_source_sha256', 'b'*64),
+ ('paint_negative_control', True)]:
+ with self.subTest(key=key):
+ self.setUp()
+ self.report['browser_matrix'][0][key] = value
+ with self.assertRaisesRegex(ValueError, 'Browser paint inspection'):
+ release_check.verify_engine_paint_evidence(self.report)
+ self.setUp()
+ self.report['browser_matrix'].pop()
+ with self.assertRaisesRegex(ValueError, 'all three browser'):
+ release_check.verify_engine_paint_evidence(self.report)
+
+ def test_native_gaps_and_differences_are_rejected(self):
+ for change in ['missing', 'duplicate', 'pdf', 'preview']:
+ with self.subTest(change=change):
+ self.setUp()
+ rows = self.report['native_wasi_fixtures']
+ if change == 'missing': rows.pop()
+ elif change == 'duplicate': rows.append(dict(rows[-1]))
+ elif change == 'pdf': rows[-1]['nativeWasiPdfEqual'] = False
+ else: rows[-1]['nativeWasiPreviewsEqual'] = False
+ with self.assertRaisesRegex(ValueError, 'Native/WASI paint comparison'):
+ release_check.verify_engine_paint_evidence(self.report)
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/tools/check-browser.py b/tools/check-browser.py
index cf325cc..af1c572 100644
--- a/tools/check-browser.py
+++ b/tools/check-browser.py
@@ -189,6 +189,7 @@ def check(name, condition):
record = {'ok': True, 'checkedAt': datetime.now(timezone.utc).isoformat(), 'browserEngine': args.browser,
'browser': browser.version, 'playwright': version('playwright'), 'pypdf': version('pypdf'), 'package': prepared['package'],
'engine': prepared['engine'], 'installedTarballSha256': prepared['installedTarballSha256'],
+ 'enginePaintSourceSha256': prepared['enginePaintSourceSha256'],
'contentSecurityPolicy': policy, 'mainThreadWebAssemblyDisabled': True, 'checks': checks,
'documents': documents, 'workerCalls': page.evaluate('harness.stats()'), 'network': network, 'serverRequests': requests,
'pageErrors': errors, 'componentCases': len(component_cases), 'componentEditorDownload': True,
diff --git a/tools/check-installed-components.mjs b/tools/check-installed-components.mjs
index e608577..71dca40 100644
--- a/tools/check-installed-components.mjs
+++ b/tools/check-installed-components.mjs
@@ -37,6 +37,9 @@ try {
assert.equal(styled, tsxCases[index].node.toHtml({ includeStyles: true }), name + ': JSX styled HTML');
assert.equal(unstyled, tsxCases[index].node.toHtml({ includeStyles: false }), name + ': JSX unstyled HTML');
assert(!/