In this post I just want to share a couple of SVG tips regarding inline SVG. My inspiration for this series of articles is that I was trying to update a web site with a bunch of inline SVG, and I ran into a couple of issues. Some of the SVGs I found looked fine as stand-alone images, but looked pretty crappy when inlined in the HTML. In the past when I’ve hit such issues, I usually just found a different SVG or created my own, but I was using a lot of SGV for images like the Microsoft PowerApps logo. I didn’t want to use a different images, and I don’t really want to produce my own version of the image, so I needed to learn a bit more about SVG under the hood, and it turns out it wasn’t that hard to figure out.
SVG Tips #1: Beware of Display None
I’m going to start with an HTML page to display four SVGs. I’m expecting the result to look like:
Now I didn’t actually create these SVGs from scratch. I downloaded them from various sources. Then I put them inline in my HTML, without necessarily understanding all of the internal details of these SVGs. Which is wherein the problem lies. Here is my initial code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | <style type="text/css"> svg { height: 64px; width: 64px; } </style> <svg> <use xlink:href="#sym-code" /> </svg> <svg> <use xlink:href="#sym-powerautomate" /> </svg> <svg> <use xlink:href="#sym-powerapps" /> </svg> <svg> <use xlink:href="#sym-box" /> </svg> <svg> <symbol id="sym-code" viewBox="0 0 18 18" style="display:none;"> <defs> <linearGradient id="paint0_linear" x1="9" y1="15.834" x2="9" y2="5.788" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#0078d4" /> <stop offset=".502" stop-color="#4093e6" /> <stop offset=".775" stop-color="#5ea0ef" /> </linearGradient> <linearGradient id="paint1_linear" x1="3.754" y1="11.614" x2="6.975" y2="11.614" gradientTransform="rotate(44.919 5.331 11.647)" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#5ea0ef" /> <stop offset=".372" stop-color="#9fc6f5" /> <stop offset=".8" stop-color="#e4effc" /> <stop offset="1" stop-color="#fff" /> </linearGradient> <linearGradient id="paint2_linear" x1="10.83" y1="11.614" x2="14.05" y2="11.614" gradientTransform="rotate(135.081 12.473 11.646)" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#fff" /> <stop offset=".2" stop-color="#e4effc" /> <stop offset=".628" stop-color="#9fc6f5" /> <stop offset="1" stop-color="#5ea0ef" /> </linearGradient> </defs> <path d="M.5 5.788h17v9.478a.568.568 0 01-.568.568H1.068a.568.568 0 01-.568-.568V5.788z" fill="url(#paint0_linear)" /> <path d="M1.071 2.166h15.858a.568.568 0 01.568.568v3.054H.5V2.734a.568.568 0 01.571-.568z" fill="#0078d4" /> <path d="M5.244 9.632h.49V13.5a.157.157 0 01-.157.157h-.49a.157.157 0 01-.157-.157V9.945a.314.314 0 01.314-.314z" transform="rotate(-44.919 5.333 11.646)" fill="url(#paint1_linear)" /> <path d="M4.19 11.074l-.347-.347a.314.314 0 010-.444l2.562-2.554a.157.157 0 01.222 0l.346.347a.157.157 0 010 .222l-2.784 2.776z" fill="#f2f2f2" /> <path d="M12.228 9.632h.49a.157.157 0 01.157.157v3.873h-.49a.314.314 0 01-.314-.314v-3.56a.157.157 0 01.157-.157z" transform="rotate(-135.081 12.473 11.647)" fill="url(#paint2_linear)" /> <path d="M10.824 8.078l.346-.347a.157.157 0 01.222 0l2.56 2.553a.314.314 0 01.002.444l-.346.347-2.782-2.773a.157.157 0 01-.002-.224z" fill="#f2f2f2" /> <rect x="8.547" y="6.598" width=".806" height="7.634" rx=".112" transform="rotate(17.752 8.95 10.416)" fill="#f2f2f2" /> </symbol> <symbol id="sym-powerautomate" viewBox="0 0 96 96" fill="none"> <defs> <filter id="filter0_f"> <feFlood flood-opacity="0" result="BackgroundImageFix" /> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" /> <feGaussianBlur stdDeviation="0.4" result="effect1_foregroundBlur" /> </filter> <filter id="filter1_f"> <feFlood flood-opacity="0" result="BackgroundImageFix" /> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" /> <feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur" /> </filter> <linearGradient id="paint0_linear" x1="43" y1="55" x2="29" y2="10" gradientUnits="userSpaceOnUse"> <stop stop-color="#0D36A5" /> <stop offset="1" stop-color="#1152D4" /> </linearGradient> <linearGradient id="paint1_linear" x1="46" y1="10" x2="46" y2="86" gradientUnits="userSpaceOnUse"> <stop stop-color="#84CAFF" /> <stop offset="1" stop-color="#61B1FB" /> </linearGradient> <linearGradient id="paint2_linear" x1="37.5" y1="10" x2="37.5" y2="86" gradientUnits="userSpaceOnUse"> <stop stop-color="#3B90F5" /> <stop offset="1" stop-color="#2A78EE" /> </linearGradient> <clipPath id="clip0"> <rect width="96" height="96" fill="white" /> </clipPath> <clipPath id="clip1"> <rect width="96" height="96" fill="white" /> </clipPath> </defs> <g clip-path="url(#clip0)"> <g clip-path="url(#clip1)"> <mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="-1" y="10" width="97" height="76"> <path d="M61.2116 10C62.3496 10 63.4337 10.4847 64.1925 11.3328L94.6136 45.3328C95.9723 46.8514 95.9723 49.1486 94.6136 50.6672L64.1925 84.6672C63.4337 85.5153 62.3496 86 61.2116 86H3.94634C0.488777 86 -1.34012 81.9095 0.965366 79.3328L29 48L0.965366 16.6672C-1.34012 14.0905 0.488777 10 3.94634 10H61.2116Z" fill="white" /> </mask> <g mask="url(#mask0)"> <path d="M63 10L29 48L-5 10H63Z" fill="url(#paint0_linear)" /> <g filter="url(#filter0_f)"> <path d="M63 10.4L-5 86.4H63L97 48.4L63 10.4Z" fill="black" fill-opacity="0.24" /> </g> <g filter="url(#filter1_f)"> <path d="M63 12L-5 88H63L97 50L63 12Z" fill="black" fill-opacity="0.32" /> </g> <path d="M-5 86L63 10L97 48L63 86H-5Z" fill="url(#paint1_linear)" /> <path d="M-5 86L63 10L80 29L29 86H-5Z" fill="url(#paint2_linear)" /> </g> </g> </g> </symbol> <symbol id="sym-powerapps" viewBox="0 0 96 96" fill="none"> <defs> <filter id="filter0_f"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur"/> </filter> <filter id="filter1_f"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <feGaussianBlur stdDeviation="0.38" result="effect1_foregroundBlur"/> </filter> <linearGradient id="paint0_linear" x1="71" y1="96.0002" x2="15" y2="-40.9998" gradientUnits="userSpaceOnUse"> <stop stop-color="#742774"/> <stop offset="1" stop-color="#BB35A4"/> </linearGradient> <linearGradient id="paint1_linear" x1="32" y1="0.0002436" x2="78" y2="96.0002" gradientUnits="userSpaceOnUse"> <stop stop-color="#E48CC7"/> <stop offset="1" stop-color="#D467B9"/> </linearGradient> <linearGradient id="paint2_linear" x1="62" y1="29.0002" x2="76" y2="72" gradientUnits="userSpaceOnUse"> <stop stop-color="#E9A1CB"/> <stop offset="1" stop-color="#E48CC7"/> </linearGradient> <clipPath id="clip0"> <rect width="96" height="96" fill="white"/> </clipPath> <clipPath id="clip1"> <rect width="96" height="96" fill="white"/> </clipPath> <clipPath id="clip2"> <rect width="96" height="96" fill="white" transform="translate(0 0.00012207)"/> </clipPath> </defs> <g clip-path="url(#clip0)"> <g clip-path="url(#clip1)"> <g clip-path="url(#clip2)"> <mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="-1" y="1" width="97" height="94"> <path d="M1.45715 44.049C-0.522237 46.3111 -0.522238 49.6889 1.45715 51.951L36.9897 92.5596C38.5833 94.381 41.4167 94.381 43.0103 92.5596L46.8367 88.1866L51.0504 92.7833C52.6358 94.5128 55.3623 94.5128 56.9476 92.7833L94.2825 52.0543C96.3853 49.7604 96.3853 46.2396 94.2825 43.9457L56.9476 3.21667C55.3623 1.4872 52.6358 1.4872 51.0504 3.21667L46.8367 7.81341L43.0103 3.44035C41.4167 1.61904 38.5833 1.61904 36.9897 3.44035L1.45715 44.049Z" fill="white"/> </mask> <g mask="url(#mask0)"> <path d="M40 96L-2 48L40 0L82 48L40 96Z" fill="url(#paint0_linear)"/> <g filter="url(#filter0_f)"> <path d="M53.999 2L97.999 50L53.999 98L34.4767 76.7029C33.0748 75.1736 33.0748 72.8264 34.4767 71.2971L51.5214 52.7029C52.9232 51.1736 52.9232 48.8264 51.5214 47.2971L34.4767 28.7029C33.0748 27.1736 33.0748 24.8264 34.4767 23.2971L53.999 2Z" fill="black" fill-opacity="0.32"/> </g> <g filter="url(#filter1_f)"> <path d="M53.999 0.380127L97.999 48.3801L53.999 96.3801L34.4767 75.083C33.0748 73.5537 33.0748 71.2065 34.4767 69.6772L51.5214 51.083C52.9232 49.5537 52.9232 47.2065 51.5214 45.6772L34.4767 27.083C33.0748 25.5537 33.0748 23.2065 34.4767 21.6772L53.999 0.380127Z" fill="black" fill-opacity="0.24"/> </g> <path d="M53.999 0L97.999 48L53.999 96L34.4767 74.7029C33.0748 73.1736 33.0748 70.8264 34.4767 69.2971L51.5214 50.7029C52.9232 49.1736 52.9232 46.8264 51.5214 45.2971L34.4767 26.7029C33.0748 25.1736 33.0748 22.8264 34.4767 21.2971L53.999 0Z" fill="url(#paint1_linear)"/> <path d="M73.0514 27.2167C74.6367 25.4872 77.3633 25.4872 78.9486 27.2167L98 48L78.9486 68.7833C77.3633 70.5128 74.6367 70.5128 73.0514 68.7833L57.7165 52.0543C55.6137 49.7604 55.6137 46.2396 57.7165 43.9457L73.0514 27.2167Z" fill="url(#paint2_linear)"/> </g> </g> </g> </g> </symbol> <symbol id="sym-box" viewBox="0 0 32.7 33.3"> <g> <g> <path class="box1" d="M15,33.3L0,27.9v-22L15,11V33.3"></path> <path class="box2" d="M17.7,33.3l15-5.4v-22l-15,5.1V33.3"></path> <path class="box3" d="M1.5,4.3L16.7,0l14.1,4.5L16.7,9.3L1.5,4.3"></path> </g> </g> </symbol> </svg> |
And here is what that initially looks like:
Yeah…well…that’s not right, nor is it pretty! There are actually numerous issues with this code, all of which are highlighted in the above source. It looks like a lot, but there are really only 2 classes of errors in this HTML. I’m going to address only the first one right now. Like in my previous post, I defined all of the SVGs as symbols in a single SVG at the bottom of the HTML, and then I just reference those symbols where I want the individual SVGs to appear.
The SVG at the bottom doesn’t actually contain anything that is visible to the user. It only has symbols, it doesn’t also use those symbols. But left to it’s own devices, the browser will reserve space for this SVG (chrome makes it 300×150 because I didn’t specify a viewBox). I don’t really want that, so I’ve set the display to none in the style for the SVG. I did the same thing in my last blog post, but didn’t explain it. Turns out, that’s not such a bad thing, because it’s a bad idea.
The problem is that some elements within an SVG are not displayed if the symbol is display none, even if the SVG that is using the symbol is displayed. Why it’s just some parts is what’s confusing to me, but it is what it is. In this case, the primary culprit is the linear gradient filter elements. To fix it, I just change style=”display:none;“ to style=”display:flex;height:0;“ and that fixes it. Now I’ve got:
And of course, that’s not what I was expecting either, but that’s because I haven’t fixed all of the other highlighted issues above. I’ll deal with those in the next section, but first of my SVG tips: don’t use display none to hide an SVG of symbols that you intend to use elsewhere. Instead, set the height to 0 and the display to flex (without setting display to flex, there is still a little height reserved for the SVG).
Beware of Duplicate Ids
All of the other errors in the above HTML are the same issue, duplicate element ids, which makes the HTML invalid. The problem is that SVGs are generally drawn in an editor like Adobe Illustrator, and it has a lot of choices how to represent what you draw in XML. It can assign ids to elements and then reference them elsewhere. But it is creating a standalone SVG file, so it can create simple ids like clip0 without worrying about conflicts.
But that’s not the case when you lift and shift the entire SVG into an HTML page. There are now a bunch of other elements with ids, including possibly a bunch of other SVGs, and if any of those also use clip0 as an id, you’re leaving it up to the browser to resolve the conflict and you probably won’t love the result. So second of my SVG tips: make sure all ids are unique within a given HTML file. That’s just straight up HTML, not really specific to SVG, duplicate ids are illegal in HMTL.
To resolve this, I’m going to:
- In the HTML source, do a search and substitute for clip0.
- Inside the PowerAutomate SVG, I’ll add a prefix to change clip0 to powerautomate_clip0.
- Inside the PowerApps SVG, I’ll do the same, but change to powerapps_clip0.
Ok, one down, a bunch more to go. I just search for id=, and in VSCode it highlights all hits so I can quickly scan through the SVGs and look for ids that look pretty generic, and then change them to something more specific to the SVG. Don’t just replace the ids that conflict right now, do them all. It will potentially save you some trouble down the road if you add more inline SVG.
After making these changes, my HTML looks like this in the browser:
Much better!
Note that the only issue I had remaining was duplicate ids, but you can have the same sort of issues with duplicate class names. SVG editors will sometimes put classes on paths, and add some inline CSS to define the fill, stroke, or linear gradient of the path. Again, they generally produce very generic class names like S0, which they ensure are unique within the SVG, but once you copy it inline that could be a problem. The solution is the same, search for class=, look for generic names, and add an SVG specific prefix for each class name within each SVG.
Sum Up
Armed with a bit of knowledge about the internals of SVG, they are a powerful tool for spicing up a web site or GUI. Here is the final code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | <style type="text/css"> svg { height: 64px; width: 64px; } </style> <svg> <use xlink:href="#sym-code" /> </svg> <svg> <use xlink:href="#sym-powerautomate" /> </svg> <svg> <use xlink:href="#sym-powerapps" /> </svg> <svg> <use xlink:href="#sym-box" /> </svg> <svg> <symbol id="sym-code" viewBox="0 0 18 18" style="display:flex;height:0"> <defs> <linearGradient id="code_paint0_linear" x1="9" y1="15.834" x2="9" y2="5.788" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#0078d4" /> <stop offset=".502" stop-color="#4093e6" /> <stop offset=".775" stop-color="#5ea0ef" /> </linearGradient> <linearGradient id="code_paint1_linear" x1="3.754" y1="11.614" x2="6.975" y2="11.614" gradientTransform="rotate(44.919 5.331 11.647)" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#5ea0ef" /> <stop offset=".372" stop-color="#9fc6f5" /> <stop offset=".8" stop-color="#e4effc" /> <stop offset="1" stop-color="#fff" /> </linearGradient> <linearGradient id="code_paint2_linear" x1="10.83" y1="11.614" x2="14.05" y2="11.614" gradientTransform="rotate(135.081 12.473 11.646)" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#fff" /> <stop offset=".2" stop-color="#e4effc" /> <stop offset=".628" stop-color="#9fc6f5" /> <stop offset="1" stop-color="#5ea0ef" /> </linearGradient> </defs> <path d="M.5 5.788h17v9.478a.568.568 0 01-.568.568H1.068a.568.568 0 01-.568-.568V5.788z" fill="url(#code_paint0_linear)" /> <path d="M1.071 2.166h15.858a.568.568 0 01.568.568v3.054H.5V2.734a.568.568 0 01.571-.568z" fill="#0078d4" /> <path d="M5.244 9.632h.49V13.5a.157.157 0 01-.157.157h-.49a.157.157 0 01-.157-.157V9.945a.314.314 0 01.314-.314z" transform="rotate(-44.919 5.333 11.646)" fill="url(#code_paint1_linear)" /> <path d="M4.19 11.074l-.347-.347a.314.314 0 010-.444l2.562-2.554a.157.157 0 01.222 0l.346.347a.157.157 0 010 .222l-2.784 2.776z" fill="#f2f2f2" /> <path d="M12.228 9.632h.49a.157.157 0 01.157.157v3.873h-.49a.314.314 0 01-.314-.314v-3.56a.157.157 0 01.157-.157z" transform="rotate(-135.081 12.473 11.647)" fill="url(#code_paint2_linear)" /> <path d="M10.824 8.078l.346-.347a.157.157 0 01.222 0l2.56 2.553a.314.314 0 01.002.444l-.346.347-2.782-2.773a.157.157 0 01-.002-.224z" fill="#f2f2f2" /> <rect x="8.547" y="6.598" width=".806" height="7.634" rx=".112" transform="rotate(17.752 8.95 10.416)" fill="#f2f2f2" /> </symbol> <symbol id="sym-powerautomate" viewBox="0 0 96 96" fill="none"> <defs> <filter id="powerautomate_filter0_f"> <feFlood flood-opacity="0" result="BackgroundImageFix" /> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" /> <feGaussianBlur stdDeviation="0.4" result="effect1_foregroundBlur" /> </filter> <filter id="powerautomate_filter1_f"> <feFlood flood-opacity="0" result="BackgroundImageFix" /> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" /> <feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur" /> </filter> <linearGradient id="powerautomate_paint0_linear" x1="43" y1="55" x2="29" y2="10" gradientUnits="userSpaceOnUse"> <stop stop-color="#0D36A5" /> <stop offset="1" stop-color="#1152D4" /> </linearGradient> <linearGradient id="powerautomate_paint1_linear" x1="46" y1="10" x2="46" y2="86" gradientUnits="userSpaceOnUse"> <stop stop-color="#84CAFF" /> <stop offset="1" stop-color="#61B1FB" /> </linearGradient> <linearGradient id="powerautomate_paint2_linear" x1="37.5" y1="10" x2="37.5" y2="86" gradientUnits="userSpaceOnUse"> <stop stop-color="#3B90F5" /> <stop offset="1" stop-color="#2A78EE" /> </linearGradient> <clipPath id="powerautomate_clip0"> <rect width="96" height="96" fill="white" /> </clipPath> <clipPath id="powerautomate_clip1"> <rect width="96" height="96" fill="white" /> </clipPath> </defs> <g clip-path="url(#powerautomate_clip0)"> <g clip-path="url(#powerautomate_clip1)"> <mask id="powerautomate_mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="-1" y="10" width="97" height="76"> <path d="M61.2116 10C62.3496 10 63.4337 10.4847 64.1925 11.3328L94.6136 45.3328C95.9723 46.8514 95.9723 49.1486 94.6136 50.6672L64.1925 84.6672C63.4337 85.5153 62.3496 86 61.2116 86H3.94634C0.488777 86 -1.34012 81.9095 0.965366 79.3328L29 48L0.965366 16.6672C-1.34012 14.0905 0.488777 10 3.94634 10H61.2116Z" fill="white" /> </mask> <g mask="url(#powerautomate_mask0)"> <path d="M63 10L29 48L-5 10H63Z" fill="url(#powerautomate_paint0_linear)" /> <g filter="url(#powerautomate_filter0_f)"> <path d="M63 10.4L-5 86.4H63L97 48.4L63 10.4Z" fill="black" fill-opacity="0.24" /> </g> <g filter="url(#powerautomate_filter1_f)"> <path d="M63 12L-5 88H63L97 50L63 12Z" fill="black" fill-opacity="0.32" /> </g> <path d="M-5 86L63 10L97 48L63 86H-5Z" fill="url(#powerautomate_paint1_linear)" /> <path d="M-5 86L63 10L80 29L29 86H-5Z" fill="url(#powerautomate_paint2_linear)" /> </g> </g> </g> </symbol> <symbol id="sym-powerapps" viewBox="0 0 96 96" fill="none"> <defs> <filter id="powerapps_filter0_f"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur"/> </filter> <filter id="powerapps_filter1_f"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <feGaussianBlur stdDeviation="0.38" result="effect1_foregroundBlur"/> </filter> <linearGradient id="powerapps_paint0_linear" x1="71" y1="96.0002" x2="15" y2="-40.9998" gradientUnits="userSpaceOnUse"> <stop stop-color="#742774"/> <stop offset="1" stop-color="#BB35A4"/> </linearGradient> <linearGradient id="powerapps_paint1_linear" x1="32" y1="0.0002436" x2="78" y2="96.0002" gradientUnits="userSpaceOnUse"> <stop stop-color="#E48CC7"/> <stop offset="1" stop-color="#D467B9"/> </linearGradient> <linearGradient id="powerapps_paint2_linear" x1="62" y1="29.0002" x2="76" y2="72" gradientUnits="userSpaceOnUse"> <stop stop-color="#E9A1CB"/> <stop offset="1" stop-color="#E48CC7"/> </linearGradient> <clipPath id="powerapps_clip0"> <rect width="96" height="96" fill="white"/> </clipPath> <clipPath id="powerapps_clip1"> <rect width="96" height="96" fill="white"/> </clipPath> <clipPath id="powerapps_clip1"> <rect width="96" height="96" fill="white" transform="translate(0 0.00012207)"/> </clipPath> </defs> <g clip-path="url(#powerapps_clip0)"> <g clip-path="url(#powerapps_clip1)"> <g clip-path="url(#powerapps_clip1)"> <mask id="powerapps_mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="-1" y="1" width="97" height="94"> <path d="M1.45715 44.049C-0.522237 46.3111 -0.522238 49.6889 1.45715 51.951L36.9897 92.5596C38.5833 94.381 41.4167 94.381 43.0103 92.5596L46.8367 88.1866L51.0504 92.7833C52.6358 94.5128 55.3623 94.5128 56.9476 92.7833L94.2825 52.0543C96.3853 49.7604 96.3853 46.2396 94.2825 43.9457L56.9476 3.21667C55.3623 1.4872 52.6358 1.4872 51.0504 3.21667L46.8367 7.81341L43.0103 3.44035C41.4167 1.61904 38.5833 1.61904 36.9897 3.44035L1.45715 44.049Z" fill="white"/> </mask> <g mask="url(#powerapps_mask0)"> <path d="M40 96L-2 48L40 0L82 48L40 96Z" fill="url(#powerapps_paint0_linear)"/> <g filter="url(#powerapps_filter0_f)"> <path d="M53.999 2L97.999 50L53.999 98L34.4767 76.7029C33.0748 75.1736 33.0748 72.8264 34.4767 71.2971L51.5214 52.7029C52.9232 51.1736 52.9232 48.8264 51.5214 47.2971L34.4767 28.7029C33.0748 27.1736 33.0748 24.8264 34.4767 23.2971L53.999 2Z" fill="black" fill-opacity="0.32"/> </g> <g filter="url(#powerapps_filter1_f)"> <path d="M53.999 0.380127L97.999 48.3801L53.999 96.3801L34.4767 75.083C33.0748 73.5537 33.0748 71.2065 34.4767 69.6772L51.5214 51.083C52.9232 49.5537 52.9232 47.2065 51.5214 45.6772L34.4767 27.083C33.0748 25.5537 33.0748 23.2065 34.4767 21.6772L53.999 0.380127Z" fill="black" fill-opacity="0.24"/> </g> <path d="M53.999 0L97.999 48L53.999 96L34.4767 74.7029C33.0748 73.1736 33.0748 70.8264 34.4767 69.2971L51.5214 50.7029C52.9232 49.1736 52.9232 46.8264 51.5214 45.2971L34.4767 26.7029C33.0748 25.1736 33.0748 22.8264 34.4767 21.2971L53.999 0Z" fill="url(#powerapps_paint1_linear)"/> <path d="M73.0514 27.2167C74.6367 25.4872 77.3633 25.4872 78.9486 27.2167L98 48L78.9486 68.7833C77.3633 70.5128 74.6367 70.5128 73.0514 68.7833L57.7165 52.0543C55.6137 49.7604 55.6137 46.2396 57.7165 43.9457L73.0514 27.2167Z" fill="url(#powerapps_paint2_linear)"/> </g> </g> </g> </g> </symbol> <symbol id="sym-box" viewBox="0 0 32.7 33.3"> <g> <g> <path class="box1" d="M15,33.3L0,27.9v-22L15,11V33.3"></path> <path class="box2" d="M17.7,33.3l15-5.4v-22l-15,5.1V33.3"></path> <path class="box3" d="M1.5,4.3L16.7,0l14.1,4.5L16.7,9.3L1.5,4.3"></path> </g> </g> </symbol> </svg> |