diff --git a/frontend/playwright/data/render-wasm/get-file-blurs.json b/frontend/playwright/data/render-wasm/get-file-blurs.json new file mode 100644 index 0000000000..1b7e094606 --- /dev/null +++ b/frontend/playwright/data/render-wasm/get-file-blurs.json @@ -0,0 +1,6261 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "variants/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "render-wasm/v1", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:team-id": "~ueba8fa2e-4140-8084-8005-448635d7a724", + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true, + "~:can-read": true, + "~:is-logged": true + }, + "~:has-media-trimmed": false, + "~:comment-thread-seqn": 0, + "~:name": "BLURS", + "~:revn": 90, + "~:modified-at": "~m1755757136543", + "~:vern": 0, + "~:id": "~uaa0a383a-7553-808a-8006-ae1237b52cf9", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content-v2", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content-v2", + "0004-clean-shadow-color", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0007-clear-invalid-strokes-and-fills-v2", + "0008-fix-library-colors-v4", + "0009-clean-library-colors", + "0009-add-partial-text-touched-flags", + "0010-fix-swap-slots-pointing-non-existent-shapes" + ] + }, + "~:version": 67, + "~:project-id": "~ueba8fa2e-4140-8084-8005-448635da32b4", + "~:created-at": "~m1755756133076", + "~:data": { + "~:pages": [ + "~uaa0a383a-7553-808a-8006-ae1237b52cfa" + ], + "~:pages-index": { + "~uaa0a383a-7553-808a-8006-ae1237b52cfa": { + "~:objects": { + "~u00000000-0000-0000-0000-000000000000": { + "~#shape": { + "~:y": 0, + "~:hide-fill-on-export": false, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:name": "Root Frame", + "~:width": 0.01, + "~:type": "~:frame", + "~:points": [ + { + "~#point": { + "~:x": 0, + "~:y": 0 + } + }, + { + "~#point": { + "~:x": 0.01, + "~:y": 0 + } + }, + { + "~#point": { + "~:x": 0.01, + "~:y": 0.01 + } + }, + { + "~#point": { + "~:x": 0, + "~:y": 0.01 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u00000000-0000-0000-0000-000000000000", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 0, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 0, + "~:y": 0, + "~:width": 0.01, + "~:height": 0.01, + "~:x1": 0, + "~:y1": 0, + "~:x2": 0.01, + "~:y2": 0.01 + } + }, + "~:fills": [ + { + "~:fill-color": "#FFFFFF", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 0.01, + "~:flip-y": null, + "~:shapes": [ + "~u32f7cd92-fbab-8057-8006-ae15abf4a0b8", + "~u32f7cd92-fbab-8057-8006-ae15abf4e9f1", + "~u32f7cd92-fbab-8057-8006-ae15abf4e9f2", + "~u32f7cd92-fbab-8057-8006-ae15abf4e9f3", + "~u13fc1849-119a-8028-8006-ae1488974651", + "~u13fc1849-119a-8028-8006-ae148b39a12f", + "~u13fc1849-119a-8028-8006-ae148e8d3b46", + "~u13fc1849-119a-8028-8006-ae13f1cb571d", + "~u13fc1849-119a-8028-8006-ae13f3784f1e", + "~u13fc1849-119a-8028-8006-ae13f4cca089", + "~u13fc1849-119a-8028-8006-ae136831d5b7", + "~u13fc1849-119a-8028-8006-ae136831d5b8", + "~u13fc1849-119a-8028-8006-ae136831d5b9", + "~u13fc1849-119a-8028-8006-ae136eba457f", + "~u13fc1849-119a-8028-8006-ae136eba4580", + "~u13fc1849-119a-8028-8006-ae136eba4581", + "~u13fc1849-119a-8028-8006-ae13412799ff", + "~u13fc1849-119a-8028-8006-ae1349518986", + "~u13fc1849-119a-8028-8006-ae134c87eab3", + "~u13fc1849-119a-8028-8006-ae12821ccb55", + "~u13fc1849-119a-8028-8006-ae12821d0027", + "~u13fc1849-119a-8028-8006-ae12821d0028", + "~u13fc1849-119a-8028-8006-ae12718b9f98", + "~u13fc1849-119a-8028-8006-ae12718b9f99", + "~u13fc1849-119a-8028-8006-ae12718b9f9a", + "~u13fc1849-119a-8028-8006-ae1258ccf72b", + "~u13fc1849-119a-8028-8006-ae1250d028e4", + "~u13fc1849-119a-8028-8006-ae1255187d6b", + "~u13fc1849-119a-8028-8006-ae124bfbec46", + "~u13fc1849-119a-8028-8006-ae132783846c", + "~u13fc1849-119a-8028-8006-ae13c850aa54", + "~u13fc1849-119a-8028-8006-ae13d295949e", + "~u13fc1849-119a-8028-8006-ae13fe15f2e0", + "~u13fc1849-119a-8028-8006-ae13fe15f2e1", + "~u13fc1849-119a-8028-8006-ae13fe15f2e2", + "~u13fc1849-119a-8028-8006-ae1409412912", + "~u13fc1849-119a-8028-8006-ae1409412913", + "~u13fc1849-119a-8028-8006-ae1409412914", + "~u13fc1849-119a-8028-8006-ae144ea899a3", + "~u13fc1849-119a-8028-8006-ae145f7fe46e", + "~u13fc1849-119a-8028-8006-ae1466a3bd0a", + "~u13fc1849-119a-8028-8006-ae149cc8c2ef", + "~u13fc1849-119a-8028-8006-ae149cc8c2f0", + "~u13fc1849-119a-8028-8006-ae149cc8c2f1", + "~u13fc1849-119a-8028-8006-ae149cc8c2f2", + "~u13fc1849-119a-8028-8006-ae149fbf3112", + "~u13fc1849-119a-8028-8006-ae149fbf3113", + "~u13fc1849-119a-8028-8006-ae149fbf3114", + "~u13fc1849-119a-8028-8006-ae149fbf3115", + "~u32f7cd92-fbab-8057-8006-ae15272bde67" + ] + } + }, + "~u13fc1849-119a-8028-8006-ae149fbf3115": { + "~#shape": { + "~:y": 395.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "line-through", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "line-through", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1048.00002479553, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1240.99990725517, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1240.99990725517, + "~:y": 459.999978065491 + } + }, + { + "~#point": { + "~:x": 1048.00002479553, + "~:y": 459.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740ee896", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149fbf3115", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1048.00002479553, + "~:selrect": { + "~#rect": { + "~:x": 1048.00002479553, + "~:y": 395.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1048.00002479553, + "~:y1": 395.999996185303, + "~:x2": 1240.99990725517, + "~:y2": 459.999978065491 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae134c87eab3": { + "~#shape": { + "~:y": 506.000011596679, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 873.99999029541, + "~:y": 506.000011596679 + } + }, + { + "~#point": { + "~:x": 995.999991368293, + "~:y": 506.000011596679 + } + }, + { + "~#point": { + "~:x": 995.999991368293, + "~:y": 551.000011239051 + } + }, + { + "~#point": { + "~:x": 873.99999029541, + "~:y": 551.000011239051 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae1574093eb9", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae134c87eab3", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:outer", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 873.99999029541, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 873.99999029541, + "~:y": 506.000011596679, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 873.99999029541, + "~:y1": 506.000011596679, + "~:x2": 995.999991368293, + "~:y2": 551.000011239051 + } + }, + "~:fills": [ + { + "~:fill-opacity": 1, + "~:fill-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:keep-aspect-ratio": true, + "~:name": "sample" + } + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u32f7cd92-fbab-8057-8006-ae15abf4e9f1": { + "~#shape": { + "~:y": 621.999988236943, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 1285.00002199411, + "~:y": 621.999988236943 + } + }, + { + "~#point": { + "~:x": 1407.000023067, + "~:y": 621.999988236943 + } + }, + { + "~#point": { + "~:x": 1407.000023067, + "~:y": 666.999987879315 + } + }, + { + "~#point": { + "~:x": 1285.00002199411, + "~:y": 666.999987879315 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740bb692", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15abf4e9f1", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1285.00002199411, + "~:proportion": 1, + "~:shadow": [ + { + "~:color": { + "~:color": "#ec1313", + "~:opacity": 1 + }, + "~:spread": 0, + "~:offset-y": 20, + "~:style": "~:drop-shadow", + "~:blur": 0, + "~:hidden": false, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15c0bf263f", + "~:offset-x": 20 + } + ], + "~:selrect": { + "~#rect": { + "~:x": 1285.00002199411, + "~:y": 621.999988236943, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 1285.00002199411, + "~:y1": 621.999988236943, + "~:x2": 1407.000023067, + "~:y2": 666.999987879315 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149fbf3114": { + "~#shape": { + "~:y": 395.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1656.00000882149, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1848.99989128113, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1848.99989128113, + "~:y": 459.999978065491 + } + }, + { + "~#point": { + "~:x": 1656.00000882149, + "~:y": 459.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740ee895", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149fbf3114", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 3, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 1656.00000882149, + "~:selrect": { + "~#rect": { + "~:x": 1656.00000882149, + "~:y": 395.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1656.00000882149, + "~:y1": 395.999996185303, + "~:x2": 1848.99989128113, + "~:y2": 459.999978065491 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1409412914": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAACQGdEFZllRAIAAAAAAAAAAAAAAAAAAAAAAAAASkl3RAHAW0QCAAAAAAAAAAAAAAAAAAAAAAAAAACAf0QAgGlEAgAAAAAAAAAAAAAAAAAAAAAAAAACQGdEFZllRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 924.999996663628, + "~:y": 879.000019073486 + } + }, + { + "~#point": { + "~:x": 1021.99997282667, + "~:y": 879.000019073486 + } + }, + { + "~#point": { + "~:x": 1021.99997282667, + "~:y": 934.000022260568 + } + }, + { + "~#point": { + "~:x": 924.999996663628, + "~:y": 934.000022260568 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740d4831", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae1409412914", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 5, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 924.999996663628, + "~:y": 879.000019073486, + "~:width": 96.999976163042, + "~:height": 55.0000031870817, + "~:x1": 924.999996663628, + "~:y1": 879.000019073486, + "~:x2": 1021.99997282667, + "~:y2": 934.000022260568 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u32f7cd92-fbab-8057-8006-ae15abf4e9f2": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAA4LVEFJkjRAIAAAAAAAAAAAAAAAAAAAAAAAAApeS9RADAGUQCAAAAAAAAAAAAAAAAAAAAAAAAAP//wUQAgCdEAgAAAAAAAAAAAAAAAAAAAAAAAAAA4LVEFJkjRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 1454.99999582619, + "~:y": 614.999975403177 + } + }, + { + "~#point": { + "~:x": 1551.99997198923, + "~:y": 614.999975403177 + } + }, + { + "~#point": { + "~:x": 1551.99997198923, + "~:y": 669.999978590259 + } + }, + { + "~#point": { + "~:x": 1454.99999582619, + "~:y": 669.999978590259 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740c1c07", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15abf4e9f2", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:shadow": [ + { + "~:color": { + "~:color": "#ec1313", + "~:opacity": 1 + }, + "~:spread": 0, + "~:offset-y": 20, + "~:style": "~:drop-shadow", + "~:blur": 0, + "~:hidden": false, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15c0bf263f", + "~:offset-x": 20 + } + ], + "~:selrect": { + "~#rect": { + "~:x": 1454.99999582619, + "~:y": 614.999975403177, + "~:width": 96.9999761630422, + "~:height": 55.0000031870816, + "~:x1": 1454.99999582619, + "~:y1": 614.999975403177, + "~:x2": 1551.99997198923, + "~:y2": 669.999978590259 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u32f7cd92-fbab-8057-8006-ae15abf4e9f3": { + "~#shape": { + "~:y": 603.000006198883, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1644.00005328655, + "~:y": 603.000006198883 + } + }, + { + "~#point": { + "~:x": 1836.99993574619, + "~:y": 603.000006198883 + } + }, + { + "~#point": { + "~:x": 1836.99993574619, + "~:y": 666.999988079071 + } + }, + { + "~#point": { + "~:x": 1644.00005328655, + "~:y": 666.999988079071 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740e2055", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15abf4e9f3", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1644.00005328655, + "~:shadow": [ + { + "~:color": { + "~:color": "#ec1313", + "~:opacity": 1 + }, + "~:spread": 0, + "~:offset-y": 20, + "~:style": "~:drop-shadow", + "~:blur": 0, + "~:hidden": false, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15c0bf263f", + "~:offset-x": 20 + } + ], + "~:selrect": { + "~#rect": { + "~:x": 1644.00005328655, + "~:y": 603.000006198883, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1644.00005328655, + "~:y1": 603.000006198883, + "~:x2": 1836.99993574619, + "~:y2": 666.999988079071 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1488974651": { + "~#shape": { + "~:y": 225.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1250.00002479553, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1442.99990725517, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1442.99990725517, + "~:y": 289.999978065491 + } + }, + { + "~#point": { + "~:x": 1250.00002479553, + "~:y": 289.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157405b0ce", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae1488974651", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 3, + "~:stroke-color": "#f00000", + "~:stroke-opacity": 1 + } + ], + "~:x": 1250.00002479553, + "~:selrect": { + "~#rect": { + "~:x": 1250.00002479553, + "~:y": 225.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1250.00002479553, + "~:y1": 225.999996185303, + "~:x2": 1442.99990725517, + "~:y2": 289.999978065491 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149cc8c2f1": { + "~#shape": { + "~:y": 315.999988555908, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1650.99995541572, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1843.99983787537, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1843.99983787537, + "~:y": 379.999970436096 + } + }, + { + "~#point": { + "~:x": 1650.99995541572, + "~:y": 379.999970436096 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740e5d0c", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149cc8c2f1", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 3, + "~:stroke-color": "#f00000", + "~:stroke-opacity": 1 + } + ], + "~:x": 1650.99995541572, + "~:selrect": { + "~#rect": { + "~:x": 1650.99995541572, + "~:y": 315.999988555908, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1650.99995541572, + "~:y1": 315.999988555908, + "~:x2": 1843.99983787537, + "~:y2": 379.999970436096 + } + }, + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149cc8c2f0": { + "~#shape": { + "~:y": 315.999988555908, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1450.99995923042, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1643.99984169006, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1643.99984169006, + "~:y": 379.999970436096 + } + }, + { + "~#point": { + "~:x": 1450.99995923042, + "~:y": 379.999970436096 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740e5d0b", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149cc8c2f0", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 3, + "~:stroke-color": "#f00000", + "~:stroke-opacity": 1 + } + ], + "~:x": 1450.99995923042, + "~:selrect": { + "~#rect": { + "~:x": 1450.99995923042, + "~:y": 315.999988555908, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1450.99995923042, + "~:y1": 315.999988555908, + "~:x2": 1643.99984169006, + "~:y2": 379.999970436096 + } + }, + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae136831d5b7": { + "~#shape": { + "~:y": 575.000009429931, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 574.999981750488, + "~:y": 575.000009429931 + } + }, + { + "~#point": { + "~:x": 696.999982823372, + "~:y": 575.000009429931 + } + }, + { + "~#point": { + "~:x": 696.999982823372, + "~:y": 620.000009072303 + } + }, + { + "~#point": { + "~:x": 574.999981750488, + "~:y": 620.000009072303 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157407494b", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae136831d5b7", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 574.999981750488, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 574.999981750488, + "~:y": 575.000009429931, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 574.999981750488, + "~:y1": 575.000009429931, + "~:x2": 696.999982823372, + "~:y2": 620.000009072303 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13c850aa54": { + "~#shape": { + "~:y": 349, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:name": "807-100x100", + "~:width": 100, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 409.999998927116, + "~:y": 349 + } + }, + { + "~#point": { + "~:x": 509.999998927116, + "~:y": 349 + } + }, + { + "~#point": { + "~:x": 509.999998927116, + "~:y": 449 + } + }, + { + "~#point": { + "~:x": 409.999998927116, + "~:y": 449 + } + } + ], + "~:r2": 0, + "~:proportion-lock": true, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740bfa63", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae13c850aa54", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 409.999998927116, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 409.999998927116, + "~:y": 349, + "~:width": 100, + "~:height": 100, + "~:x1": 409.999998927116, + "~:y1": 349, + "~:x2": 509.999998927116, + "~:y2": 449 + } + }, + "~:fills": [ + { + "~:fill-opacity": 1, + "~:fill-image": { + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:id": "~uaa0a383a-7553-808a-8006-ae13c84d6e3a", + "~:keep-aspect-ratio": true + } + } + ], + "~:flip-x": null, + "~:height": 100, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae145d0a8e53": { + "~#shape": { + "~:y": 883.999982833862, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 55, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 484, + "~:y": 883.999982833862 + } + }, + { + "~#point": { + "~:x": 539, + "~:y": 883.999982833862 + } + }, + { + "~#point": { + "~:x": 539, + "~:y": 931.999982833862 + } + }, + { + "~#point": { + "~:x": 484, + "~:y": 931.999982833862 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~u13fc1849-119a-8028-8006-ae145d0a8e53", + "~:parent-id": "~u13fc1849-119a-8028-8006-ae145f7fe46e", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 484, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 484, + "~:y": 883.999982833862, + "~:width": 55, + "~:height": 48, + "~:x1": 484, + "~:y1": 883.999982833862, + "~:x2": 539, + "~:y2": 931.999982833862 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 48, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae12821ccb55": { + "~#shape": { + "~:y": 420, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 874, + "~:y": 420 + } + }, + { + "~#point": { + "~:x": 996, + "~:y": 420 + } + }, + { + "~#point": { + "~:x": 996, + "~:y": 465 + } + }, + { + "~#point": { + "~:x": 874, + "~:y": 465 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157409481f", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae12821ccb55", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 10, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae131157fc26", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 874, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 874, + "~:y": 420, + "~:width": 122, + "~:height": 45, + "~:x1": 874, + "~:y1": 420, + "~:x2": 996, + "~:y2": 465 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149fbf3113": { + "~#shape": { + "~:y": 395.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1456.00001263618, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1648.99989509582, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1648.99989509582, + "~:y": 459.999978065491 + } + }, + { + "~#point": { + "~:x": 1456.00001263618, + "~:y": 459.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740ee894", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149fbf3113", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 3, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 1456.00001263618, + "~:selrect": { + "~#rect": { + "~:x": 1456.00001263618, + "~:y": 395.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1456.00001263618, + "~:y1": 395.999996185303, + "~:x2": 1648.99989509582, + "~:y2": 459.999978065491 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1409412913": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAACgD9EFZllRAIAAAAAAAAAAAAAAAAAAAAAAAAASolPRAHAW0QCAAAAAAAAAAAAAAAAAAAAAAAAAADAV0QAgGlEAgAAAAAAAAAAAAAAAAAAAAAAAAACgD9EFZllRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 766.000023366509, + "~:y": 879.000019073486 + } + }, + { + "~#point": { + "~:x": 862.999999529551, + "~:y": 879.000019073486 + } + }, + { + "~#point": { + "~:x": 862.999999529551, + "~:y": 934.000022260568 + } + }, + { + "~#point": { + "~:x": 766.000023366509, + "~:y": 934.000022260568 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740d4830", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae1409412913", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 5, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 766.000023366509, + "~:y": 879.000019073486, + "~:width": 96.999976163042, + "~:height": 55.0000031870817, + "~:x1": 766.000023366509, + "~:y1": 879.000019073486, + "~:x2": 862.999999529551, + "~:y2": 934.000022260568 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149cc8c2f2": { + "~#shape": { + "~:y": 315.999988555908, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "underline", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "underline", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1042.99997138977, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1235.99985384941, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1235.99985384941, + "~:y": 379.999970436096 + } + }, + { + "~#point": { + "~:x": 1042.99997138977, + "~:y": 379.999970436096 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740eb4d7", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149cc8c2f2", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1042.99997138977, + "~:selrect": { + "~#rect": { + "~:x": 1042.99997138977, + "~:y": 315.999988555908, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1042.99997138977, + "~:y1": 315.999988555908, + "~:x2": 1235.99985384941, + "~:y2": 379.999970436096 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149fbf3112": { + "~#shape": { + "~:y": 395.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1255.00001263618, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1447.99989509582, + "~:y": 395.999996185303 + } + }, + { + "~#point": { + "~:x": 1447.99989509582, + "~:y": 459.999978065491 + } + }, + { + "~#point": { + "~:x": 1255.00001263618, + "~:y": 459.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740eb4d8", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149fbf3112", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 3, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 1255.00001263618, + "~:selrect": { + "~#rect": { + "~:x": 1255.00001263618, + "~:y": 395.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1255.00001263618, + "~:y1": 395.999996185303, + "~:x2": 1447.99989509582, + "~:y2": 459.999978065491 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1409412912": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAQBpEFZllRAIAAAAAAAAAAAAAAAAAAAAAAAAASkkqRAHAW0QCAAAAAAAAAAAAAAAAAAAAAAAAAP5/MkQAgGlEAgAAAAAAAAAAAAAAAAAAAAAAAAAAQBpEFZllRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 617.000024320183, + "~:y": 879.000019311905 + } + }, + { + "~#point": { + "~:x": 714.000000483225, + "~:y": 879.000019311905 + } + }, + { + "~#point": { + "~:x": 714.000000483225, + "~:y": 934.000022498986 + } + }, + { + "~#point": { + "~:x": 617.000024320183, + "~:y": 934.000022498986 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740d0c8f", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae1409412912", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 5, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 617.000024320183, + "~:y": 879.000019311905, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 617.000024320183, + "~:y1": 879.000019311905, + "~:x2": 714.000000483225, + "~:y2": 934.000022498986 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u32f7cd92-fbab-8057-8006-ae15abf4a0b8": { + "~#shape": { + "~:y": 621.999988555908, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 1092.00000107288, + "~:y": 621.999988555908 + } + }, + { + "~#point": { + "~:x": 1214.00000107288, + "~:y": 621.999988555908 + } + }, + { + "~#point": { + "~:x": 1214.00000107288, + "~:y": 666.999988555908 + } + }, + { + "~#point": { + "~:x": 1092.00000107288, + "~:y": 666.999988555908 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740b6b35", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15abf4a0b8", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1092.00000107288, + "~:proportion": 1, + "~:shadow": [ + { + "~:color": { + "~:color": "#ec1313", + "~:opacity": 1 + }, + "~:spread": 0, + "~:offset-y": 20, + "~:style": "~:drop-shadow", + "~:blur": 0, + "~:hidden": false, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15c0bf263f", + "~:offset-x": 20 + } + ], + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 1092.00000107288, + "~:y": 621.999988555908, + "~:width": 122, + "~:height": 45, + "~:x1": 1092.00000107288, + "~:y1": 621.999988555908, + "~:x2": 1214.00000107288, + "~:y2": 666.999988555908 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae12718b9f9a": { + "~#shape": { + "~:y": 335, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 724, + "~:y": 335 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 335 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 380 + } + }, + { + "~#point": { + "~:x": 724, + "~:y": 380 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740aabef", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae12718b9f9a", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:center", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 724, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 724, + "~:y": 335, + "~:width": 122, + "~:height": 45, + "~:x1": 724, + "~:y1": 335, + "~:x2": 846, + "~:y2": 380 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae12718b9f99": { + "~#shape": { + "~:y": 335, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 574, + "~:y": 335 + } + }, + { + "~#point": { + "~:x": 696, + "~:y": 335 + } + }, + { + "~#point": { + "~:x": 696, + "~:y": 380 + } + }, + { + "~#point": { + "~:x": 574, + "~:y": 380 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740a764e", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae12718b9f99", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 574, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 574, + "~:y": 335, + "~:width": 122, + "~:height": 45, + "~:x1": 574, + "~:y1": 335, + "~:x2": 696, + "~:y2": 380 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae136831d5b8": { + "~#shape": { + "~:y": 575.000009307861, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 725.000000640869, + "~:y": 575.000009307861 + } + }, + { + "~#point": { + "~:x": 847.000001713752, + "~:y": 575.000009307861 + } + }, + { + "~#point": { + "~:x": 847.000001713752, + "~:y": 620.000008950233 + } + }, + { + "~#point": { + "~:x": 725.000000640869, + "~:y": 620.000008950233 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae1574078444", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae136831d5b8", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:center", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 725.000000640869, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 725.000000640869, + "~:y": 575.000009307861, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 725.000000640869, + "~:y1": 575.000009307861, + "~:x2": 847.000001713752, + "~:y2": 620.000008950233 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae12718b9f98": { + "~#shape": { + "~:y": 335, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 874, + "~:y": 335 + } + }, + { + "~#point": { + "~:x": 996, + "~:y": 335 + } + }, + { + "~#point": { + "~:x": 996, + "~:y": 380 + } + }, + { + "~#point": { + "~:x": 874, + "~:y": 380 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740a3cad", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae12718b9f98", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:outer", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 874, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 874, + "~:y": 335, + "~:width": 122, + "~:height": 45, + "~:x1": 874, + "~:y1": 335, + "~:x2": 996, + "~:y2": 380 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae136831d5b9": { + "~#shape": { + "~:y": 575.000035766601, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 875.000034027099, + "~:y": 575.000035766601 + } + }, + { + "~#point": { + "~:x": 997.000035099983, + "~:y": 575.000035766601 + } + }, + { + "~#point": { + "~:x": 997.000035099983, + "~:y": 620.000035408973 + } + }, + { + "~#point": { + "~:x": 875.000034027099, + "~:y": 620.000035408973 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157407c718", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae136831d5b9", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:outer", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 875.000034027099, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 875.000034027099, + "~:y": 575.000035766601, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 875.000034027099, + "~:y1": 575.000035766601, + "~:x2": 997.000035099983, + "~:y2": 620.000035408973 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13f3784f1e": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAABQDtEFFk9RAIAAAAAAAAAAAAAAAAAAAAAAAAASklLRACAM0QCAAAAAAAAAAAAAAAAAAAAAAAAAP9/U0T/P0FEAgAAAAAAAAAAAAAAAAAAAAAAAAABQDtEFFk9RA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 749.000023841858, + "~:y": 717.999986648559 + } + }, + { + "~#point": { + "~:x": 846.0000000049, + "~:y": 717.999986648559 + } + }, + { + "~#point": { + "~:x": 846.0000000049, + "~:y": 772.999989835641 + } + }, + { + "~#point": { + "~:x": 749.000023841858, + "~:y": 772.999989835641 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae1574070b1a", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13f3784f1e", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 749.000023841858, + "~:y": 717.999986648559, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 749.000023841858, + "~:y1": 717.999986648559, + "~:x2": 846.0000000049, + "~:y2": 772.999989835641 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13d295949e": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAABgNlDFFk9RAIAAAAAAAAAAAAAAAAAAAAAAAAAlJL5QwCAM0QCAAAAAAAAAAAAAAAAAAAAAAAAAP7/BET/P0FEAgAAAAAAAAAAAAAAAAAAAAAAAAABgNlDFFk9RA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 434.999994753303, + "~:y": 717.999986847269 + } + }, + { + "~#point": { + "~:x": 531.999970916345, + "~:y": 717.999986847269 + } + }, + { + "~#point": { + "~:x": 531.999970916345, + "~:y": 772.999990034351 + } + }, + { + "~#point": { + "~:x": 434.999994753303, + "~:y": 772.999990034351 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740c1c07", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13d295949e", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 434.999994753303, + "~:y": 717.999986847269, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 434.999994753303, + "~:y1": 717.999986847269, + "~:x2": 531.999970916345, + "~:y2": 772.999990034351 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae136eba457f": { + "~#shape": { + "~:y": 647.999990509033, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 577.000035888671, + "~:y": 647.999990509033 + } + }, + { + "~#point": { + "~:x": 699.000036961555, + "~:y": 647.999990509033 + } + }, + { + "~#point": { + "~:x": 699.000036961555, + "~:y": 692.999990151405 + } + }, + { + "~#point": { + "~:x": 577.000035888671, + "~:y": 692.999990151405 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740815ab", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae136eba457f", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 10, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 577.000035888671, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 577.000035888671, + "~:y": 647.999990509033, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 577.000035888671, + "~:y1": 647.999990509033, + "~:x2": 699.000036961555, + "~:y2": 692.999990151405 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13412799ff": { + "~#shape": { + "~:y": 505.999985260009, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 573.999999053955, + "~:y": 505.999985260009 + } + }, + { + "~#point": { + "~:x": 696.000000126838, + "~:y": 505.999985260009 + } + }, + { + "~#point": { + "~:x": 696.000000126838, + "~:y": 550.999984902382 + } + }, + { + "~#point": { + "~:x": 573.999999053955, + "~:y": 550.999984902382 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157408a26b", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13412799ff", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 573.999999053955, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 573.999999053955, + "~:y": 505.999985260009, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 573.999999053955, + "~:y1": 505.999985260009, + "~:x2": 696.000000126838, + "~:y2": 550.999984902382 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13f1cb571d": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAABABZEFFk9RAIAAAAAAAAAAAAAAAAAAAAAAAAASgkmRACAM0QCAAAAAAAAAAAAAAAAAAAAAAAAAP8/LkT/P0FEAgAAAAAAAAAAAAAAAAAAAAAAAAABABZEFFk9RA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 600.000024795532, + "~:y": 717.999986886978 + } + }, + { + "~#point": { + "~:x": 697.000000958574, + "~:y": 717.999986886978 + } + }, + { + "~#point": { + "~:x": 697.000000958574, + "~:y": 772.99999007406 + } + }, + { + "~#point": { + "~:x": 600.000024795532, + "~:y": 772.99999007406 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157406cbd3", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13f1cb571d", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 600.000024795532, + "~:y": 717.999986886978, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 600.000024795532, + "~:y1": 717.999986886978, + "~:x2": 697.000000958574, + "~:y2": 772.99999007406 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13fe15f2e2": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAABAGNEFFlRRAIAAAAAAAAAAAAAAAAAAAAAAAAASglzRACAR0QCAAAAAAAAAAAAAAAAAAAAAAAAAABAe0T/P1VEAgAAAAAAAAAAAAAAAAAAAAAAAAABAGNEFFlRRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 908.000027656555, + "~:y": 797.999970436096 + } + }, + { + "~#point": { + "~:x": 1005.0000038196, + "~:y": 797.999970436096 + } + }, + { + "~#point": { + "~:x": 1005.0000038196, + "~:y": 852.999973623178 + } + }, + { + "~#point": { + "~:x": 908.000027656555, + "~:y": 852.999973623178 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740cc959", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13fe15f2e2", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 908.000027656555, + "~:y": 797.999970436096, + "~:width": 96.999976163042, + "~:height": 55.0000031870817, + "~:x1": 908.000027656555, + "~:y1": 797.999970436096, + "~:x2": 1005.0000038196, + "~:y2": 852.999973623178 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae14514c00a5": { + "~#shape": { + "~:y": 623.000027202768, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 50, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 473, + "~:y": 623.000027202768 + } + }, + { + "~#point": { + "~:x": 523, + "~:y": 623.000027202768 + } + }, + { + "~#point": { + "~:x": 523, + "~:y": 672.000033044023 + } + }, + { + "~#point": { + "~:x": 473, + "~:y": 672.000033044023 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae14514c00a5", + "~:parent-id": "~u13fc1849-119a-8028-8006-ae144ea899a3", + "~:frame-id": "~u13fc1849-119a-8028-8006-ae144ea899a3", + "~:strokes": [], + "~:x": 473, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 473, + "~:y": 623.000027202768, + "~:width": 50, + "~:height": 49.0000058412552, + "~:x1": 473, + "~:y1": 623.000027202768, + "~:x2": 523, + "~:y2": 672.000033044023 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 49.0000058412552, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13fe15f2e0": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAABZEFFlRRAIAAAAAAAAAAAAAAAAAAAAAAAAASQkmRACAR0QCAAAAAAAAAAAAAAAAAAAAAAAAAP4/LkT/P1VEAgAAAAAAAAAAAAAAAAAAAAAAAAAAABZEFFlRRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 599.999994277954, + "~:y": 797.999970674514 + } + }, + { + "~#point": { + "~:x": 696.999970440996, + "~:y": 797.999970674514 + } + }, + { + "~#point": { + "~:x": 696.999970440996, + "~:y": 852.999973861596 + } + }, + { + "~#point": { + "~:x": 599.999994277954, + "~:y": 852.999973861596 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740c4de1", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13fe15f2e0", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 599.999994277954, + "~:y": 797.999970674514, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 599.999994277954, + "~:y1": 797.999970674514, + "~:x2": 696.999970440996, + "~:y2": 852.999973861596 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae145ad77407": { + "~#shape": { + "~:y": 840.999982833862, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 55, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 429, + "~:y": 840.999982833862 + } + }, + { + "~#point": { + "~:x": 484, + "~:y": 840.999982833862 + } + }, + { + "~#point": { + "~:x": 484, + "~:y": 891.999982833862 + } + }, + { + "~#point": { + "~:x": 429, + "~:y": 891.999982833862 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae145ad77407", + "~:parent-id": "~u13fc1849-119a-8028-8006-ae145f7fe46e", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 429, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 429, + "~:y": 840.999982833862, + "~:width": 55, + "~:height": 51, + "~:x1": 429, + "~:y1": 840.999982833862, + "~:x2": 484, + "~:y2": 891.999982833862 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 51, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae136eba4580": { + "~#shape": { + "~:y": 647.999990386963, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 727.000054779052, + "~:y": 647.999990386963 + } + }, + { + "~#point": { + "~:x": 849.000055851936, + "~:y": 647.999990386963 + } + }, + { + "~#point": { + "~:x": 849.000055851936, + "~:y": 692.999990029335 + } + }, + { + "~#point": { + "~:x": 727.000054779052, + "~:y": 692.999990029335 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740815ac", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae136eba4580", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 10, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 727.000054779052, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 727.000054779052, + "~:y": 647.999990386963, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 727.000054779052, + "~:y1": 647.999990386963, + "~:x2": 849.000055851936, + "~:y2": 692.999990029335 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13fe15f2e1": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAQDtEFFlRRAIAAAAAAAAAAAAAAAAAAAAAAAAASUlLRACAR0QCAAAAAAAAAAAAAAAAAAAAAAAAAP5/U0T/P1VEAgAAAAAAAAAAAAAAAAAAAAAAAAAAQDtEFFlRRA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 748.99999332428, + "~:y": 797.999970436096 + } + }, + { + "~#point": { + "~:x": 845.999969487322, + "~:y": 797.999970436096 + } + }, + { + "~#point": { + "~:x": 845.999969487322, + "~:y": 852.999973623178 + } + }, + { + "~#point": { + "~:x": 748.99999332428, + "~:y": 852.999973623178 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740c9b85", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13fe15f2e1", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 748.99999332428, + "~:y": 797.999970436096, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 748.99999332428, + "~:y1": 797.999970436096, + "~:x2": 845.999969487322, + "~:y2": 852.999973623178 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae148e8d3b46": { + "~#shape": { + "~:y": 225.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-opacity": 1, + "~:fill-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:keep-aspect-ratio": true, + "~:name": "sample" + } + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-opacity": 1, + "~:fill-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:keep-aspect-ratio": true, + "~:name": "sample" + } + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1651.00002098083, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1843.99990344047, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1843.99990344047, + "~:y": 289.999978065491 + } + }, + { + "~#point": { + "~:x": 1651.00002098083, + "~:y": 289.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae1574064f23", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae148e8d3b46", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 3, + "~:stroke-color": "#f00000", + "~:stroke-opacity": 1 + } + ], + "~:x": 1651.00002098083, + "~:selrect": { + "~#rect": { + "~:x": 1651.00002098083, + "~:y": 225.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1651.00002098083, + "~:y1": 225.999996185303, + "~:x2": 1843.99990344047, + "~:y2": 289.999978065491 + } + }, + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae136eba4581": { + "~#shape": { + "~:y": 647.999955810547, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 877.000027130126, + "~:y": 647.999955810547 + } + }, + { + "~#point": { + "~:x": 999.00002820301, + "~:y": 647.999955810547 + } + }, + { + "~#point": { + "~:x": 999.00002820301, + "~:y": 692.999955452919 + } + }, + { + "~#point": { + "~:x": 877.000027130126, + "~:y": 692.999955452919 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae1574087e06", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae136eba4581", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 10, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 877.000027130126, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 877.000027130126, + "~:y": 647.999955810547, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 877.000027130126, + "~:y1": 647.999955810547, + "~:x2": 999.00002820301, + "~:y2": 692.999955452919 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae12821d0027": { + "~#shape": { + "~:y": 420, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 574, + "~:y": 420 + } + }, + { + "~#point": { + "~:x": 696, + "~:y": 420 + } + }, + { + "~#point": { + "~:x": 696, + "~:y": 465 + } + }, + { + "~#point": { + "~:x": 574, + "~:y": 465 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157409b604", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae12821d0027", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 10, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae131157fc26", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 574, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 574, + "~:y": 420, + "~:width": 122, + "~:height": 45, + "~:x1": 574, + "~:y1": 420, + "~:x2": 696, + "~:y2": 465 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1349518986": { + "~#shape": { + "~:y": 505.999985137939, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 724.000017944336, + "~:y": 505.999985137939 + } + }, + { + "~#point": { + "~:x": 846.000019017219, + "~:y": 505.999985137939 + } + }, + { + "~#point": { + "~:x": 846.000019017219, + "~:y": 550.999984780311 + } + }, + { + "~#point": { + "~:x": 724.000017944336, + "~:y": 550.999984780311 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157408c8c8", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae1349518986", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:center", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 724.000017944336, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 724.000017944336, + "~:y": 505.999985137939, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 724.000017944336, + "~:y1": 505.999985137939, + "~:x2": 846.000019017219, + "~:y2": 550.999984780311 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae124bfbec46": { + "~#shape": { + "~:y": 247, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 410, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 532, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 532, + "~:y": 292 + } + }, + { + "~#point": { + "~:x": 410, + "~:y": 292 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740b6b35", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae124bfbec46", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 410, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 410, + "~:y": 247, + "~:width": 122, + "~:height": 45, + "~:x1": 410, + "~:y1": 247, + "~:x2": 532, + "~:y2": 292 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae144ea899a3": { + "~#shape": { + "~:y": 591.000011526601, + "~:hide-fill-on-export": false, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Board", + "~:width": 122.000002861023, + "~:type": "~:frame", + "~:points": [ + { + "~#point": { + "~:x": 410.000008106232, + "~:y": 591.000011526601 + } + }, + { + "~#point": { + "~:x": 532.000010967255, + "~:y": 591.000011526601 + } + }, + { + "~#point": { + "~:x": 532.000010967255, + "~:y": 692.999968968885 + } + }, + { + "~#point": { + "~:x": 410.000008106232, + "~:y": 692.999968968885 + } + } + ], + "~:r2": 0, + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740d9f47", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae144ea899a3", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 410.000008106232, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 410.000008106232, + "~:y": 591.000011526601, + "~:width": 122.000002861023, + "~:height": 101.999957442284, + "~:x1": 410.000008106232, + "~:y1": 591.000011526601, + "~:x2": 532.000010967255, + "~:y2": 692.999968968885 + } + }, + "~:fills": [ + { + "~:fill-color": "#FFFFFF", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 101.999957442284, + "~:flip-y": null, + "~:shapes": [ + "~u13fc1849-119a-8028-8006-ae14514c00a5" + ] + } + }, + "~u32f7cd92-fbab-8057-8006-ae15272bde67": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAAAQIZEAIAGRAIAAAAAAAAAAAAAAAAAAAAAAAAAAICZRACA/0MCAAAAAAAAAAAAAAAAAAAAAAAAAADgoEQAwAlE" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 1074, + "~:y": 511.000011444092 + } + }, + { + "~#point": { + "~:x": 1287, + "~:y": 511.000011444092 + } + }, + { + "~#point": { + "~:x": 1287, + "~:y": 551.000011444092 + } + }, + { + "~#point": { + "~:x": 1074, + "~:y": 551.000011444092 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740f1a35", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u32f7cd92-fbab-8057-8006-ae15272bde67", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 10, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-cap-start": "~:line-arrow", + "~:stroke-cap-end": "~:square-marker" + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 1074, + "~:y": 511.000011444092, + "~:width": 213, + "~:height": 40, + "~:x1": 1074, + "~:y1": 511.000011444092, + "~:x2": 1287, + "~:y2": 551.000011444092 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1250d028e4": { + "~#shape": { + "~:y": 247, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 574, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 696, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 696, + "~:y": 292 + } + }, + { + "~#point": { + "~:x": 574, + "~:y": 292 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740ac9e6", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae1250d028e4", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:inner", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 574, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 574, + "~:y": 247, + "~:width": 122, + "~:height": 45, + "~:x1": 574, + "~:y1": 247, + "~:x2": 696, + "~:y2": 292 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1258ccf72b": { + "~#shape": { + "~:y": 247, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 874, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 996, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 996, + "~:y": 292 + } + }, + { + "~#point": { + "~:x": 874, + "~:y": 292 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740aabf0", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae1258ccf72b", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:outer", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 874, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 874, + "~:y": 247, + "~:width": 122, + "~:height": 45, + "~:x1": 874, + "~:y1": 247, + "~:x2": 996, + "~:y2": 292 + } + }, + "~:fills": [ + { + "~:fill-opacity": 1, + "~:fill-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:keep-aspect-ratio": true, + "~:name": "sample" + } + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1255187d6b": { + "~#shape": { + "~:y": 247, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 724, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 247 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 292 + } + }, + { + "~#point": { + "~:x": 724, + "~:y": 292 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740b0f1e", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae1255187d6b", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-alignment": "~:center", + "~:stroke-style": "~:solid", + "~:stroke-color": "#000000", + "~:stroke-opacity": 1, + "~:stroke-width": 10 + } + ], + "~:x": 724, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 724, + "~:y": 247, + "~:width": 122, + "~:height": 45, + "~:x1": 724, + "~:y1": 247, + "~:x2": 846, + "~:y2": 292 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae149cc8c2ef": { + "~#shape": { + "~:y": 315.999988555908, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1249.99995923042, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1442.99984169006, + "~:y": 315.999988555908 + } + }, + { + "~#point": { + "~:x": 1442.99984169006, + "~:y": 379.999970436096 + } + }, + { + "~#point": { + "~:x": 1249.99995923042, + "~:y": 379.999970436096 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740e2056", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae149cc8c2ef", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:inner", + "~:stroke-width": 3, + "~:stroke-color": "#f00000", + "~:stroke-opacity": 1 + } + ], + "~:x": 1249.99995923042, + "~:selrect": { + "~#rect": { + "~:x": 1249.99995923042, + "~:y": 315.999988555908, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1249.99995923042, + "~:y1": 315.999988555908, + "~:x2": 1442.99984169006, + "~:y2": 379.999970436096 + } + }, + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae148b39a12f": { + "~#shape": { + "~:y": 225.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1451.00002479553, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1643.99990725517, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1643.99990725517, + "~:y": 289.999978065491 + } + }, + { + "~#point": { + "~:x": 1451.00002479553, + "~:y": 289.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740639ea", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae148b39a12f", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 3, + "~:stroke-color": "#f00000", + "~:stroke-opacity": 1 + } + ], + "~:x": 1451.00002479553, + "~:selrect": { + "~#rect": { + "~:x": 1451.00002479553, + "~:y": 225.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1451.00002479553, + "~:y1": 225.999996185303, + "~:x2": 1643.99990725517, + "~:y2": 289.999978065491 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae145f7fe46e": { + "~#shape": { + "~:y": 840.999982833862, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:index": 34, + "~:name": "Group", + "~:width": 110, + "~:type": "~:group", + "~:points": [ + { + "~#point": { + "~:x": 429, + "~:y": 840.999982833862 + } + }, + { + "~#point": { + "~:x": 539, + "~:y": 840.999982833862 + } + }, + { + "~#point": { + "~:x": 539, + "~:y": 931.999982833862 + } + }, + { + "~#point": { + "~:x": 429, + "~:y": 931.999982833862 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740dde7a", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae145f7fe46e", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 429, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 429, + "~:y": 840.999982833862, + "~:width": 110, + "~:height": 91, + "~:x1": 429, + "~:y1": 840.999982833862, + "~:x2": 539, + "~:y2": 931.999982833862 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 91, + "~:flip-y": null, + "~:shapes": [ + "~u13fc1849-119a-8028-8006-ae145ad77407", + "~u13fc1849-119a-8028-8006-ae145d0a8e53" + ] + } + }, + "~u13fc1849-119a-8028-8006-ae12821d0028": { + "~#shape": { + "~:y": 420, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Rectangle", + "~:width": 122, + "~:type": "~:rect", + "~:points": [ + { + "~#point": { + "~:x": 724, + "~:y": 420 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 420 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 465 + } + }, + { + "~#point": { + "~:x": 724, + "~:y": 465 + } + } + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:r3": 0, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae157409e00f", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:r1": 0, + "~:id": "~u13fc1849-119a-8028-8006-ae12821d0028", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:center", + "~:stroke-width": 10, + "~:stroke-opacity": 1, + "~:stroke-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae131157fc26", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:name": "807-100x100.jpg", + "~:keep-aspect-ratio": true + } + } + ], + "~:x": 724, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": { + "~#rect": { + "~:x": 724, + "~:y": 420, + "~:width": 122, + "~:height": 45, + "~:x1": 724, + "~:y1": 420, + "~:x2": 846, + "~:y2": 465 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 45, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae13f4cca089": { + "~#shape": { + "~:y": null, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAAABAGNEFFk9RAIAAAAAAAAAAAAAAAAAAAAAAAAASglzRACAM0QCAAAAAAAAAAAAAAAAAAAAAAAAAP8/e0T/P0FEAgAAAAAAAAAAAAAAAAAAAAAAAAABAGNEFFk9RA==" + }, + "~:name": "Path", + "~:width": null, + "~:type": "~:path", + "~:points": [ + { + "~#point": { + "~:x": 907.999997138977, + "~:y": 717.999986648559 + } + }, + { + "~#point": { + "~:x": 1004.99997330202, + "~:y": 717.999986648559 + } + }, + { + "~#point": { + "~:x": 1004.99997330202, + "~:y": 772.999989835641 + } + }, + { + "~#point": { + "~:x": 907.999997138977, + "~:y": 772.999989835641 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae1574070b1b", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae13f4cca089", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [ + { + "~:stroke-style": "~:solid", + "~:stroke-alignment": "~:outer", + "~:stroke-width": 5, + "~:stroke-color": "#000000", + "~:stroke-opacity": 1 + } + ], + "~:x": null, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 907.999997138977, + "~:y": 717.999986648559, + "~:width": 96.9999761630421, + "~:height": 55.0000031870817, + "~:x1": 907.999997138977, + "~:y1": 717.999986648559, + "~:x2": 1004.99997330202, + "~:y2": 772.999989835641 + } + }, + "~:fills": [ + { + "~:fill-opacity": 1, + "~:fill-image": { + "~:id": "~uaa0a383a-7553-808a-8006-ae13a3c575eb", + "~:width": 100, + "~:height": 100, + "~:mtype": "image/jpeg", + "~:keep-aspect-ratio": true, + "~:name": "sample" + } + } + ], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae132783846c": { + "~#shape": { + "~:y": 505.99998537592, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:hide-in-viewer": false, + "~:name": "Ellipse", + "~:width": 122.000001072884, + "~:type": "~:circle", + "~:points": [ + { + "~#point": { + "~:x": 409.999998927116, + "~:y": 505.99998537592 + } + }, + { + "~#point": { + "~:x": 532, + "~:y": 505.99998537592 + } + }, + { + "~#point": { + "~:x": 532, + "~:y": 550.999985018292 + } + }, + { + "~#point": { + "~:x": 409.999998927116, + "~:y": 550.999985018292 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740bb692", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae132783846c", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 409.999998927116, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 409.999998927116, + "~:y": 505.99998537592, + "~:width": 122.000001072884, + "~:height": 44.9999996423721, + "~:x1": 409.999998927116, + "~:y1": 505.99998537592, + "~:x2": 532, + "~:y2": 550.999985018292 + } + }, + "~:fills": [ + { + "~:fill-color": "#B1B2B5", + "~:fill-opacity": 1 + } + ], + "~:flip-x": null, + "~:height": 44.9999996423721, + "~:flip-y": null + } + }, + "~u13fc1849-119a-8028-8006-ae1466a3bd0a": { + "~#shape": { + "~:y": 225.999996185303, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1yigf3q424f", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "y1ftds6pb9", + "~:font-size": "72", + "~:font-weight": "900", + "~:typography-ref-file": null, + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "HOLA" + } + ], + "~:typography-ref-id": null, + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "22b1a6a2bbr", + "~:font-size": "72", + "~:font-weight": "900", + "~:typography-ref-file": null, + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "black", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "HOLA", + "~:width": 192.999882459641, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1043.00003695488, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1235.99991941452, + "~:y": 225.999996185303 + } + }, + { + "~#point": { + "~:x": 1235.99991941452, + "~:y": 289.999978065491 + } + }, + { + "~#point": { + "~:x": 1043.00003695488, + "~:y": 289.999978065491 + } + } + ], + "~:layout-item-h-sizing": "~:fix", + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:layout-item-v-sizing": "~:fix", + "~:blur": { + "~:id": "~u32f7cd92-fbab-8057-8006-ae15740e2055", + "~:type": "~:layer-blur", + "~:value": 2, + "~:hidden": false + }, + "~:id": "~u13fc1849-119a-8028-8006-ae1466a3bd0a", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:x": 1043.00003695488, + "~:selrect": { + "~#rect": { + "~:x": 1043.00003695488, + "~:y": 225.999996185303, + "~:width": 192.999882459641, + "~:height": 63.999981880188, + "~:x1": 1043.00003695488, + "~:y1": 225.999996185303, + "~:x2": 1235.99991941452, + "~:y2": 289.999978065491 + } + }, + "~:flip-x": null, + "~:height": 63.999981880188, + "~:flip-y": null + } + } + }, + "~:id": "~uaa0a383a-7553-808a-8006-ae1237b52cfa", + "~:name": "Page 1" + } + }, + "~:id": "~uaa0a383a-7553-808a-8006-ae1237b52cf9", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} \ No newline at end of file diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js index 4440eb08f1..1effc84679 100644 --- a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js @@ -161,3 +161,19 @@ test("Updates canvas background", async ({ await expect(workspace.canvas).toHaveScreenshot(); }); + +test("Renders a file with blurs applied to any kind of shape", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("render-wasm/get-file-blurs.json"); + + await workspace.goToWorkspace({ + id: "aa0a383a-7553-808a-8006-ae1237b52cf9", + pageId: "aa0a383a-7553-808a-8006-ae160ba8bd86", + }); + await workspace.waitForFirstRender(); + + await expect(workspace.canvas).toHaveScreenshot(); +}); diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-blurs-applied-to-any-kind-of-shape-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-blurs-applied-to-any-kind-of-shape-1.png new file mode 100644 index 0000000000..39520f40a8 Binary files /dev/null and b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/Renders-a-file-with-blurs-applied-to-any-kind-of-shape-1.png differ diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index b0c76771be..304198323f 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -1,6 +1,7 @@ mod blend; mod debug; mod fills; +pub mod filters; mod fonts; mod gpu_state; pub mod grid_layout; @@ -21,7 +22,7 @@ use options::RenderOptions; pub use surfaces::{SurfaceId, Surfaces}; use crate::performance; -use crate::shapes::{Corners, Fill, Shape, SolidColor, StructureEntry, Type}; +use crate::shapes::{Blur, BlurType, Corners, Fill, Shape, SolidColor, StructureEntry, Type}; use crate::state::ShapesPool; use crate::tiles::{self, PendingTiles, TileRect}; use crate::uuid::Uuid; @@ -179,6 +180,7 @@ pub(crate) struct RenderState { // can affect its child elements if they don't specify one themselves. If the planned // migration to remove group-level fills is completed, this code should be removed. pub nested_fills: Vec>, + pub nested_blurs: Vec>, pub show_grid: Option, pub focus_mode: FocusMode, } @@ -269,6 +271,7 @@ impl RenderState { ), pending_tiles: PendingTiles::new_empty(), nested_fills: vec![], + nested_blurs: vec![], show_grid: None, focus_mode: FocusMode::new(), } @@ -451,6 +454,23 @@ impl RenderState { shape.to_mut().apply_transform(shape_modifiers); } + let mut nested_blur_value = 0.; + for nested_blur in self.nested_blurs.iter().flatten() { + if !nested_blur.hidden && nested_blur.blur_type == BlurType::Layer { + nested_blur_value += nested_blur.value.powf(2.); + } + } + + if !shape.blur.hidden && shape.blur.blur_type == BlurType::Layer { + nested_blur_value += shape.blur.value.powf(2.); + } + + if nested_blur_value > 0. { + shape + .to_mut() + .set_blur(BlurType::Layer as u8, false, nested_blur_value.sqrt()); + } + let center = shape.center(); let mut matrix = shape.transform; matrix.post_translate(center); @@ -491,7 +511,10 @@ impl RenderState { }); let text_content = text_content.new_bounds(shape.selrect()); - let mut paragraphs = text_content.get_skia_paragraphs(); + let mut paragraphs = text_content.get_skia_paragraphs( + shape.image_filter(1.).as_ref(), + shape.mask_filter(1.).as_ref(), + ); if !shape.has_visible_strokes() { shadows::render_text_drop_shadows(self, &shape, &mut paragraphs, antialias); @@ -500,8 +523,12 @@ impl RenderState { text::render(self, &shape, &mut paragraphs, None, None); for stroke in shape.visible_strokes().rev() { - let mut stroke_paragraphs = - text_content.get_skia_stroke_paragraphs(stroke, &shape.selrect()); + let mut stroke_paragraphs = text_content.get_skia_stroke_paragraphs( + stroke, + &shape.selrect(), + shape.image_filter(1.).as_ref(), + shape.mask_filter(1.).as_ref(), + ); shadows::render_text_drop_shadows( self, &shape, @@ -751,6 +778,13 @@ impl RenderState { } } + match element.shape_type { + Type::Frame(_) | Type::Group(_) => { + self.nested_blurs.push(Some(element.blur)); + } + _ => {} + } + let mut paint = skia::Paint::default(); paint.set_blend_mode(element.blend_mode().into()); paint.set_alpha_f(element.opacity()); @@ -767,10 +801,6 @@ impl RenderState { .save_layer(&mask_rec); } - if let Some(image_filter) = element.image_filter(self.get_scale()) { - paint.set_image_filter(image_filter); - } - let layer_rec = skia::canvas::SaveLayerRec::default().paint(&paint); self.surfaces .canvas(SurfaceId::Current) @@ -830,6 +860,13 @@ impl RenderState { self.nested_fills.pop(); } + match element.shape_type { + Type::Frame(_) | Type::Group(_) => { + self.nested_blurs.pop(); + } + _ => {} + } + // Detect clipping and apply it properly if let Type::Frame(_) = &element.shape_type { if element.clip() { diff --git a/render-wasm/src/render/fills.rs b/render-wasm/src/render/fills.rs index 634181b645..2744b1be2b 100644 --- a/render-wasm/src/render/fills.rs +++ b/render-wasm/src/render/fills.rs @@ -24,8 +24,15 @@ fn draw_image_fill( let src_rect = get_source_rect(size, container, image_fill); let dest_rect = container; + let mut image_paint = skia::Paint::default(); + image_paint.set_anti_alias(antialias); + if let Some(filter) = shape.image_filter(1.) { + image_paint.set_image_filter(filter.clone()); + } + + let layer_rec = skia::canvas::SaveLayerRec::default().paint(&image_paint); // Save the current canvas state - canvas.save(); + canvas.save_layer(&layer_rec); // Set the clipping rectangle to the container bounds match &shape.shape_type { @@ -84,26 +91,29 @@ fn draw_image_fill( * This SHOULD be the only public function in this module. */ pub fn render(render_state: &mut RenderState, shape: &Shape, fill: &Fill, antialias: bool) { - let paint = &fill.to_paint(&shape.selrect, antialias); + let mut paint = fill.to_paint(&shape.selrect, antialias); + if let Some(image_filter) = shape.image_filter(1.) { + paint.set_image_filter(image_filter); + } match (fill, &shape.shape_type) { (Fill::Image(image_fill), _) => { - draw_image_fill(render_state, shape, image_fill, paint, antialias); + draw_image_fill(render_state, shape, image_fill, &paint, antialias); } (_, Type::Rect(_) | Type::Frame(_)) => { render_state .surfaces - .draw_rect_to(SurfaceId::Fills, shape, paint); + .draw_rect_to(SurfaceId::Fills, shape, &paint); } (_, Type::Circle) => { render_state .surfaces - .draw_circle_to(SurfaceId::Fills, shape, paint); + .draw_circle_to(SurfaceId::Fills, shape, &paint); } (_, Type::Path(_)) | (_, Type::Bool(_)) => { render_state .surfaces - .draw_path_to(SurfaceId::Fills, shape, paint); + .draw_path_to(SurfaceId::Fills, shape, &paint); } (_, Type::Group(_)) => { // Groups can have fills but they propagate them to their children diff --git a/render-wasm/src/render/filters.rs b/render-wasm/src/render/filters.rs new file mode 100644 index 0000000000..25449d5242 --- /dev/null +++ b/render-wasm/src/render/filters.rs @@ -0,0 +1,23 @@ +use skia_safe::ImageFilter; + +/// Composes two image filters, returning a combined filter if both are present, +/// or the individual filter if only one is present, or None if neither is present. +/// +/// # Parameters +/// - `filter_a`: The first optional image filter. +/// - `filter_b`: The second optional image filter. +/// +/// # Returns +/// - `Some(ImageFilter)`: The composed or single filter. +/// - `None`: If both filters are `None`. +pub fn compose_filters( + filter_a: Option<&ImageFilter>, + filter_b: Option<&ImageFilter>, +) -> Option { + match (filter_a, filter_b) { + (Some(fa), Some(fb)) => ImageFilter::compose(fa, fb), + (Some(fa), None) => Some(fa.clone()), + (None, Some(fb)) => Some(fb.clone()), + (None, None) => None, + } +} diff --git a/render-wasm/src/render/shadows.rs b/render-wasm/src/render/shadows.rs index 7426f978a7..d0f7e2af00 100644 --- a/render-wasm/src/render/shadows.rs +++ b/render-wasm/src/render/shadows.rs @@ -20,7 +20,7 @@ fn render_fill_drop_shadow( shadow: &Shadow, antialias: bool, ) { - let paint = &shadow.get_drop_shadow_paint(antialias); + let paint = &shadow.get_drop_shadow_paint(antialias, shape.image_filter(1.).as_ref()); render_shadow_paint(render_state, shape, paint, SurfaceId::DropShadows); } @@ -38,7 +38,7 @@ fn render_fill_inner_shadow( shadow: &Shadow, antialias: bool, ) { - let paint = &shadow.get_inner_shadow_paint(antialias); + let paint = &shadow.get_inner_shadow_paint(antialias, shape.image_filter(1.).as_ref()); render_shadow_paint(render_state, shape, paint, SurfaceId::InnerShadows); } @@ -129,7 +129,7 @@ pub fn render_text_drop_shadow( paragraphs: &mut [Vec], antialias: bool, ) { - let paint = shadow.get_drop_shadow_paint(antialias); + let paint = shadow.get_drop_shadow_paint(antialias, shape.image_filter(1.).as_ref()); text::render( render_state, @@ -158,7 +158,7 @@ pub fn render_text_inner_shadow( paragraphs: &mut [Vec], antialias: bool, ) { - let paint = shadow.get_inner_shadow_paint(antialias); + let paint = shadow.get_inner_shadow_paint(antialias, shape.image_filter(1.).as_ref()); text::render( render_state, diff --git a/render-wasm/src/render/strokes.rs b/render-wasm/src/render/strokes.rs index 327643a4f4..778f42977d 100644 --- a/render-wasm/src/render/strokes.rs +++ b/render-wasm/src/render/strokes.rs @@ -6,6 +6,7 @@ use crate::shapes::{Corners, Fill, ImageFill, Path, Shape, Stroke, StrokeCap, St use skia_safe::{self as skia, textlayout::ParagraphBuilder, ImageFilter, RRect}; use super::{RenderState, SurfaceId}; +use crate::render::filters::compose_filters; use crate::render::text::{self}; use crate::render::{get_dest_rect, get_source_rect}; @@ -20,6 +21,7 @@ fn draw_stroke_on_rect( svg_attrs: &HashMap, scale: f32, shadow: Option<&ImageFilter>, + blur: Option<&ImageFilter>, antialias: bool, ) { // Draw the different kind of strokes for a rect is straightforward, we just need apply a stroke to: @@ -29,9 +31,9 @@ fn draw_stroke_on_rect( let stroke_rect = stroke.outer_rect(rect); let mut paint = stroke.to_paint(selrect, svg_attrs, scale, antialias); - if let Some(filter) = shadow { - paint.set_image_filter(filter.clone()); - } + // Apply both blur and shadow filters if present, composing them if necessary. + let filter = compose_filters(blur, shadow); + paint.set_image_filter(filter); match corners { Some(radii) => { @@ -55,6 +57,7 @@ fn draw_stroke_on_circle( svg_attrs: &HashMap, scale: f32, shadow: Option<&ImageFilter>, + blur: Option<&ImageFilter>, antialias: bool, ) { // Draw the different kind of strokes for an oval is straightforward, we just need apply a stroke to: @@ -64,9 +67,9 @@ fn draw_stroke_on_circle( let stroke_rect = stroke.outer_rect(rect); let mut paint = stroke.to_paint(selrect, svg_attrs, scale, antialias); - if let Some(filter) = shadow { - paint.set_image_filter(filter.clone()); - } + // Apply both blur and shadow filters if present, composing them if necessary. + let filter = compose_filters(blur, shadow); + paint.set_image_filter(filter); canvas.draw_oval(stroke_rect, &paint); } @@ -75,11 +78,17 @@ fn draw_outer_stroke_path( canvas: &skia::Canvas, path: &skia::Path, paint: &skia::Paint, + blur: Option<&ImageFilter>, antialias: bool, ) { let mut outer_paint = skia::Paint::default(); outer_paint.set_blend_mode(skia::BlendMode::SrcOver); outer_paint.set_anti_alias(antialias); + + if let Some(filter) = blur { + outer_paint.set_image_filter(filter.clone()); + } + let layer_rec = skia::canvas::SaveLayerRec::default().paint(&outer_paint); canvas.save_layer(&layer_rec); canvas.draw_path(path, paint); @@ -97,9 +106,17 @@ fn draw_inner_stroke_path( canvas: &skia::Canvas, path: &skia::Path, paint: &skia::Paint, + blur: Option<&ImageFilter>, antialias: bool, ) { - canvas.save(); + let mut inner_paint = skia::Paint::default(); + inner_paint.set_anti_alias(antialias); + if let Some(filter) = blur { + inner_paint.set_image_filter(filter.clone()); + } + + let layer_rec = skia::canvas::SaveLayerRec::default().paint(&inner_paint); + canvas.save_layer(&layer_rec); canvas.clip_path(path, skia::ClipOp::Intersect, antialias); canvas.draw_path(path, paint); canvas.restore(); @@ -117,6 +134,7 @@ pub fn draw_stroke_on_path( svg_attrs: &HashMap, scale: f32, shadow: Option<&ImageFilter>, + blur: Option<&ImageFilter>, antialias: bool, ) { let mut skia_path = path.to_skia_path(); @@ -127,19 +145,18 @@ pub fn draw_stroke_on_path( let mut paint: skia_safe::Handle<_> = stroke.to_stroked_paint(is_open, selrect, svg_attrs, scale, antialias); - if let Some(filter) = shadow { - paint.set_image_filter(filter.clone()); - } + let filter = compose_filters(blur, shadow); + paint.set_image_filter(filter); match stroke.render_kind(is_open) { StrokeKind::Inner => { - draw_inner_stroke_path(canvas, &skia_path, &paint, antialias); + draw_inner_stroke_path(canvas, &skia_path, &paint, blur, antialias); } StrokeKind::Center => { canvas.draw_path(&skia_path, &paint); } StrokeKind::Outer => { - draw_outer_stroke_path(canvas, &skia_path, &paint, antialias); + draw_outer_stroke_path(canvas, &skia_path, &paint, blur, antialias); } } @@ -151,6 +168,7 @@ pub fn draw_stroke_on_path( is_open, svg_attrs, scale, + blur, antialias, ); } @@ -164,7 +182,6 @@ fn handle_stroke_cap( p2: &Point, ) { paint.set_style(skia::PaintStyle::Fill); - paint.set_blend_mode(skia::BlendMode::Src); match cap { StrokeCap::None => {} StrokeCap::Line => { @@ -204,6 +221,7 @@ fn handle_stroke_caps( is_open: bool, svg_attrs: &HashMap, scale: f32, + blur: Option<&ImageFilter>, antialias: bool, ) { let mut points = vec![Point::default(); path.count_points()]; @@ -220,6 +238,10 @@ fn handle_stroke_caps( let mut paint_stroke = stroke.to_stroked_paint(is_open, selrect, svg_attrs, scale, antialias); + if let Some(filter) = blur { + paint_stroke.set_image_filter(filter.clone()); + } + handle_stroke_cap( canvas, stroke.cap_start, @@ -228,6 +250,7 @@ fn handle_stroke_caps( first_point, &points[1], ); + handle_stroke_cap( canvas, stroke.cap_end, @@ -370,6 +393,10 @@ fn draw_image_stroke_in_container( let mut pb = skia::Paint::default(); pb.set_blend_mode(skia::BlendMode::SrcOver); pb.set_anti_alias(antialias); + if let Some(filter) = shape.image_filter(1.) { + pb.set_image_filter(filter); + } + let layer_rec = skia::canvas::SaveLayerRec::default().paint(&pb); canvas.save_layer(&layer_rec); @@ -388,6 +415,7 @@ fn draw_image_stroke_in_container( svg_attrs, scale, None, + None, antialias, ); } @@ -399,6 +427,7 @@ fn draw_image_stroke_in_container( svg_attrs, scale, None, + None, antialias, ), @@ -435,6 +464,7 @@ fn draw_image_stroke_in_container( is_open, svg_attrs, scale, + shape.image_filter(1.).as_ref(), antialias, ); canvas.restore(); @@ -450,6 +480,9 @@ fn draw_image_stroke_in_container( let mut image_paint = skia::Paint::default(); image_paint.set_blend_mode(skia::BlendMode::SrcIn); image_paint.set_anti_alias(antialias); + if let Some(filter) = shape.image_filter(1.) { + image_paint.set_image_filter(filter); + } let src_rect = get_source_rect(size, container, image_fill); let dest_rect = get_dest_rect(container, stroke.delta()); @@ -517,11 +550,20 @@ pub fn render( svg_attrs, scale, shadow, + shape.image_filter(1.).as_ref(), antialias, ); } Type::Circle => draw_stroke_on_circle( - canvas, stroke, &selrect, &selrect, svg_attrs, scale, shadow, antialias, + canvas, + stroke, + &selrect, + &selrect, + svg_attrs, + scale, + shadow, + shape.image_filter(1.).as_ref(), + antialias, ), Type::Text(_) => { text::render( @@ -543,6 +585,7 @@ pub fn render( svg_attrs, scale, shadow, + shape.image_filter(1.).as_ref(), antialias, ); } @@ -579,7 +622,7 @@ pub fn render_text_paths( match stroke.render_kind(false) { StrokeKind::Inner => { for (path, _) in paths { - draw_inner_stroke_path(canvas, path, &paint, antialias); + draw_inner_stroke_path(canvas, path, &paint, None, antialias); } } StrokeKind::Center => { @@ -589,7 +632,7 @@ pub fn render_text_paths( } StrokeKind::Outer => { for (path, _) in paths { - draw_outer_stroke_path(canvas, path, &paint, antialias); + draw_outer_stroke_path(canvas, path, &paint, None, antialias); } } } diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 0e6ac1728d..af28641c92 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -923,6 +923,21 @@ impl Shape { } } + pub fn mask_filter(&self, scale: f32) -> Option { + if !self.blur.hidden { + match self.blur.blur_type { + BlurType::None => None, + BlurType::Layer => skia::MaskFilter::blur( + skia::BlurStyle::Normal, + self.blur.value * scale, + Some(true), + ), + } + } else { + None + } + } + pub fn is_recursive(&self) -> bool { matches!( self.shape_type, diff --git a/render-wasm/src/shapes/modifiers.rs b/render-wasm/src/shapes/modifiers.rs index 2f6ddb8920..6941245d78 100644 --- a/render-wasm/src/shapes/modifiers.rs +++ b/render-wasm/src/shapes/modifiers.rs @@ -198,7 +198,7 @@ fn propagate_transform( if let Type::Text(content) = &shape.shape_type { if content.grow_type() == GrowType::AutoHeight { - let mut paragraphs = content.get_skia_paragraphs(); + let mut paragraphs = content.get_skia_paragraphs(None, None); set_paragraphs_width(shape_bounds_after.width(), &mut paragraphs); let height = auto_height(&mut paragraphs, shape_bounds_after.width()); let resize_transform = math::resize_matrix( diff --git a/render-wasm/src/shapes/shadows.rs b/render-wasm/src/shapes/shadows.rs index 3243681821..cf8c77f6a8 100644 --- a/render-wasm/src/shapes/shadows.rs +++ b/render-wasm/src/shapes/shadows.rs @@ -1,6 +1,7 @@ use skia_safe::{self as skia, image_filters, ImageFilter, Paint}; use super::Color; +use crate::render::filters::compose_filters; #[derive(Debug, Clone, Copy, PartialEq)] pub enum ShadowStyle { @@ -62,13 +63,16 @@ impl Shadow { self.hidden } - pub fn get_drop_shadow_paint(&self, antialias: bool) -> Paint { + pub fn get_drop_shadow_paint( + &self, + antialias: bool, + blur_filter: Option<&ImageFilter>, + ) -> Paint { let mut paint = Paint::default(); - let image_filter = self.get_drop_shadow_filter(); - - paint.set_image_filter(image_filter); + let shadow_filter = self.get_drop_shadow_filter(); + let filter = compose_filters(blur_filter, shadow_filter.as_ref()); + paint.set_image_filter(filter); paint.set_anti_alias(antialias); - paint } @@ -89,14 +93,16 @@ impl Shadow { filter } - pub fn get_inner_shadow_paint(&self, antialias: bool) -> Paint { + pub fn get_inner_shadow_paint( + &self, + antialias: bool, + blur_filter: Option<&ImageFilter>, + ) -> Paint { let mut paint = Paint::default(); - - let image_filter = self.get_inner_shadow_filter(); - - paint.set_image_filter(image_filter); + let shadow_filter = self.get_inner_shadow_filter(); + let filter = compose_filters(blur_filter, shadow_filter.as_ref()); + paint.set_image_filter(filter); paint.set_anti_alias(antialias); - paint } diff --git a/render-wasm/src/shapes/text.rs b/render-wasm/src/shapes/text.rs index b684e072a8..c232e2a34b 100644 --- a/render-wasm/src/shapes/text.rs +++ b/render-wasm/src/shapes/text.rs @@ -1,11 +1,12 @@ use crate::{ math::{Matrix, Rect}, - render::{default_font, DEFAULT_EMOJI_FONT}, + render::{default_font, filters::compose_filters, DEFAULT_EMOJI_FONT}, }; use skia_safe::{ self as skia, paint::Paint, textlayout::{ParagraphBuilder, ParagraphStyle}, + ImageFilter, MaskFilter, }; use std::collections::HashSet; @@ -92,7 +93,11 @@ impl TextContent { self.paragraphs.push(paragraph); } - pub fn to_paragraphs(&self) -> Vec> { + pub fn to_paragraphs( + &self, + blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, + ) -> Vec> { let fonts = get_font_collection(); let fallback_fonts = get_fallback_fonts(); let mut paragraph_group = Vec::new(); @@ -101,7 +106,8 @@ impl TextContent { let paragraph_style = paragraph.paragraph_to_style(); let mut builder = ParagraphBuilder::new(¶graph_style, fonts); for leaf in ¶graph.children { - let text_style = leaf.to_style(paragraph, &self.bounds, fallback_fonts); + let text_style = + leaf.to_style(paragraph, &self.bounds, fallback_fonts, blur, blur_mask); let text = leaf.apply_text_transform(); builder.push_style(&text_style); builder.add_text(&text); @@ -116,6 +122,8 @@ impl TextContent { &self, stroke: &Stroke, bounds: &Rect, + blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, ) -> Vec> { let fallback_fonts = get_fallback_fonts(); let fonts = get_font_collection(); @@ -126,8 +134,12 @@ impl TextContent { std::collections::HashMap::new(); for leaf in paragraph.children.iter() { - let text_paint = merge_fills(&leaf.fills, *bounds); - let stroke_paints = get_text_stroke_paints(stroke, bounds, &text_paint); + let mut text_paint = merge_fills(&leaf.fills, *bounds); + if let Some(blur_mask) = blur_mask { + text_paint.set_mask_filter(blur_mask.clone()); + } + let stroke_paints = + get_text_stroke_paints(stroke, bounds, &text_paint, blur, blur_mask); let text: String = leaf.apply_text_transform(); for (paint_idx, stroke_paint) in stroke_paints.iter().enumerate() { @@ -135,9 +147,14 @@ impl TextContent { let paragraph_style = paragraph.paragraph_to_style(); ParagraphBuilder::new(¶graph_style, fonts) }); - - let stroke_style = - leaf.to_stroke_style(paragraph, stroke_paint, fallback_fonts); + let stroke_paint = stroke_paint.clone(); + let stroke_style = leaf.to_stroke_style( + paragraph, + &stroke_paint, + fallback_fonts, + blur, + blur_mask, + ); builder.push_style(&stroke_style); builder.add_text(&text); } @@ -167,16 +184,22 @@ impl TextContent { paragraphs } - pub fn get_skia_paragraphs(&self) -> Vec> { - self.collect_paragraphs(self.to_paragraphs()) + pub fn get_skia_paragraphs( + &self, + blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, + ) -> Vec> { + self.collect_paragraphs(self.to_paragraphs(blur, blur_mask)) } pub fn get_skia_stroke_paragraphs( &self, stroke: &Stroke, bounds: &Rect, + blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, ) -> Vec> { - self.collect_paragraphs(self.to_stroke_paragraphs(stroke, bounds)) + self.collect_paragraphs(self.to_stroke_paragraphs(stroke, bounds, blur, blur_mask)) } pub fn grow_type(&self) -> GrowType { @@ -188,7 +211,7 @@ impl TextContent { } pub fn visual_bounds(&self) -> (f32, f32) { - let mut paragraphs = self.to_paragraphs(); + let mut paragraphs = self.to_paragraphs(None, None); let height = auto_height(&mut paragraphs, self.width()); (self.width(), height) } @@ -378,10 +401,16 @@ impl TextLeaf { paragraph: &Paragraph, content_bounds: &Rect, fallback_fonts: &HashSet, + _blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, ) -> skia::textlayout::TextStyle { let mut style = skia::textlayout::TextStyle::default(); + let mut paint = merge_fills(&self.fills, *content_bounds); + + if let Some(blur_mask) = blur_mask { + paint.set_mask_filter(blur_mask.clone()); + } - let paint = merge_fills(&self.fills, *content_bounds); style.set_foreground_paint(&paint); style.set_font_size(self.font_size); style.set_letter_spacing(paragraph.letter_spacing); @@ -417,8 +446,10 @@ impl TextLeaf { paragraph: &Paragraph, stroke_paint: &Paint, fallback_fonts: &HashSet, + blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, ) -> skia::textlayout::TextStyle { - let mut style = self.to_style(paragraph, &Rect::default(), fallback_fonts); + let mut style = self.to_style(paragraph, &Rect::default(), fallback_fonts, blur, blur_mask); style.set_foreground_paint(stroke_paint); style.set_font_size(self.font_size); style.set_letter_spacing(paragraph.letter_spacing); @@ -714,7 +745,13 @@ pub fn auto_height(paragraphs: &mut [Vec], width: f32) -> f32 }) } -fn get_text_stroke_paints(stroke: &Stroke, bounds: &Rect, text_paint: &Paint) -> Vec { +fn get_text_stroke_paints( + stroke: &Stroke, + bounds: &Rect, + text_paint: &Paint, + blur: Option<&ImageFilter>, + blur_mask: Option<&MaskFilter>, +) -> Vec { let mut paints = Vec::new(); match stroke.kind { @@ -730,6 +767,9 @@ fn get_text_stroke_paints(stroke: &Stroke, bounds: &Rect, text_paint: &Paint) -> let mut paint = text_paint.clone(); paint.set_style(skia::PaintStyle::Fill); paint.set_anti_alias(true); + if let Some(blur) = blur { + paint.set_image_filter(blur.clone()); + } paints.push(paint); let mut paint = skia::Paint::default(); @@ -738,6 +778,9 @@ fn get_text_stroke_paints(stroke: &Stroke, bounds: &Rect, text_paint: &Paint) -> paint.set_anti_alias(true); paint.set_stroke_width(stroke.width * 2.0); set_paint_fill(&mut paint, &stroke.fill, bounds); + if let Some(blur) = blur { + paint.set_image_filter(blur.clone()); + } paints.push(paint); } else { let mut paint = text_paint.clone(); @@ -749,7 +792,9 @@ fn get_text_stroke_paints(stroke: &Stroke, bounds: &Rect, text_paint: &Paint) -> let mut paint = skia::Paint::default(); let image_filter = skia_safe::image_filters::erode((stroke.width, stroke.width), None, None); - paint.set_image_filter(image_filter); + + let filter = compose_filters(blur, image_filter.as_ref()); + paint.set_image_filter(filter); paint.set_anti_alias(false); paint.set_blend_mode(skia::BlendMode::DstOut); paints.push(paint); @@ -762,6 +807,9 @@ fn get_text_stroke_paints(stroke: &Stroke, bounds: &Rect, text_paint: &Paint) -> paint.set_stroke_width(stroke.width); set_paint_fill(&mut paint, &stroke.fill, bounds); + if let Some(blur) = blur { + paint.set_image_filter(blur.clone()); + } paints.push(paint); } @@ -771,14 +819,20 @@ fn get_text_stroke_paints(stroke: &Stroke, bounds: &Rect, text_paint: &Paint) -> paint.set_blend_mode(skia::BlendMode::DstOver); paint.set_anti_alias(true); paint.set_stroke_width(stroke.width * 2.0); - set_paint_fill(&mut paint, &stroke.fill, bounds); - + if let Some(blur_mask) = blur_mask { + paint.set_mask_filter(blur_mask.clone()); + } paints.push(paint); let mut paint = skia::Paint::default(); + paint.set_style(skia::PaintStyle::Fill); paint.set_blend_mode(skia::BlendMode::Clear); + paint.set_color(skia::Color::TRANSPARENT); paint.set_anti_alias(true); + if let Some(blur_mask) = blur_mask { + paint.set_mask_filter(blur_mask.clone()); + } paints.push(paint); } } diff --git a/render-wasm/src/shapes/text_paths.rs b/render-wasm/src/shapes/text_paths.rs index 45f13a0c31..c7e14d6070 100644 --- a/render-wasm/src/shapes/text_paths.rs +++ b/render-wasm/src/shapes/text_paths.rs @@ -18,7 +18,7 @@ impl TextPaths { } pub fn get_skia_paragraphs(&self) -> Vec> { - let paragraphs = self.to_paragraphs(); + let paragraphs = self.to_paragraphs(None, None); self.collect_paragraphs(paragraphs) } diff --git a/render-wasm/src/wasm/text.rs b/render-wasm/src/wasm/text.rs index af6f55ab61..fdfec34f05 100644 --- a/render-wasm/src/wasm/text.rs +++ b/render-wasm/src/wasm/text.rs @@ -44,7 +44,10 @@ pub extern "C" fn get_text_dimensions() -> *mut u8 { height = shape.selrect.height(); if let Type::Text(content) = &shape.shape_type { - let mut paragraphs = content.get_skia_paragraphs(); + let mut paragraphs = content.get_skia_paragraphs( + shape.image_filter(1.).as_ref(), + shape.mask_filter(1.).as_ref(), + ); m_width = max_width(&mut paragraphs, width); match content.grow_type() {