agent-robot-avatar 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +84 -19
  3. package/agent-robot-avatar-lite.js +44 -0
  4. package/agent-robot-avatar.js +2 -1
  5. package/index.d.ts +64 -0
  6. package/lite.d.ts +5 -0
  7. package/package.json +11 -6
  8. package/src/agent-robot-avatar-core.js +5 -2
  9. package/src/agent-robot-avatar-runtime.js +4 -1
  10. package/src/agent-robot-avatar-skin-patterns.js +234 -0
  11. package/src/agent-robot-avatar-skins.js +256 -0
  12. package/src/agent-robot-avatar-version.js +1 -1
  13. package/src/skins/catalog.js +218 -0
  14. package/src/skins/collection-materials.js +118 -0
  15. package/src/skins/eyelids.js +32 -0
  16. package/src/skins/glaze-variants.js +29 -0
  17. package/src/skins/layered-texture.js +162 -0
  18. package/src/skins/material-data.js +111 -0
  19. package/src/skins/material-library.js +302 -0
  20. package/src/skins/metal-tint.js +11 -0
  21. package/src/skins/more-materials.js +69 -0
  22. package/src/skins/native.js +754 -0
  23. package/src/skins/paints.js +3 -0
  24. package/src/skins/revised-materials.js +44 -0
  25. package/src/skins/second-pass-materials.js +71 -0
  26. package/src/skins/soft-materials.js +111 -0
  27. package/src/skins/sports-materials.js +38 -0
  28. package/src/skins/wood-materials.js +68 -0
  29. package/assets/support/alipay.png +0 -0
  30. package/assets/support/wechat-pay.png +0 -0
  31. package/docs/README.de.md +0 -185
  32. package/docs/README.es.md +0 -185
  33. package/docs/README.fr.md +0 -185
  34. package/docs/README.ja.md +0 -185
  35. package/docs/README.ko.md +0 -185
  36. package/docs/README.pt.md +0 -185
  37. package/docs/README.ru.md +0 -185
  38. package/docs/README.zh-CN.md +0 -202
  39. package/docs/README.zh-TW.md +0 -185
@@ -0,0 +1,3 @@
1
+ // Final hand adjustments made in the skin workshop, applied after painting.
2
+ // Keyed by skin number.
3
+ export const SKIN_PAINTS = {"101":{"paint":[{"id":"material-blackglaze-antenna","path":[],"attributes":{"r":"0.88"}},{"id":"material-blackglaze-antenna","path":[0],"attributes":{"stop-color":"#c0c9d3"}},{"id":"material-blackglaze-antenna","path":[1],"attributes":{"stop-color":"#27323f"}},{"id":"material-blackglaze-antenna","path":[2],"attributes":{"stop-color":"#76818f"}},{"id":"material-blackglaze-texture","path":[0],"attributes":{"transform":"translate(34 35.400000000000006) scale(0.95 0.83)"}}]},"303":{"paint":[{"id":"skin-eye-glass","path":[],"attributes":{"y1":"0.147","y2":"0.853"}},{"id":"skin-eye-sink","path":[1],"attributes":{"dx":"4.244","dy":"4.242"}},{"id":"skin-eye-sink-offset","path":[],"attributes":{"dx":"4.244","dy":"4.242"}}]},"308":{"paint":[{"id":"skin-eye-glass","path":[],"attributes":{"x1":"0.148","y1":"0.145","x2":"0.852","y2":"0.855"}},{"id":"skin-eye-sink","path":[1],"attributes":{"dx":"4.224","dy":"4.261"}},{"id":"skin-eye-sink-offset","path":[],"attributes":{"dx":"4.224","dy":"4.261"}},{"id":"skin-antenna","path":[],"attributes":{"cx":"0.351"}}]},"309":{"paint":[{"id":"skin-volume","path":[],"attributes":{"cy":"0.315"}},{"id":"skin-eye-glass","path":[],"attributes":{"x1":"0.122","y1":"0.173","x2":"0.878","y2":"0.827"}},{"id":"skin-eye-sink","path":[1],"attributes":{"dx":"4.541","dy":"3.921"}},{"id":"skin-eye-sink-offset","path":[],"attributes":{"dx":"4.541","dy":"3.921"}},{"id":"skin-antenna","path":[],"attributes":{"cx":"0.349","cy":"0.226"}}]},"312":{"paint":[{"id":"skin-sheen-band","path":[0],"attributes":{"stop-color":"#ebf8ed"}},{"id":"skin-sheen-band","path":[2],"attributes":{"stop-color":"#b4e5bd"}},{"id":"skin-sheen-band","path":[4],"attributes":{"stop-color":"#ebf8ed"}},{"id":"skin-base","path":[1],"attributes":{"stop-color":"#61c875"}},{"id":"skin-base","path":[2],"attributes":{"stop-color":"#42bd5a"}},{"id":"skin-base","path":[3],"attributes":{"stop-color":"#42bd5a"}},{"id":"skin-eye-glass","path":[],"attributes":{"x2":"0.8539999999999999","y2":"0.8539999999999999"}}]},"503":{"paint":[{"id":"skin-sheen-band","path":[2],"attributes":{"stop-color":"#80f28d"}},{"id":"skin-base","path":[1],"attributes":{"stop-color":"#24b237"}},{"id":"skin-sheen-glint","path":[7],"attributes":{"stop-opacity":"0.7648"}},{"id":"skin-eye-glass","path":[],"attributes":{"x2":"0.8539999999999999","y2":"0.8539999999999999"}}]},"509":{"paint":[{"id":"skin-shine","path":[],"attributes":{"cy":"0.116"}},{"id":"skin-edge","path":[],"attributes":{"cy":"0.809"}},{"id":"skin-eye-glass","path":[],"attributes":{"x1":"0.144","y1":"0.149","x2":"0.856","y2":"0.851"}},{"id":"skin-eye-sink","path":[1],"attributes":{"dx":"3.556","dy":"3.515"}},{"id":"skin-eye-sink-offset","path":[],"attributes":{"dx":"3.556","dy":"3.515"}},{"id":"skin-antenna","path":[],"attributes":{"cy":"0.216"}}],"properties":{}},"606":{"paint":[{"id":"skin-base","path":[1],"attributes":{"stop-color":"#fbac23"}},{"id":"skin-base","path":[3],"attributes":{"stop-color":"#fcae27"}},{"id":"skin-eye-glass","path":[],"attributes":{"x2":"0.8539999999999999","y2":"0.8539999999999999"}}]},"609":{"paint":[{"id":"skin-eye-glass","path":[],"attributes":{"y1":"0.147","y2":"0.853"}},{"id":"skin-eye-sink","path":[1],"attributes":{"dx":"5.659","dy":"5.655"}},{"id":"skin-eye-sink-offset","path":[],"attributes":{"dx":"5.659","dy":"5.655"}},{"id":"skin-eye-hl","path":[],"attributes":{"cx":"-4.999","cy":"5.505"}},{"id":"skin-eye-spark","path":[],"attributes":{"cx":"7.999","cy":"8.995"}}],"properties":{}},"703":{"paint":[{"id":"skin-shine","path":[],"attributes":{"cx":"0.367","cy":"0.138"}},{"id":"skin-volume","path":[],"attributes":{"cx":"0.447","cy":"0.321"}},{"id":"skin-rim","path":[],"attributes":{"x1":"0.278","x2":"0.722"}},{"id":"skin-edge","path":[],"attributes":{"cx":"0.687","cy":"0.794"}},{"id":"skin-antenna","path":[],"attributes":{"cx":"0.367","cy":"0.238"}}]},"803":{"paint":[{"selector":"ellipse[fill=\"url(#material-clearweighted-texture-transmitted)\"]","attributes":{"opacity":"0.55"}}]},"901":{"paint":[{"id":"material-golddrop-shine","path":[3],"attributes":{"stop-color":"#ffffff"}},{"id":"material-golddrop-volume","path":[1],"attributes":{"stop-color":"#251e0a"}},{"id":"material-golddrop-volume","path":[2],"attributes":{"stop-color":"#251e0a"}},{"id":"material-golddrop-volume","path":[3],"attributes":{"stop-color":"#251e0a"}}]},"902":{"paint":[{"id":"material-deepmetalgold-volume","path":[1],"attributes":{"stop-color":"#181000"}},{"id":"material-deepmetalgold-volume","path":[2],"attributes":{"stop-color":"#181000"}},{"id":"material-deepmetalgold-volume","path":[3],"attributes":{"stop-color":"#181000"}},{"id":"material-deepmetalgold-texture-studio-dark","path":[0],"attributes":{"stop-color":"#764e00"}},{"id":"material-deepmetalgold-texture-studio-dark","path":[1],"attributes":{"stop-color":"#976400"}},{"id":"material-deepmetalgold-texture-studio-dark","path":[2],"attributes":{"stop-color":"#c3902a"}},{"id":"material-deepmetalgold-texture-studio-dark","path":[3],"attributes":{"stop-color":"#dbae55"}},{"id":"material-deepmetalgold-texture-underside","path":[0],"attributes":{"stop-color":"#845700"}},{"id":"material-deepmetalgold-texture-underside","path":[1],"attributes":{"stop-color":"#a26d07"}},{"id":"material-deepmetalgold-texture-underside","path":[2],"attributes":{"stop-color":"#cf9e3d"}},{"id":"material-deepmetalgold-texture-studio-white","path":[2],"attributes":{"stop-color":"#fef9ef"}},{"id":"material-deepmetalgold-texture-studio-white","path":[3],"attributes":{"stop-color":"#fbf0da"}},{"id":"material-deepmetalgold-texture-rim-light","path":[0],"attributes":{"stop-color":"#fefaf2"}},{"id":"material-deepmetalgold-texture-rim-light","path":[1],"attributes":{"stop-color":"#fcf4e4"}},{"id":"material-deepmetalgold-texture-rim-light","path":[2],"attributes":{"stop-color":"#f7e4be"}},{"id":"material-deepmetalgold-texture-rim-light","path":[3],"attributes":{"stop-color":"#f7e4be"}},{"id":"material-deepmetalgold-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#f5dfb4"}},{"id":"material-deepmetalgold-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#f5dfb4"}},{"id":"material-deepmetalgold-texture-warm-room","path":[0],"attributes":{"stop-color":"#eecf91"}},{"id":"material-deepmetalgold-texture-warm-room","path":[1],"attributes":{"stop-color":"#eecf91"}}]},"903":{"paint":[{"id":"material-deepmetalrose-volume","path":[1],"attributes":{"stop-color":"#200d0b"}},{"id":"material-deepmetalrose-volume","path":[2],"attributes":{"stop-color":"#200d0b"}},{"id":"material-deepmetalrose-volume","path":[3],"attributes":{"stop-color":"#200d0b"}},{"id":"material-deepmetalrose-texture-studio-dark","path":[0],"attributes":{"stop-color":"#88433b"}},{"id":"material-deepmetalrose-texture-studio-dark","path":[1],"attributes":{"stop-color":"#a5584f"}},{"id":"material-deepmetalrose-texture-studio-dark","path":[2],"attributes":{"stop-color":"#d1837a"}},{"id":"material-deepmetalrose-texture-studio-dark","path":[3],"attributes":{"stop-color":"#e7a39b"}},{"id":"material-deepmetalrose-texture-underside","path":[0],"attributes":{"stop-color":"#954b43"}},{"id":"material-deepmetalrose-texture-underside","path":[1],"attributes":{"stop-color":"#b06158"}},{"id":"material-deepmetalrose-texture-underside","path":[2],"attributes":{"stop-color":"#dc928a"}},{"id":"material-deepmetalrose-texture-studio-white","path":[2],"attributes":{"stop-color":"#fff8f7"}},{"id":"material-deepmetalrose-texture-studio-white","path":[3],"attributes":{"stop-color":"#feedec"}},{"id":"material-deepmetalrose-texture-rim-light","path":[0],"attributes":{"stop-color":"#fff9f8"}},{"id":"material-deepmetalrose-texture-rim-light","path":[1],"attributes":{"stop-color":"#fff2f1"}},{"id":"material-deepmetalrose-texture-rim-light","path":[2],"attributes":{"stop-color":"#fcdfdc"}},{"id":"material-deepmetalrose-texture-rim-light","path":[3],"attributes":{"stop-color":"#fcdfdc"}},{"id":"material-deepmetalrose-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#fbdad6"}},{"id":"material-deepmetalrose-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#fbdad6"}},{"id":"material-deepmetalrose-texture-warm-room","path":[0],"attributes":{"stop-color":"#f7c7c2"}},{"id":"material-deepmetalrose-texture-warm-room","path":[1],"attributes":{"stop-color":"#f7c7c2"}}]},"904":{"paint":[{"id":"material-copperdeep-volume","path":[1],"attributes":{"stop-color":"#23140c"}},{"id":"material-copperdeep-volume","path":[2],"attributes":{"stop-color":"#23140c"}},{"id":"material-copperdeep-volume","path":[3],"attributes":{"stop-color":"#23140c"}}]},"905":{"paint":[{"id":"material-deepmetalcopper-volume","path":[1],"attributes":{"stop-color":"#230d00"}},{"id":"material-deepmetalcopper-volume","path":[2],"attributes":{"stop-color":"#230d00"}},{"id":"material-deepmetalcopper-volume","path":[3],"attributes":{"stop-color":"#230d00"}},{"id":"material-deepmetalcopper-texture-studio-dark","path":[0],"attributes":{"stop-color":"#934415"}},{"id":"material-deepmetalcopper-texture-studio-dark","path":[1],"attributes":{"stop-color":"#b15925"}},{"id":"material-deepmetalcopper-texture-studio-dark","path":[2],"attributes":{"stop-color":"#de844f"}},{"id":"material-deepmetalcopper-texture-studio-dark","path":[3],"attributes":{"stop-color":"#f2a376"}},{"id":"material-deepmetalcopper-texture-underside","path":[0],"attributes":{"stop-color":"#a04c1b"}},{"id":"material-deepmetalcopper-texture-underside","path":[1],"attributes":{"stop-color":"#bc622c"}},{"id":"material-deepmetalcopper-texture-underside","path":[2],"attributes":{"stop-color":"#e89360"}},{"id":"material-deepmetalcopper-texture-studio-white","path":[2],"attributes":{"stop-color":"#fff8f4"}},{"id":"material-deepmetalcopper-texture-studio-white","path":[3],"attributes":{"stop-color":"#ffeee4"}},{"id":"material-deepmetalcopper-texture-rim-light","path":[0],"attributes":{"stop-color":"#fff9f6"}},{"id":"material-deepmetalcopper-texture-rim-light","path":[1],"attributes":{"stop-color":"#fff3eb"}},{"id":"material-deepmetalcopper-texture-rim-light","path":[2],"attributes":{"stop-color":"#ffe0ce"}},{"id":"material-deepmetalcopper-texture-rim-light","path":[3],"attributes":{"stop-color":"#ffe0ce"}},{"id":"material-deepmetalcopper-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#ffdbc6"}},{"id":"material-deepmetalcopper-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#ffdbc6"}},{"id":"material-deepmetalcopper-texture-warm-room","path":[0],"attributes":{"stop-color":"#fec8a8"}},{"id":"material-deepmetalcopper-texture-warm-room","path":[1],"attributes":{"stop-color":"#fec8a8"}}]},"906":{"paint":[{"id":"material-iphonecosmicorange-volume","path":[1],"attributes":{"stop-color":"#290e00"}},{"id":"material-iphonecosmicorange-volume","path":[2],"attributes":{"stop-color":"#290e00"}},{"id":"material-iphonecosmicorange-volume","path":[3],"attributes":{"stop-color":"#290e00"}},{"id":"material-iphonecosmicorange-texture-studio-dark","path":[0],"attributes":{"stop-color":"#b44104"}},{"id":"material-iphonecosmicorange-texture-studio-dark","path":[1],"attributes":{"stop-color":"#d45512"}},{"id":"material-iphonecosmicorange-texture-studio-dark","path":[2],"attributes":{"stop-color":"#fe813e"}},{"id":"material-iphonecosmicorange-texture-studio-dark","path":[3],"attributes":{"stop-color":"#ffa373"}},{"id":"material-iphonecosmicorange-texture-underside","path":[0],"attributes":{"stop-color":"#c24909"}},{"id":"material-iphonecosmicorange-texture-underside","path":[1],"attributes":{"stop-color":"#df5e1a"}},{"id":"material-iphonecosmicorange-texture-underside","path":[2],"attributes":{"stop-color":"#ff9157"}},{"id":"material-iphonecosmicorange-texture-studio-white","path":[2],"attributes":{"stop-color":"#fff8f4"}},{"id":"material-iphonecosmicorange-texture-studio-white","path":[3],"attributes":{"stop-color":"#ffefe6"}},{"id":"material-iphonecosmicorange-texture-rim-light","path":[0],"attributes":{"stop-color":"#fff9f7"}},{"id":"material-iphonecosmicorange-texture-rim-light","path":[1],"attributes":{"stop-color":"#fff3ed"}},{"id":"material-iphonecosmicorange-texture-rim-light","path":[2],"attributes":{"stop-color":"#ffe1d1"}},{"id":"material-iphonecosmicorange-texture-rim-light","path":[3],"attributes":{"stop-color":"#ffe1d1"}},{"id":"material-iphonecosmicorange-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#ffdcca"}},{"id":"material-iphonecosmicorange-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#ffdcca"}},{"id":"material-iphonecosmicorange-texture-warm-room","path":[0],"attributes":{"stop-color":"#ffc9ad"}},{"id":"material-iphonecosmicorange-texture-warm-room","path":[1],"attributes":{"stop-color":"#ffc9ad"}}]},"907":{"paint":[{"id":"material-deepmetalbronze-volume","path":[1],"attributes":{"stop-color":"#131200"}},{"id":"material-deepmetalbronze-volume","path":[2],"attributes":{"stop-color":"#131200"}},{"id":"material-deepmetalbronze-volume","path":[3],"attributes":{"stop-color":"#131200"}},{"id":"material-deepmetalbronze-texture-studio-dark","path":[0],"attributes":{"stop-color":"#5d5600"}},{"id":"material-deepmetalbronze-texture-studio-dark","path":[1],"attributes":{"stop-color":"#766d0b"}},{"id":"material-deepmetalbronze-texture-studio-dark","path":[2],"attributes":{"stop-color":"#a19935"}},{"id":"material-deepmetalbronze-texture-studio-dark","path":[3],"attributes":{"stop-color":"#bdb55f"}},{"id":"material-deepmetalbronze-texture-underside","path":[0],"attributes":{"stop-color":"#685f02"}},{"id":"material-deepmetalbronze-texture-underside","path":[1],"attributes":{"stop-color":"#7f7612"}},{"id":"material-deepmetalbronze-texture-underside","path":[2],"attributes":{"stop-color":"#afa647"}},{"id":"material-deepmetalbronze-texture-studio-white","path":[2],"attributes":{"stop-color":"#fafaf0"}},{"id":"material-deepmetalbronze-texture-studio-white","path":[3],"attributes":{"stop-color":"#f4f2dd"}},{"id":"material-deepmetalbronze-texture-rim-light","path":[0],"attributes":{"stop-color":"#fbfbf3"}},{"id":"material-deepmetalbronze-texture-rim-light","path":[1],"attributes":{"stop-color":"#f7f6e6"}},{"id":"material-deepmetalbronze-texture-rim-light","path":[2],"attributes":{"stop-color":"#ebe7c2"}},{"id":"material-deepmetalbronze-texture-rim-light","path":[3],"attributes":{"stop-color":"#ebe7c2"}},{"id":"material-deepmetalbronze-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#e7e3b9"}},{"id":"material-deepmetalbronze-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#e7e3b9"}},{"id":"material-deepmetalbronze-texture-warm-room","path":[0],"attributes":{"stop-color":"#dad498"}},{"id":"material-deepmetalbronze-texture-warm-room","path":[1],"attributes":{"stop-color":"#dad498"}}]},"908":{"paint":[{"id":"material-deepmetaltitanium-volume","path":[1],"attributes":{"stop-color":"#0c1118"}},{"id":"material-deepmetaltitanium-volume","path":[2],"attributes":{"stop-color":"#0c1118"}},{"id":"material-deepmetaltitanium-volume","path":[3],"attributes":{"stop-color":"#0c1118"}},{"id":"material-deepmetaltitanium-texture-studio-dark","path":[0],"attributes":{"stop-color":"#41536b"}},{"id":"material-deepmetaltitanium-texture-studio-dark","path":[1],"attributes":{"stop-color":"#566a84"}},{"id":"material-deepmetaltitanium-texture-studio-dark","path":[2],"attributes":{"stop-color":"#8196b0"}},{"id":"material-deepmetaltitanium-texture-studio-dark","path":[3],"attributes":{"stop-color":"#a1b3ca"}},{"id":"material-deepmetaltitanium-texture-underside","path":[0],"attributes":{"stop-color":"#495d75"}},{"id":"material-deepmetaltitanium-texture-underside","path":[1],"attributes":{"stop-color":"#5f748e"}},{"id":"material-deepmetaltitanium-texture-underside","path":[2],"attributes":{"stop-color":"#90a4bd"}},{"id":"material-deepmetaltitanium-texture-studio-white","path":[2],"attributes":{"stop-color":"#f7f9fc"}},{"id":"material-deepmetaltitanium-texture-studio-white","path":[3],"attributes":{"stop-color":"#edf1f7"}},{"id":"material-deepmetaltitanium-texture-rim-light","path":[0],"attributes":{"stop-color":"#f9fafc"}},{"id":"material-deepmetaltitanium-texture-rim-light","path":[1],"attributes":{"stop-color":"#f2f5f9"}},{"id":"material-deepmetaltitanium-texture-rim-light","path":[2],"attributes":{"stop-color":"#dfe6f0"}},{"id":"material-deepmetaltitanium-texture-rim-light","path":[3],"attributes":{"stop-color":"#dfe6f0"}},{"id":"material-deepmetaltitanium-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#d9e2ed"}},{"id":"material-deepmetaltitanium-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#d9e2ed"}},{"id":"material-deepmetaltitanium-texture-warm-room","path":[0],"attributes":{"stop-color":"#c6d3e3"}},{"id":"material-deepmetaltitanium-texture-warm-room","path":[1],"attributes":{"stop-color":"#c6d3e3"}}]},"909":{"paint":[{"id":"material-deepmetalplatinum-volume","path":[1],"attributes":{"stop-color":"#3b3e44"}},{"id":"material-deepmetalplatinum-volume","path":[2],"attributes":{"stop-color":"#3b3e44"}},{"id":"material-deepmetalplatinum-volume","path":[3],"attributes":{"stop-color":"#3b3e44"}},{"id":"material-deepmetalplatinum-texture-studio-dark","path":[0],"attributes":{"stop-color":"#888d94"}},{"id":"material-deepmetalplatinum-texture-studio-dark","path":[1],"attributes":{"stop-color":"#9ca0a7"}},{"id":"material-deepmetalplatinum-texture-studio-dark","path":[2],"attributes":{"stop-color":"#bcc0c5"}},{"id":"material-deepmetalplatinum-texture-studio-dark","path":[3],"attributes":{"stop-color":"#d0d3d7"}},{"id":"material-deepmetalplatinum-texture-underside","path":[0],"attributes":{"stop-color":"#90959c"}},{"id":"material-deepmetalplatinum-texture-underside","path":[1],"attributes":{"stop-color":"#a3a8ae"}},{"id":"material-deepmetalplatinum-texture-underside","path":[2],"attributes":{"stop-color":"#c6c9ce"}},{"id":"material-deepmetalplatinum-texture-studio-white","path":[2],"attributes":{"stop-color":"#fcfcfc"}},{"id":"material-deepmetalplatinum-texture-studio-white","path":[3],"attributes":{"stop-color":"#f7f8f8"}},{"id":"material-deepmetalplatinum-texture-rim-light","path":[0],"attributes":{"stop-color":"#fcfdfd"}},{"id":"material-deepmetalplatinum-texture-rim-light","path":[1],"attributes":{"stop-color":"#f9fafa"}},{"id":"material-deepmetalplatinum-texture-rim-light","path":[2],"attributes":{"stop-color":"#f0f1f3"}},{"id":"material-deepmetalplatinum-texture-rim-light","path":[3],"attributes":{"stop-color":"#f0f1f3"}},{"id":"material-deepmetalplatinum-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#eeeff1"}},{"id":"material-deepmetalplatinum-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#eeeff1"}},{"id":"material-deepmetalplatinum-texture-warm-room","path":[0],"attributes":{"stop-color":"#e4e6e9"}},{"id":"material-deepmetalplatinum-texture-warm-room","path":[1],"attributes":{"stop-color":"#e4e6e9"}}]},"910":{"paint":[{"id":"material-deepmetalchampagne-volume","path":[1],"attributes":{"stop-color":"#2f230c"}},{"id":"material-deepmetalchampagne-volume","path":[2],"attributes":{"stop-color":"#2f230c"}},{"id":"material-deepmetalchampagne-volume","path":[3],"attributes":{"stop-color":"#2f230c"}},{"id":"material-deepmetalchampagne-texture-studio-dark","path":[0],"attributes":{"stop-color":"#866e40"}},{"id":"material-deepmetalchampagne-texture-studio-dark","path":[1],"attributes":{"stop-color":"#9c8455"}},{"id":"material-deepmetalchampagne-texture-studio-dark","path":[2],"attributes":{"stop-color":"#bfaa81"}},{"id":"material-deepmetalchampagne-texture-studio-dark","path":[3],"attributes":{"stop-color":"#d4c3a1"}},{"id":"material-deepmetalchampagne-texture-underside","path":[0],"attributes":{"stop-color":"#8f7748"}},{"id":"material-deepmetalchampagne-texture-underside","path":[1],"attributes":{"stop-color":"#a48c5e"}},{"id":"material-deepmetalchampagne-texture-underside","path":[2],"attributes":{"stop-color":"#c9b690"}},{"id":"material-deepmetalchampagne-texture-studio-white","path":[2],"attributes":{"stop-color":"#fcfbf8"}},{"id":"material-deepmetalchampagne-texture-studio-white","path":[3],"attributes":{"stop-color":"#f8f4ed"}},{"id":"material-deepmetalchampagne-texture-rim-light","path":[0],"attributes":{"stop-color":"#fdfbf9"}},{"id":"material-deepmetalchampagne-texture-rim-light","path":[1],"attributes":{"stop-color":"#faf7f2"}},{"id":"material-deepmetalchampagne-texture-rim-light","path":[2],"attributes":{"stop-color":"#f2ecdf"}},{"id":"material-deepmetalchampagne-texture-rim-light","path":[3],"attributes":{"stop-color":"#f2ecdf"}},{"id":"material-deepmetalchampagne-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#f0e9da"}},{"id":"material-deepmetalchampagne-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#f0e9da"}},{"id":"material-deepmetalchampagne-texture-warm-room","path":[0],"attributes":{"stop-color":"#e7dcc7"}},{"id":"material-deepmetalchampagne-texture-warm-room","path":[1],"attributes":{"stop-color":"#e7dcc7"}}]},"911":{"paint":[{"id":"material-deepmetaliceblue-volume","path":[1],"attributes":{"stop-color":"#06202e"}},{"id":"material-deepmetaliceblue-volume","path":[2],"attributes":{"stop-color":"#06202e"}},{"id":"material-deepmetaliceblue-volume","path":[3],"attributes":{"stop-color":"#06202e"}},{"id":"material-deepmetaliceblue-texture-studio-dark","path":[0],"attributes":{"stop-color":"#2e6f92"}},{"id":"material-deepmetaliceblue-texture-studio-dark","path":[1],"attributes":{"stop-color":"#4186aa"}},{"id":"material-deepmetaliceblue-texture-studio-dark","path":[2],"attributes":{"stop-color":"#6eaecf"}},{"id":"material-deepmetaliceblue-texture-studio-dark","path":[3],"attributes":{"stop-color":"#91c6e2"}},{"id":"material-deepmetaliceblue-texture-underside","path":[0],"attributes":{"stop-color":"#35799c"}},{"id":"material-deepmetaliceblue-texture-underside","path":[1],"attributes":{"stop-color":"#4a8fb3"}},{"id":"material-deepmetaliceblue-texture-underside","path":[2],"attributes":{"stop-color":"#7eb9d8"}},{"id":"material-deepmetaliceblue-texture-studio-white","path":[2],"attributes":{"stop-color":"#f6fbfe"}},{"id":"material-deepmetaliceblue-texture-studio-white","path":[3],"attributes":{"stop-color":"#e9f5fc"}},{"id":"material-deepmetaliceblue-texture-rim-light","path":[0],"attributes":{"stop-color":"#f8fcfe"}},{"id":"material-deepmetaliceblue-texture-rim-light","path":[1],"attributes":{"stop-color":"#eff8fd"}},{"id":"material-deepmetaliceblue-texture-rim-light","path":[2],"attributes":{"stop-color":"#d8edf8"}},{"id":"material-deepmetaliceblue-texture-rim-light","path":[3],"attributes":{"stop-color":"#d8edf8"}},{"id":"material-deepmetaliceblue-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#d2eaf7"}},{"id":"material-deepmetaliceblue-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#d2eaf7"}},{"id":"material-deepmetaliceblue-texture-warm-room","path":[0],"attributes":{"stop-color":"#bcdff1"}},{"id":"material-deepmetaliceblue-texture-warm-room","path":[1],"attributes":{"stop-color":"#bcdff1"}}]},"912":{"paint":[{"id":"material-iphoneultramarine-volume","path":[1],"attributes":{"stop-color":"#090e24"}},{"id":"material-iphoneultramarine-volume","path":[2],"attributes":{"stop-color":"#090e24"}},{"id":"material-iphoneultramarine-volume","path":[3],"attributes":{"stop-color":"#090e24"}},{"id":"material-iphoneultramarine-texture-studio-dark","path":[0],"attributes":{"stop-color":"#3749a3"}},{"id":"material-iphoneultramarine-texture-studio-dark","path":[1],"attributes":{"stop-color":"#4b5fc5"}},{"id":"material-iphoneultramarine-texture-studio-dark","path":[2],"attributes":{"stop-color":"#768bf6"}},{"id":"material-iphoneultramarine-texture-studio-dark","path":[3],"attributes":{"stop-color":"#9aaaff"}},{"id":"material-iphoneultramarine-texture-underside","path":[0],"attributes":{"stop-color":"#3f52b2"}},{"id":"material-iphoneultramarine-texture-underside","path":[1],"attributes":{"stop-color":"#5468d2"}},{"id":"material-iphoneultramarine-texture-underside","path":[2],"attributes":{"stop-color":"#869aff"}},{"id":"material-iphoneultramarine-texture-studio-white","path":[2],"attributes":{"stop-color":"#f7f9ff"}},{"id":"material-iphoneultramarine-texture-studio-white","path":[3],"attributes":{"stop-color":"#edf0ff"}},{"id":"material-iphoneultramarine-texture-rim-light","path":[0],"attributes":{"stop-color":"#f9faff"}},{"id":"material-iphoneultramarine-texture-rim-light","path":[1],"attributes":{"stop-color":"#f2f4ff"}},{"id":"material-iphoneultramarine-texture-rim-light","path":[2],"attributes":{"stop-color":"#dee3ff"}},{"id":"material-iphoneultramarine-texture-rim-light","path":[3],"attributes":{"stop-color":"#dee3ff"}},{"id":"material-iphoneultramarine-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#d8deff"}},{"id":"material-iphoneultramarine-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#d8deff"}},{"id":"material-iphoneultramarine-texture-warm-room","path":[0],"attributes":{"stop-color":"#c3cdff"}},{"id":"material-iphoneultramarine-texture-warm-room","path":[1],"attributes":{"stop-color":"#c3cdff"}}]},"913":{"paint":[{"id":"material-deepmetalviolet-volume","path":[1],"attributes":{"stop-color":"#160720"}},{"id":"material-deepmetalviolet-volume","path":[2],"attributes":{"stop-color":"#160720"}},{"id":"material-deepmetalviolet-volume","path":[3],"attributes":{"stop-color":"#160720"}},{"id":"material-deepmetalviolet-texture-studio-dark","path":[0],"attributes":{"stop-color":"#7231a0"}},{"id":"material-deepmetalviolet-texture-studio-dark","path":[1],"attributes":{"stop-color":"#8f44c4"}},{"id":"material-deepmetalviolet-texture-studio-dark","path":[2],"attributes":{"stop-color":"#bf6ff8"}},{"id":"material-deepmetalviolet-texture-studio-dark","path":[3],"attributes":{"stop-color":"#d394ff"}},{"id":"material-deepmetalviolet-texture-underside","path":[0],"attributes":{"stop-color":"#7e38af"}},{"id":"material-deepmetalviolet-texture-underside","path":[1],"attributes":{"stop-color":"#9a4cd1"}},{"id":"material-deepmetalviolet-texture-underside","path":[2],"attributes":{"stop-color":"#ca7fff"}},{"id":"material-deepmetalviolet-texture-studio-white","path":[2],"attributes":{"stop-color":"#fcf7ff"}},{"id":"material-deepmetalviolet-texture-studio-white","path":[3],"attributes":{"stop-color":"#f7ebff"}},{"id":"material-deepmetalviolet-texture-rim-light","path":[0],"attributes":{"stop-color":"#fcf8ff"}},{"id":"material-deepmetalviolet-texture-rim-light","path":[1],"attributes":{"stop-color":"#f9f1ff"}},{"id":"material-deepmetalviolet-texture-rim-light","path":[2],"attributes":{"stop-color":"#f0dbff"}},{"id":"material-deepmetalviolet-texture-rim-light","path":[3],"attributes":{"stop-color":"#f0dbff"}},{"id":"material-deepmetalviolet-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#eed5ff"}},{"id":"material-deepmetalviolet-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#eed5ff"}},{"id":"material-deepmetalviolet-texture-warm-room","path":[0],"attributes":{"stop-color":"#e5c0ff"}},{"id":"material-deepmetalviolet-texture-warm-room","path":[1],"attributes":{"stop-color":"#e5c0ff"}}]},"914":{"paint":[{"id":"material-iphoneburgundy-volume","path":[1],"attributes":{"stop-color":"#040102"}},{"id":"material-iphoneburgundy-volume","path":[2],"attributes":{"stop-color":"#040102"}},{"id":"material-iphoneburgundy-volume","path":[3],"attributes":{"stop-color":"#040102"}},{"id":"material-iphoneburgundy-texture-studio-dark","path":[0],"attributes":{"stop-color":"#3e1523"}},{"id":"material-iphoneburgundy-texture-studio-dark","path":[1],"attributes":{"stop-color":"#5d2236"}},{"id":"material-iphoneburgundy-texture-studio-dark","path":[2],"attributes":{"stop-color":"#a04765"}},{"id":"material-iphoneburgundy-texture-studio-dark","path":[3],"attributes":{"stop-color":"#cb6b8b"}},{"id":"material-iphoneburgundy-texture-underside","path":[0],"attributes":{"stop-color":"#4a1a2a"}},{"id":"material-iphoneburgundy-texture-underside","path":[1],"attributes":{"stop-color":"#6b293f"}},{"id":"material-iphoneburgundy-texture-underside","path":[2],"attributes":{"stop-color":"#b55776"}},{"id":"material-iphoneburgundy-texture-studio-white","path":[2],"attributes":{"stop-color":"#fff1f6"}},{"id":"material-iphoneburgundy-texture-studio-white","path":[3],"attributes":{"stop-color":"#ffdee9"}},{"id":"material-iphoneburgundy-texture-rim-light","path":[0],"attributes":{"stop-color":"#fff4f7"}},{"id":"material-iphoneburgundy-texture-rim-light","path":[1],"attributes":{"stop-color":"#ffe7ef"}},{"id":"material-iphoneburgundy-texture-rim-light","path":[2],"attributes":{"stop-color":"#fcc4d7"}},{"id":"material-iphoneburgundy-texture-rim-light","path":[3],"attributes":{"stop-color":"#fcc4d7"}},{"id":"material-iphoneburgundy-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#fabbd0"}},{"id":"material-iphoneburgundy-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#fabbd0"}},{"id":"material-iphoneburgundy-texture-warm-room","path":[0],"attributes":{"stop-color":"#ef9db9"}},{"id":"material-iphoneburgundy-texture-warm-room","path":[1],"attributes":{"stop-color":"#ef9db9"}}]},"915":{"paint":[{"id":"material-iphoneteal-volume","path":[1],"attributes":{"stop-color":"#021817"}},{"id":"material-iphoneteal-volume","path":[2],"attributes":{"stop-color":"#021817"}},{"id":"material-iphoneteal-volume","path":[3],"attributes":{"stop-color":"#021817"}},{"id":"material-iphoneteal-texture-studio-dark","path":[0],"attributes":{"stop-color":"#206562"}},{"id":"material-iphoneteal-texture-studio-dark","path":[1],"attributes":{"stop-color":"#317d7a"}},{"id":"material-iphoneteal-texture-studio-dark","path":[2],"attributes":{"stop-color":"#5da7a4"}},{"id":"material-iphoneteal-texture-studio-dark","path":[3],"attributes":{"stop-color":"#82c2bf"}},{"id":"material-iphoneteal-texture-underside","path":[0],"attributes":{"stop-color":"#276f6c"}},{"id":"material-iphoneteal-texture-underside","path":[1],"attributes":{"stop-color":"#3a8683"}},{"id":"material-iphoneteal-texture-underside","path":[2],"attributes":{"stop-color":"#6eb4b1"}},{"id":"material-iphoneteal-texture-studio-white","path":[2],"attributes":{"stop-color":"#f4fbfb"}},{"id":"material-iphoneteal-texture-studio-white","path":[3],"attributes":{"stop-color":"#e6f5f4"}},{"id":"material-iphoneteal-texture-rim-light","path":[0],"attributes":{"stop-color":"#f6fcfb"}},{"id":"material-iphoneteal-texture-rim-light","path":[1],"attributes":{"stop-color":"#ecf8f7"}},{"id":"material-iphoneteal-texture-rim-light","path":[2],"attributes":{"stop-color":"#d2eceb"}},{"id":"material-iphoneteal-texture-rim-light","path":[3],"attributes":{"stop-color":"#d2eceb"}},{"id":"material-iphoneteal-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#cae9e8"}},{"id":"material-iphoneteal-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#cae9e8"}},{"id":"material-iphoneteal-texture-warm-room","path":[0],"attributes":{"stop-color":"#b1dddb"}},{"id":"material-iphoneteal-texture-warm-room","path":[1],"attributes":{"stop-color":"#b1dddb"}}]},"916":{"paint":[{"id":"material-deepmetalforest-volume","path":[1],"attributes":{"stop-color":"#010202"}},{"id":"material-deepmetalforest-volume","path":[2],"attributes":{"stop-color":"#010202"}},{"id":"material-deepmetalforest-volume","path":[3],"attributes":{"stop-color":"#010202"}},{"id":"material-deepmetalforest-texture-studio-dark","path":[0],"attributes":{"stop-color":"#12251e"}},{"id":"material-deepmetalforest-texture-studio-dark","path":[1],"attributes":{"stop-color":"#1e392f"}},{"id":"material-deepmetalforest-texture-studio-dark","path":[2],"attributes":{"stop-color":"#416859"}},{"id":"material-deepmetalforest-texture-studio-dark","path":[3],"attributes":{"stop-color":"#648e7e"}},{"id":"material-deepmetalforest-texture-underside","path":[0],"attributes":{"stop-color":"#172d24"}},{"id":"material-deepmetalforest-texture-underside","path":[1],"attributes":{"stop-color":"#244237"}},{"id":"material-deepmetalforest-texture-underside","path":[2],"attributes":{"stop-color":"#507a6a"}},{"id":"material-deepmetalforest-texture-studio-white","path":[2],"attributes":{"stop-color":"#eff6f4"}},{"id":"material-deepmetalforest-texture-studio-white","path":[3],"attributes":{"stop-color":"#dbeae4"}},{"id":"material-deepmetalforest-texture-rim-light","path":[0],"attributes":{"stop-color":"#f2f8f6"}},{"id":"material-deepmetalforest-texture-rim-light","path":[1],"attributes":{"stop-color":"#e4efeb"}},{"id":"material-deepmetalforest-texture-rim-light","path":[2],"attributes":{"stop-color":"#c0d8cf"}},{"id":"material-deepmetalforest-texture-rim-light","path":[3],"attributes":{"stop-color":"#c0d8cf"}},{"id":"material-deepmetalforest-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#b7d2c8"}},{"id":"material-deepmetalforest-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#b7d2c8"}},{"id":"material-deepmetalforest-texture-warm-room","path":[0],"attributes":{"stop-color":"#98bbad"}},{"id":"material-deepmetalforest-texture-warm-room","path":[1],"attributes":{"stop-color":"#98bbad"}}]},"917":{"paint":[{"id":"material-iphonenatural-volume","path":[1],"attributes":{"stop-color":"#27241e"}},{"id":"material-iphonenatural-volume","path":[2],"attributes":{"stop-color":"#27241e"}},{"id":"material-iphonenatural-volume","path":[3],"attributes":{"stop-color":"#27241e"}},{"id":"material-iphonenatural-texture-studio-dark","path":[0],"attributes":{"stop-color":"#756f65"}},{"id":"material-iphonenatural-texture-studio-dark","path":[1],"attributes":{"stop-color":"#8b857a"}},{"id":"material-iphonenatural-texture-studio-dark","path":[2],"attributes":{"stop-color":"#b1aba2"}},{"id":"material-iphonenatural-texture-studio-dark","path":[3],"attributes":{"stop-color":"#c8c4bc"}},{"id":"material-iphonenatural-texture-underside","path":[0],"attributes":{"stop-color":"#7e786d"}},{"id":"material-iphonenatural-texture-underside","path":[1],"attributes":{"stop-color":"#938e83"}},{"id":"material-iphonenatural-texture-underside","path":[2],"attributes":{"stop-color":"#bcb7ae"}},{"id":"material-iphonenatural-texture-studio-white","path":[2],"attributes":{"stop-color":"#fbfbfa"}},{"id":"material-iphonenatural-texture-studio-white","path":[3],"attributes":{"stop-color":"#f6f5f3"}},{"id":"material-iphonenatural-texture-rim-light","path":[0],"attributes":{"stop-color":"#fcfcfb"}},{"id":"material-iphonenatural-texture-rim-light","path":[1],"attributes":{"stop-color":"#f8f8f6"}},{"id":"material-iphonenatural-texture-rim-light","path":[2],"attributes":{"stop-color":"#eeece9"}},{"id":"material-iphonenatural-texture-rim-light","path":[3],"attributes":{"stop-color":"#eeece9"}},{"id":"material-iphonenatural-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#ebe9e5"}},{"id":"material-iphonenatural-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#ebe9e5"}},{"id":"material-iphonenatural-texture-warm-room","path":[0],"attributes":{"stop-color":"#e0ddd8"}},{"id":"material-iphonenatural-texture-warm-room","path":[1],"attributes":{"stop-color":"#e0ddd8"}}]},"918":{"paint":[{"id":"material-iphonedeepurple-volume","path":[1],"attributes":{"stop-color":"#030203"}},{"id":"material-iphonedeepurple-volume","path":[2],"attributes":{"stop-color":"#030203"}},{"id":"material-iphonedeepurple-volume","path":[3],"attributes":{"stop-color":"#030203"}},{"id":"material-iphonedeepurple-texture-studio-dark","path":[0],"attributes":{"stop-color":"#28202c"}},{"id":"material-iphonedeepurple-texture-studio-dark","path":[1],"attributes":{"stop-color":"#3d3143"}},{"id":"material-iphonedeepurple-texture-studio-dark","path":[2],"attributes":{"stop-color":"#6d5c76"}},{"id":"material-iphonedeepurple-texture-studio-dark","path":[3],"attributes":{"stop-color":"#93819c"}},{"id":"material-iphonedeepurple-texture-underside","path":[0],"attributes":{"stop-color":"#302635"}},{"id":"material-iphonedeepurple-texture-underside","path":[1],"attributes":{"stop-color":"#46394d"}},{"id":"material-iphonedeepurple-texture-underside","path":[2],"attributes":{"stop-color":"#7e6d87"}},{"id":"material-iphonedeepurple-texture-studio-white","path":[2],"attributes":{"stop-color":"#f7f4f8"}},{"id":"material-iphonedeepurple-texture-studio-white","path":[3],"attributes":{"stop-color":"#ebe5ee"}},{"id":"material-iphonedeepurple-texture-rim-light","path":[0],"attributes":{"stop-color":"#f8f6f9"}},{"id":"material-iphonedeepurple-texture-rim-light","path":[1],"attributes":{"stop-color":"#f0ecf3"}},{"id":"material-iphonedeepurple-texture-rim-light","path":[2],"attributes":{"stop-color":"#dbd1e0"}},{"id":"material-iphonedeepurple-texture-rim-light","path":[3],"attributes":{"stop-color":"#dbd1e0"}},{"id":"material-iphonedeepurple-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#d5c9da"}},{"id":"material-iphonedeepurple-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#d5c9da"}},{"id":"material-iphonedeepurple-texture-warm-room","path":[0],"attributes":{"stop-color":"#beafc6"}},{"id":"material-iphonedeepurple-texture-warm-room","path":[1],"attributes":{"stop-color":"#beafc6"}}]},"919":{"paint":[{"id":"material-iphonepink-volume","path":[1],"attributes":{"stop-color":"#623f46"}},{"id":"material-iphonepink-volume","path":[2],"attributes":{"stop-color":"#623f46"}},{"id":"material-iphonepink-volume","path":[3],"attributes":{"stop-color":"#623f46"}},{"id":"material-iphonepink-texture-studio-dark","path":[0],"attributes":{"stop-color":"#b58b94"}},{"id":"material-iphonepink-texture-studio-dark","path":[1],"attributes":{"stop-color":"#c59ea6"}},{"id":"material-iphonepink-texture-studio-dark","path":[2],"attributes":{"stop-color":"#dcbec4"}},{"id":"material-iphonepink-texture-studio-dark","path":[3],"attributes":{"stop-color":"#e8d1d6"}},{"id":"material-iphonepink-texture-underside","path":[0],"attributes":{"stop-color":"#bc939c"}},{"id":"material-iphonepink-texture-underside","path":[1],"attributes":{"stop-color":"#cba6ad"}},{"id":"material-iphonepink-texture-underside","path":[2],"attributes":{"stop-color":"#e2c7cd"}},{"id":"material-iphonepink-texture-studio-white","path":[2],"attributes":{"stop-color":"#fefcfc"}},{"id":"material-iphonepink-texture-studio-white","path":[3],"attributes":{"stop-color":"#fcf7f8"}},{"id":"material-iphonepink-texture-rim-light","path":[0],"attributes":{"stop-color":"#fefcfd"}},{"id":"material-iphonepink-texture-rim-light","path":[1],"attributes":{"stop-color":"#fdf9fa"}},{"id":"material-iphonepink-texture-rim-light","path":[2],"attributes":{"stop-color":"#f9f1f2"}},{"id":"material-iphonepink-texture-rim-light","path":[3],"attributes":{"stop-color":"#f9f1f2"}},{"id":"material-iphonepink-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#f8eef0"}},{"id":"material-iphonepink-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#f8eef0"}},{"id":"material-iphonepink-texture-warm-room","path":[0],"attributes":{"stop-color":"#f3e5e8"}},{"id":"material-iphonepink-texture-warm-room","path":[1],"attributes":{"stop-color":"#f3e5e8"}}]},"920":{"paint":[{"id":"material-iphonesage-volume","path":[1],"attributes":{"stop-color":"#22281a"}},{"id":"material-iphonesage-volume","path":[2],"attributes":{"stop-color":"#22281a"}},{"id":"material-iphonesage-volume","path":[3],"attributes":{"stop-color":"#22281a"}},{"id":"material-iphonesage-texture-studio-dark","path":[0],"attributes":{"stop-color":"#6a775b"}},{"id":"material-iphonesage-texture-studio-dark","path":[1],"attributes":{"stop-color":"#808d70"}},{"id":"material-iphonesage-texture-studio-dark","path":[2],"attributes":{"stop-color":"#a7b299"}},{"id":"material-iphonesage-texture-studio-dark","path":[3],"attributes":{"stop-color":"#c0c9b4"}},{"id":"material-iphonesage-texture-underside","path":[0],"attributes":{"stop-color":"#738063"}},{"id":"material-iphonesage-texture-underside","path":[1],"attributes":{"stop-color":"#889579"}},{"id":"material-iphonesage-texture-underside","path":[2],"attributes":{"stop-color":"#b2bda6"}},{"id":"material-iphonesage-texture-studio-white","path":[2],"attributes":{"stop-color":"#fafbf9"}},{"id":"material-iphonesage-texture-studio-white","path":[3],"attributes":{"stop-color":"#f4f6f1"}},{"id":"material-iphonesage-texture-rim-light","path":[0],"attributes":{"stop-color":"#fbfcfa"}},{"id":"material-iphonesage-texture-rim-light","path":[1],"attributes":{"stop-color":"#f7f8f5"}},{"id":"material-iphonesage-texture-rim-light","path":[2],"attributes":{"stop-color":"#ebeee6"}},{"id":"material-iphonesage-texture-rim-light","path":[3],"attributes":{"stop-color":"#ebeee6"}},{"id":"material-iphonesage-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#e7ebe2"}},{"id":"material-iphonesage-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#e7ebe2"}},{"id":"material-iphonesage-texture-warm-room","path":[0],"attributes":{"stop-color":"#dae0d3"}},{"id":"material-iphonesage-texture-warm-room","path":[1],"attributes":{"stop-color":"#dae0d3"}}]},"921":{"paint":[{"id":"material-iphonelavender-volume","path":[1],"attributes":{"stop-color":"#312a40"}},{"id":"material-iphonelavender-volume","path":[2],"attributes":{"stop-color":"#312a40"}},{"id":"material-iphonelavender-volume","path":[3],"attributes":{"stop-color":"#312a40"}},{"id":"material-iphonelavender-texture-studio-dark","path":[0],"attributes":{"stop-color":"#81759c"}},{"id":"material-iphonelavender-texture-studio-dark","path":[1],"attributes":{"stop-color":"#968ab1"}},{"id":"material-iphonelavender-texture-studio-dark","path":[2],"attributes":{"stop-color":"#b9afcf"}},{"id":"material-iphonelavender-texture-studio-dark","path":[3],"attributes":{"stop-color":"#cec6e0"}},{"id":"material-iphonelavender-texture-underside","path":[0],"attributes":{"stop-color":"#8a7ea5"}},{"id":"material-iphonelavender-texture-underside","path":[1],"attributes":{"stop-color":"#9e92b8"}},{"id":"material-iphonelavender-texture-underside","path":[2],"attributes":{"stop-color":"#c3bad8"}},{"id":"material-iphonelavender-texture-studio-white","path":[2],"attributes":{"stop-color":"#fcfbfd"}},{"id":"material-iphonelavender-texture-studio-white","path":[3],"attributes":{"stop-color":"#f7f5fb"}},{"id":"material-iphonelavender-texture-rim-light","path":[0],"attributes":{"stop-color":"#fcfcfe"}},{"id":"material-iphonelavender-texture-rim-light","path":[1],"attributes":{"stop-color":"#f9f8fc"}},{"id":"material-iphonelavender-texture-rim-light","path":[2],"attributes":{"stop-color":"#f0edf7"}},{"id":"material-iphonelavender-texture-rim-light","path":[3],"attributes":{"stop-color":"#f0edf7"}},{"id":"material-iphonelavender-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#edeaf5"}},{"id":"material-iphonelavender-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#edeaf5"}},{"id":"material-iphonelavender-texture-warm-room","path":[0],"attributes":{"stop-color":"#e3deef"}},{"id":"material-iphonelavender-texture-warm-room","path":[1],"attributes":{"stop-color":"#e3deef"}}]},"922":{"paint":[{"id":"material-satinplatinum-volume","path":[1],"attributes":{"stop-color":"#303337"}},{"id":"material-satinplatinum-volume","path":[2],"attributes":{"stop-color":"#303337"}},{"id":"material-satinplatinum-volume","path":[3],"attributes":{"stop-color":"#303337"}},{"id":"material-satinplatinum-texture-studio-dark","path":[0],"attributes":{"stop-color":"#5f666d"}},{"id":"material-satinplatinum-texture-studio-dark","path":[1],"attributes":{"stop-color":"#717982"}},{"id":"material-satinplatinum-texture-studio-dark","path":[2],"attributes":{"stop-color":"#99a0a6"}},{"id":"material-satinplatinum-texture-studio-dark","path":[3],"attributes":{"stop-color":"#b5babf"}},{"id":"material-satinplatinum-texture-underside","path":[0],"attributes":{"stop-color":"#666e75"}},{"id":"material-satinplatinum-texture-underside","path":[1],"attributes":{"stop-color":"#79828a"}},{"id":"material-satinplatinum-texture-underside","path":[2],"attributes":{"stop-color":"#a6abb1"}},{"id":"material-satinplatinum-texture-studio-white","path":[2],"attributes":{"stop-color":"#fdfbf6"}},{"id":"material-satinplatinum-texture-studio-white","path":[3],"attributes":{"stop-color":"#faf6ea"}},{"id":"material-satinplatinum-texture-rim-light","path":[0],"attributes":{"stop-color":"#fdfcf8"}},{"id":"material-satinplatinum-texture-rim-light","path":[1],"attributes":{"stop-color":"#fbf8f1"}},{"id":"material-satinplatinum-texture-rim-light","path":[2],"attributes":{"stop-color":"#e7e8ea"}},{"id":"material-satinplatinum-texture-rim-light","path":[3],"attributes":{"stop-color":"#e7e8ea"}},{"id":"material-satinplatinum-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#e2e4e6"}},{"id":"material-satinplatinum-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#e2e4e6"}},{"id":"material-satinplatinum-texture-warm-room","path":[0],"attributes":{"stop-color":"#cdd0d4"}},{"id":"material-satinplatinum-texture-warm-room","path":[1],"attributes":{"stop-color":"#cdd0d4"}}]},"923":{"paint":[{"id":"material-satinrose-volume","path":[1],"attributes":{"stop-color":"#301b16"}},{"id":"material-satinrose-volume","path":[2],"attributes":{"stop-color":"#301b16"}},{"id":"material-satinrose-volume","path":[3],"attributes":{"stop-color":"#301b16"}},{"id":"material-satinrose-texture-studio-dark","path":[0],"attributes":{"stop-color":"#7c4538"}},{"id":"material-satinrose-texture-studio-dark","path":[1],"attributes":{"stop-color":"#995545"}},{"id":"material-satinrose-texture-studio-dark","path":[2],"attributes":{"stop-color":"#bf8071"}},{"id":"material-satinrose-texture-studio-dark","path":[3],"attributes":{"stop-color":"#d1a398"}},{"id":"material-satinrose-texture-underside","path":[0],"attributes":{"stop-color":"#884c3d"}},{"id":"material-satinrose-texture-underside","path":[1],"attributes":{"stop-color":"#a55c4a"}},{"id":"material-satinrose-texture-underside","path":[2],"attributes":{"stop-color":"#c79082"}},{"id":"material-satinrose-texture-studio-white","path":[2],"attributes":{"stop-color":"#fdfbf6"}},{"id":"material-satinrose-texture-studio-white","path":[3],"attributes":{"stop-color":"#faf6ea"}},{"id":"material-satinrose-texture-rim-light","path":[0],"attributes":{"stop-color":"#fdfcf8"}},{"id":"material-satinrose-texture-rim-light","path":[1],"attributes":{"stop-color":"#fbf8f1"}},{"id":"material-satinrose-texture-rim-light","path":[2],"attributes":{"stop-color":"#f0e1dd"}},{"id":"material-satinrose-texture-rim-light","path":[3],"attributes":{"stop-color":"#f0e1dd"}},{"id":"material-satinrose-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#eddbd6"}},{"id":"material-satinrose-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#eddbd6"}},{"id":"material-satinrose-texture-warm-room","path":[0],"attributes":{"stop-color":"#e0c1ba"}},{"id":"material-satinrose-texture-warm-room","path":[1],"attributes":{"stop-color":"#e0c1ba"}}]},"924":{"paint":[{"id":"material-satinredcopper-volume","path":[1],"attributes":{"stop-color":"#1f1109"}},{"id":"material-satinredcopper-volume","path":[2],"attributes":{"stop-color":"#1f1109"}},{"id":"material-satinredcopper-volume","path":[3],"attributes":{"stop-color":"#1f1109"}},{"id":"material-satinredcopper-texture-studio-dark","path":[0],"attributes":{"stop-color":"#703e20"}},{"id":"material-satinredcopper-texture-studio-dark","path":[1],"attributes":{"stop-color":"#90502a"}},{"id":"material-satinredcopper-texture-studio-dark","path":[2],"attributes":{"stop-color":"#ca7747"}},{"id":"material-satinredcopper-texture-studio-dark","path":[3],"attributes":{"stop-color":"#d89b78"}},{"id":"material-satinredcopper-texture-underside","path":[0],"attributes":{"stop-color":"#7d4524"}},{"id":"material-satinredcopper-texture-underside","path":[1],"attributes":{"stop-color":"#9f572e"}},{"id":"material-satinredcopper-texture-underside","path":[2],"attributes":{"stop-color":"#d0875d"}},{"id":"material-satinredcopper-texture-studio-white","path":[2],"attributes":{"stop-color":"#fdfbf6"}},{"id":"material-satinredcopper-texture-studio-white","path":[3],"attributes":{"stop-color":"#faf6ea"}},{"id":"material-satinredcopper-texture-rim-light","path":[0],"attributes":{"stop-color":"#fdfcf8"}},{"id":"material-satinredcopper-texture-rim-light","path":[1],"attributes":{"stop-color":"#fbf8f1"}},{"id":"material-satinredcopper-texture-rim-light","path":[2],"attributes":{"stop-color":"#f2ddd1"}},{"id":"material-satinredcopper-texture-rim-light","path":[3],"attributes":{"stop-color":"#f2ddd1"}},{"id":"material-satinredcopper-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#efd6c8"}},{"id":"material-satinredcopper-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#efd6c8"}},{"id":"material-satinredcopper-texture-warm-room","path":[0],"attributes":{"stop-color":"#e4bba2"}},{"id":"material-satinredcopper-texture-warm-room","path":[1],"attributes":{"stop-color":"#e4bba2"}}]},"925":{"paint":[{"id":"material-satinbronze-volume","path":[1],"attributes":{"stop-color":"#151209"}},{"id":"material-satinbronze-volume","path":[2],"attributes":{"stop-color":"#151209"}},{"id":"material-satinbronze-volume","path":[3],"attributes":{"stop-color":"#151209"}},{"id":"material-satinbronze-texture-studio-dark","path":[0],"attributes":{"stop-color":"#514725"}},{"id":"material-satinbronze-texture-studio-dark","path":[1],"attributes":{"stop-color":"#6c5e31"}},{"id":"material-satinbronze-texture-studio-dark","path":[2],"attributes":{"stop-color":"#a8924b"}},{"id":"material-satinbronze-texture-studio-dark","path":[3],"attributes":{"stop-color":"#c1af75"}},{"id":"material-satinbronze-texture-underside","path":[0],"attributes":{"stop-color":"#5c5029"}},{"id":"material-satinbronze-texture-underside","path":[1],"attributes":{"stop-color":"#796936"}},{"id":"material-satinbronze-texture-underside","path":[2],"attributes":{"stop-color":"#b5a05b"}},{"id":"material-satinbronze-texture-studio-white","path":[2],"attributes":{"stop-color":"#fdfbf6"}},{"id":"material-satinbronze-texture-studio-white","path":[3],"attributes":{"stop-color":"#faf6ea"}},{"id":"material-satinbronze-texture-rim-light","path":[0],"attributes":{"stop-color":"#fdfcf8"}},{"id":"material-satinbronze-texture-rim-light","path":[1],"attributes":{"stop-color":"#fbf8f1"}},{"id":"material-satinbronze-texture-rim-light","path":[2],"attributes":{"stop-color":"#e9e3ce"}},{"id":"material-satinbronze-texture-rim-light","path":[3],"attributes":{"stop-color":"#e9e3ce"}},{"id":"material-satinbronze-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#e5dec5"}},{"id":"material-satinbronze-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#e5dec5"}},{"id":"material-satinbronze-texture-warm-room","path":[0],"attributes":{"stop-color":"#d4c79f"}},{"id":"material-satinbronze-texture-warm-room","path":[1],"attributes":{"stop-color":"#d4c79f"}}]},"926":{"paint":[{"id":"material-satingunmetal-volume","path":[1],"attributes":{"stop-color":"#040505"}},{"id":"material-satingunmetal-volume","path":[2],"attributes":{"stop-color":"#040505"}},{"id":"material-satingunmetal-volume","path":[3],"attributes":{"stop-color":"#040505"}},{"id":"material-satingunmetal-texture-studio-dark","path":[0],"attributes":{"stop-color":"#1c2025"}},{"id":"material-satingunmetal-texture-studio-dark","path":[1],"attributes":{"stop-color":"#2a3138"}},{"id":"material-satingunmetal-texture-studio-dark","path":[2],"attributes":{"stop-color":"#4f5c68"}},{"id":"material-satingunmetal-texture-studio-dark","path":[3],"attributes":{"stop-color":"#6f8192"}},{"id":"material-satingunmetal-texture-underside","path":[0],"attributes":{"stop-color":"#21272c"}},{"id":"material-satingunmetal-texture-underside","path":[1],"attributes":{"stop-color":"#313941"}},{"id":"material-satingunmetal-texture-underside","path":[2],"attributes":{"stop-color":"#5c6c7b"}},{"id":"material-satingunmetal-texture-studio-white","path":[2],"attributes":{"stop-color":"#fdfbf6"}},{"id":"material-satingunmetal-texture-studio-white","path":[3],"attributes":{"stop-color":"#faf6ea"}},{"id":"material-satingunmetal-texture-rim-light","path":[0],"attributes":{"stop-color":"#fdfcf8"}},{"id":"material-satingunmetal-texture-rim-light","path":[1],"attributes":{"stop-color":"#fbf8f1"}},{"id":"material-satingunmetal-texture-rim-light","path":[2],"attributes":{"stop-color":"#cad0d7"}},{"id":"material-satingunmetal-texture-rim-light","path":[3],"attributes":{"stop-color":"#cad0d7"}},{"id":"material-satingunmetal-texture-floor-bounce","path":[1],"attributes":{"stop-color":"#c0c8d0"}},{"id":"material-satingunmetal-texture-floor-bounce","path":[2],"attributes":{"stop-color":"#c0c8d0"}},{"id":"material-satingunmetal-texture-warm-room","path":[0],"attributes":{"stop-color":"#98a5b2"}},{"id":"material-satingunmetal-texture-warm-room","path":[1],"attributes":{"stop-color":"#98a5b2"}}]},"1106":{"paint":[{"selector":"use[stroke=\"url(#material-cork-rim)\"]","attributes":{"opacity":"0.21"}}]},"1505":{"paint":[{"id":"material-kiwi-antenna","path":[0],"attributes":{"stop-color":"#dddbc7"}},{"id":"material-kiwi-antenna","path":[1],"attributes":{"stop-color":"#878036"}},{"id":"material-kiwi-antenna","path":[2],"attributes":{"stop-color":"#4a461e"}}]},"1508":{"paint":[{"id":"material-dragonfruit-antenna","path":[0],"attributes":{"stop-color":"#d4e8d1"}},{"id":"material-dragonfruit-antenna","path":[1],"attributes":{"stop-color":"#66ad5c"}},{"id":"material-dragonfruit-antenna","path":[2],"attributes":{"stop-color":"#385f33"}},{"id":"material-dragonfruit-texture","path":[216],"attributes":{"fill":"#ffffff"}}]},"1606":{"paint":[{"id":"material-galaxy-antenna","path":[0],"attributes":{"stop-color":"#d6cbf5"}},{"id":"material-galaxy-antenna","path":[1],"attributes":{"stop-color":"#6e46dd"}},{"id":"material-galaxy-antenna","path":[2],"attributes":{"stop-color":"#3d277a"}},{"id":"material-galaxy-texture","path":[1],"attributes":{"cx":"174"}},{"id":"material-galaxy-texture-cloud","path":[0],"attributes":{"stop-opacity":"0.74"}},{"id":"material-galaxy-texture-cloud","path":[1],"attributes":{"stop-opacity":"0.4996"}},{"id":"material-galaxy-texture-cloud","path":[2],"attributes":{"stop-opacity":"0.2229"}},{"id":"material-galaxy-texture-blue","path":[0],"attributes":{"stop-opacity":"0.74"}},{"id":"material-galaxy-texture-blue","path":[1],"attributes":{"stop-opacity":"0.3807"}},{"id":"material-galaxy-texture-starlight","path":[0],"attributes":{"stop-opacity":"0.77"}},{"id":"material-galaxy-texture-starlight","path":[1],"attributes":{"stop-opacity":"0.2587"}}]},"401":{"paint":[],"properties":{}},"402":{"paint":[],"properties":{}},"403":{"paint":[],"properties":{}},"404":{"paint":[],"properties":{}},"405":{"paint":[],"properties":{}},"406":{"paint":[],"properties":{}},"607":{"paint":[],"properties":{}},"608":{"paint":[],"properties":{}},"610":{"paint":[],"properties":{}},"611":{"paint":[],"properties":{}},"612":{"paint":[],"properties":{}}};
@@ -0,0 +1,44 @@
1
+ // Full-face compositions use the existing 240-unit SVG coordinate system.
2
+ // Keep dense decoration away from the eyes (roughly x 60–180, y 95–155).
3
+ // The compositions this module draws, by texture name without its prefix.
4
+ const REVISED = new Set(['cow', 'dragonfruit', 'camo']);
5
+
6
+ export function revisionTexture(defs,id,kind,el,gradient) {
7
+ if (!kind.startsWith('revised-')) return null;
8
+ const name=kind.slice(8);
9
+ if (!REVISED.has(name)) return null;
10
+ const p=el('pattern',{id,width:240,height:240,patternUnits:'userSpaceOnUse'},defs);
11
+ const path=(d,fill='none',stroke='none',width=1,opacity=1,parent=p)=>el('path',{d,fill,stroke,'stroke-width':width,opacity,'stroke-linecap':'round','stroke-linejoin':'round'},parent);
12
+ const circle=(cx,cy,r,fill,opacity=1,parent=p)=>el('circle',{cx,cy,r,fill,opacity},parent);
13
+ const ellipse=(cx,cy,rx,ry,fill,opacity=1,parent=p)=>el('ellipse',{cx,cy,rx,ry,fill,opacity},parent);
14
+ const rect=(x,y,width,height,fill,opacity=1,rx=0,parent=p)=>el('rect',{x,y,width,height,fill,opacity,rx},parent);
15
+ const noise=(n,colors,opacity=.18)=>{
16
+ for(let i=0;i<n;i++) circle((i*73.731+13)%240,(i*i*29.379+19)%240,.25+i%3*.18,colors[i%colors.length],opacity);
17
+ };
18
+ const wash=(key,color,opacity,cx,cy,rx,ry)=>{
19
+ gradient(defs,'radialGradient',`${id}-${key}`,{},[[0,color,opacity],[.5,color,opacity*.6],[1,color,0]]);
20
+ ellipse(cx,cy,rx,ry,`url(#${id}-${key})`);
21
+ };
22
+ if(name==='cow') {
23
+ for(const d of ['M-10 2H88C99 15 73 28 70 44S37 43 31 65 5 97-10 71Z','M176-5C161 17 176 35 195 39S204 76 237 86V-5Z','M-8 162C12 148 33 170 42 177S65 169 77 187 47 219 62 247H-8Z','M176 208C177 190 204 174 222 181S251 202 237 240H193Z'])path(d,'#30343c');
24
+ ellipse(160,44,8,5,'#30343c');
25
+ } else if(name==='camo') {
26
+ for(const [d,c] of [
27
+ ['M-5-5H126C113 11 87 16 81 37S43 46 44 67 2 82-5 63Z','#c1b690'],
28
+ ['M138-5H245V96C218 90 227 60 200 65S158 43 172 27 155 17 138-5Z','#506b4c'],
29
+ ['M-5 119C24 103 38 124 43 145S81 147 72 177 109 212 92 245H-5Z','#466149'],
30
+ ['M137 183C138 157 163 166 180 157S195 124 225 133L245 128V245H156C176 225 133 212 137 183Z','#c0b38e'],
31
+ ['M180 235Q198 203 220 206T245 189V245Z','#384e3b'],
32
+ ])path(d,c,'none',0,.9);
33
+ noise(170,['#e6dcc3','#2a4533'],.1);
34
+ } else if(name==='dragonfruit') {
35
+ el('use',{href:'#headShape',fill:'none',stroke:'#f2a0c0','stroke-width':11,opacity:.8},p);
36
+ for(let i=0;i<105;i++) {
37
+ const x=25+(i*71.71)%190,y=25+(i*i*37.17)%190;
38
+ if(y>92&&y<159&&x>51&&x<184)continue;
39
+ el('ellipse',{cx:x,cy:y,rx:.9,ry:1.7,fill:'#424044',opacity:.8,transform:`rotate(${i*59} ${x} ${y})`},p);
40
+ }
41
+ noise(140,['#fff','#bac2bc'],.13);
42
+ }
43
+ return p;
44
+ }
@@ -0,0 +1,71 @@
1
+ // The compositions this module draws, by texture name without its prefix.
2
+ const SECOND = new Set(['knit', 'kiwi', 'lemon', 'cloud', 'chevron']);
3
+
4
+ export function secondPassTexture(defs,id,kind,el,gradient) {
5
+ if (!kind.startsWith('second-')) return null;
6
+ const name=kind.slice(7);
7
+ if (!SECOND.has(name)) return null;
8
+ const p=el('pattern',{id,width:240,height:240,patternUnits:'userSpaceOnUse'},defs);
9
+ const path=(d,fill='none',stroke='none',width=1,opacity=1,parent=p)=>el('path',{d,fill,stroke,'stroke-width':width,opacity,'stroke-linejoin':'round','stroke-linecap':'round'},parent);
10
+ const circle=(cx,cy,r,fill,opacity=1,parent=p)=>el('circle',{cx,cy,r,fill,opacity},parent);
11
+ const rect=(x,y,width,height,fill,rx=0,opacity=1,parent=p)=>el('rect',{x,y,width,height,rx,fill,opacity},parent);
12
+ const ellipse=(cx,cy,rx,ry,fill,opacity=1,parent=p)=>el('ellipse',{cx,cy,rx,ry,fill,opacity},parent);
13
+ const noise=(count,colors,opacity=.2)=>{
14
+ for(let i=0;i<count;i++)circle((i*71.731+13)%240,(i*i*29.37+9)%240,.25+i%3*.2,colors[i%colors.length],opacity);
15
+ };
16
+ const glow=(key,color,opacity,cx,cy,rx,ry)=>{
17
+ gradient(defs,'radialGradient',`${id}-${key}`,{},[[0,color,opacity],[.6,color,opacity*.5],[1,color,0]]);
18
+ ellipse(cx,cy,rx,ry,`url(#${id}-${key})`);
19
+ };
20
+ if(name==='knit') {
21
+ for(let x=23;x<220;x+=10)for(let y=24;y<198;y+=10){
22
+ path(`M${x-3} ${y}L${x} ${y+7} ${x+3} ${y}`,'none','#613c57',3,.4);
23
+ path(`M${x-2} ${y}L${x} ${y+6} ${x+2} ${y}`,'none','#ddb4c9',1.3,.6);
24
+ }
25
+ for(const x of [49,120,191]) for(let y=17;y<202;y+=32){
26
+ path(`M${x-9} ${y}C${x-10} ${y+14} ${x+9} ${y+17} ${x+9} ${y+32}M${x+9} ${y}C${x+10} ${y+14} ${x-9} ${y+17} ${x-9} ${y+32}`,'none','#6f4261',9,.9);
27
+ path(`M${x-9} ${y}C${x-10} ${y+14} ${x+9} ${y+17} ${x+9} ${y+32}M${x+9} ${y}C${x+10} ${y+14} ${x-9} ${y+17} ${x-9} ${y+32}`,'none','#d6a5bf',5,.9);
28
+ path(`M${x-10} ${y}C${x-11} ${y+14} ${x+8} ${y+17} ${x+8} ${y+32}`,'none','#f0cddd',1,.65);
29
+ }
30
+ rect(0,199,240,41,'#9b6787',0,.9);
31
+ for(let x=20;x<222;x+=6)path(`M${x} 200v28`,'none','#d7aac2',2,.65);
32
+ path('M20 199H220','none','#673d57',2,.45);
33
+ } else if(name==='kiwi') {
34
+ glow('pulp','#e7f4b3',.9,115,111,105,108);
35
+ for(let i=0;i<130;i++){
36
+ const a=i*Math.PI/65,t=(r)=>`${120+Math.cos(a)*r} ${120+Math.sin(a)*r}`;
37
+ path(`M${t(29+i%5)}L${t(103)}`,'none',i%3?'#e3edaf':'#739535',.6,.38);
38
+ }
39
+ ellipse(120,120,27,36,'#f1edca',.95);
40
+ for(let i=0;i<35;i++){
41
+ const a=i*Math.PI*2/35,r=67+(i%4)*3,x=120+Math.cos(a)*r,y=120+Math.sin(a)*(r+4);
42
+ el('ellipse',{cx:x,cy:y,rx:1.5,ry:3.1,fill:'#374c2a',transform:`rotate(${i*360/35-90} ${x} ${y})`},p);
43
+ circle(x-1,y-1,.55,'#d3dfa2',.8);
44
+ }
45
+ noise(180,['#e8efba','#6e9239'],.18);
46
+ } else if(name==='lemon') {
47
+ const colors=['#f8d254','#f9df77','#f1c544','#ffe88c'];
48
+ for(let i=0;i<8;i++){
49
+ const a=i*Math.PI/4+.04,b=a+.67,point=(r,t)=>`${120+Math.cos(t)*r} ${120+Math.sin(t)*r}`;
50
+ path(`M${point(12,a+.05)}Q${point(57,a-.05)} ${point(102,a)}Q${point(118,(a+b)/2)} ${point(102,b)}Q${point(58,b+.05)} ${point(12,b-.05)}Z`,colors[i%4],'#fff0b5',2,.97);
51
+ for(let j=0;j<7;j++){
52
+ const t=a+.08+j*.08,r=76+j%3*6;
53
+ path(`M${point(23+j%3*3,t)}Q${point(54,t+.015)} ${point(r,t)}`,'none','#fff4c6',.65,.64);
54
+ }
55
+ }
56
+ circle(120,120,9,'#fff2c5');
57
+ for(const [x,y,a] of [[112,59,18],[166,167,-35]])el('ellipse',{cx:x,cy:y,rx:2.6,ry:5.3,fill:'#fff5cf',transform:`rotate(${a} ${x} ${y})`},p);
58
+ } else if(name==='cloud') {
59
+ gradient(defs,'linearGradient',`${id}-cloudcap`,{x1:'0',y1:'0',x2:'0',y2:'1'},[[0,'#fff',1],[.55,'#f6fcff',1],[1,'#cbdfed',.95]]);
60
+ path('M-5-5H245V60C227 76 209 74 197 62C184 87 154 81 148 65C129 88 107 82 101 67C80 91 52 82 49 66C28 80 7 72-5 62Z',`url(#${id}-cloudcap)`);
61
+ glow('haze','#e9f8ff',.37,35,204,69,23);
62
+ } else if(name==='chevron') {
63
+ for(let y=-30;y<270;y+=24)for(let x=-30;x<270;x+=60){
64
+ const row=Math.round((y+30)/24),c=row%6===0?'#ac7865':row%3===0?'#c6a76c':'#678e86';
65
+ path(`M${x} ${y}l30 16v15l-30-16Z`,c,'none',0,.9);
66
+ path(`M${x+30} ${y+16}l30-16v15l-30 16Z`,row%6===0?'#c4937c':'#9db3a2','none',0,.9);
67
+ }
68
+ for(let y=0;y<240;y+=2.5)path(`M0 ${y}H240`,'none','#f9eccd',.45,.18);
69
+ }
70
+ return p;
71
+ }
@@ -0,0 +1,111 @@
1
+ import { createLayerTexture } from './layered-texture.js';
2
+ import { metalTint } from './metal-tint.js';
3
+ import { woodTexture } from './wood-materials.js';
4
+
5
+ // Match the added inner shadow to each material's existing depth. Weighted
6
+ // glass already has a dark lower layer, so its extra reflection stays softer.
7
+ const translucentShadowStrength = {
8
+ clearwhite:.20, clearpale:.32, clearsilver:.46,
9
+ clearweighted:.40, clearhard:.42, clearsmoke:.68, clearink:1,
10
+ };
11
+
12
+ const SOFT = new Set(['blackglaze', 'blueglaze', 'jadeglaze', 'berryglaze', 'amberglaze', 'irisglaze', 'iceglaze', 'mintice', 'blushice', 'champagneice', 'lavenderice', 'whiteice', 'clearsilver', 'clearweighted', 'clearhard', 'silverdrop', 'woodmaple', 'woodoak', 'woodwalnut', 'woodrose', 'woodebony', 'matcharib']);
13
+ // Glazes are drawn as layered ribbons; wood has its own module.
14
+ const LAYERED = new Set(['blackglaze', 'blueglaze', 'jadeglaze', 'berryglaze', 'amberglaze', 'irisglaze', 'iceglaze', 'mintice', 'blushice', 'champagneice', 'lavenderice', 'whiteice']);
15
+ const WOOD = new Set(['woodmaple', 'woodoak', 'woodwalnut', 'woodrose', 'woodebony']);
16
+ // Gold and copper share silver's texture, tinted.
17
+ const METAL_FAMILY = { golddrop: 'gold', copperdeep: 'copper' };
18
+
19
+ export function softTexture(defs, id, kind, el, gradient) {
20
+ if (!SOFT.has(kind)) return null;
21
+ if (WOOD.has(kind)) return woodTexture(defs,id,kind,el,gradient);
22
+ if (LAYERED.has(kind)) return createLayerTexture(defs,id,kind,el,gradient);
23
+ const p = el('pattern', {id,width:240,height:240,patternUnits:'userSpaceOnUse'}, defs);
24
+ const path = (d, stroke, width=1, fill='none', opacity=1) =>
25
+ el('path', {d,stroke,'stroke-width':width,fill,opacity,'stroke-linecap':'round','stroke-linejoin':'round'}, p);
26
+ const metalFamily = METAL_FAMILY[id.replace(/^material-/, '').replace(/-texture$/, '')];
27
+ const radial = (name, stops, attrs={}) => {
28
+ const palette = metalFamily ? stops.map(([offset,color,opacity=1]) => [offset,metalTint(color,metalFamily),opacity]) : stops;
29
+ gradient(defs, 'radialGradient', `${id}-${name}`, {cx:'.35',cy:'.25',r:'.8',...attrs}, palette);
30
+ return `url(#${id}-${name})`;
31
+ };
32
+ const shine = (name, stops) => {
33
+ gradient(defs, 'linearGradient', `${id}-${name}`, {x1:'0',y1:'0',x2:'.3',y2:'1'}, stops);
34
+ return `url(#${id}-${name})`;
35
+ };
36
+ if (kind === 'matcharib') {
37
+ const rib = el('pattern', {id:`${id}-ribs`,width:9,height:240,patternUnits:'userSpaceOnUse'}, defs);
38
+ gradient(defs, 'linearGradient', `${id}-rib-light`, {x1:'0',y1:'0',x2:'1',y2:'0'},
39
+ [[0,'#244d1b',.32],[.25,'#bfe47b',.1],[.48,'#edffc4',.26],[.72,'#5e912e',.06],[1,'#244d1b',.32]]);
40
+ el('rect', {width:9,height:240,fill:`url(#${id}-rib-light)`}, rib);
41
+ el('rect', {width:240,height:240,fill:`url(#${id}-ribs)`}, p);
42
+ for (let i=0;i<240;i++) {
43
+ const x=22+(i*31.17)%196, y=22+(i*i*7.73)%196;
44
+ path(`M${x} ${y}l${i%2?1:-1} -2`, i%3?'#e5f9b6':'#345c23', .6, 'none', .2);
45
+ }
46
+ const glow = radial('nap', [[0,'#eaffb5',.3],[.6,'#ceec95',.07],[1,'#eaffb5',0]]);
47
+ el('ellipse', {cx:83,cy:58,rx:91,ry:64,fill:glow}, p);
48
+ } else if (['clearsilver','clearweighted','clearhard'].includes(kind)) {
49
+ // Restore the earlier glass-like depth. The inner reflection follows the
50
+ // right-hand curve rather than cutting diagonally into the middle of the face.
51
+ const softEdge = el('filter', {id:`${id}-soft-edge`,x:'-40%',y:'-40%',width:'180%',height:'180%'}, defs);
52
+ el('feGaussianBlur', {stdDeviation:5}, softEdge);
53
+ const innerShade = shine('inner-shade', [[0,'#4d6573',.08],[.24,'#344f60',.52],[.6,'#4b687b',.37],[1,'#829ca9',0]]);
54
+ const innerShadeShape = 'M181 39C210 55 216 87 213 117C212 145 202 166 190 180L182 169C196 139 200 117 196 90C194 69 189 51 181 39Z';
55
+ const curve = path(innerShadeShape, 'none', 0, innerShade);
56
+ curve.setAttribute('filter', `url(#${id}-soft-edge)`);
57
+ const depth = radial('inner-depth', [[0,'#3c5869',.34],[.4,'#658391',.18],[1,'#9cb1bd',0]], {cx:'.5',cy:'.5',r:'.5'});
58
+ el('ellipse', {cx:126,cy:209,rx:88,ry:23,fill:depth,transform:'rotate(-5 126 209)'}, p);
59
+ if (kind === 'clearweighted') {
60
+ // A continuous lower layer adds weight without making a dark dent.
61
+ gradient(defs, 'linearGradient', `${id}-weight`, {x1:'0',y1:'0',x2:'0',y2:'1'},
62
+ [[0,'#567180',0],[.3,'#567180',.04],[.6,'#3e5b6d',.24],[.84,'#2e495c',.5],[1,'#253e50',.57]]);
63
+ el('rect', {x:0,y:144,width:240,height:96,fill:`url(#${id}-weight)`}, p);
64
+ }
65
+ const transmitted = radial('transmitted', [[0,'#f6fdff',.75],[.3,'#e8f7ff',.46],[.68,'#cbe3ee',.15],[1,'#cbe3ee',0]], {cx:'.5',cy:'.5',r:'.5'});
66
+ el('ellipse', {cx:194,cy:157,rx:25,ry:57,fill:transmitted,transform:'rotate(17 194 157)'}, p);
67
+ el('ellipse', {cx:126,cy:214,rx:73,ry:14,fill:transmitted,opacity:kind==='clearweighted'?.55:1}, p);
68
+ if (kind === 'clearhard') {
69
+ const hard = radial('hard-light', [[0,'#ffffff',1],[.68,'#ffffff',1],[.86,'#ffffff',.94],[.95,'#f4fbff',.55],[1,'#f4fbff',0]], {cx:'.5',cy:'.5',r:'.5'});
70
+ el('ellipse', {cx:79,cy:51,rx:43,ry:12,fill:hard,transform:'rotate(-18 79 51)'}, p);
71
+ } else {
72
+ const white = radial('softbox', [[0,'#ffffff',.96],[.3,'#ffffff',.78],[.63,'#f4fbff',.28],[1,'#e8f3ff',0]], {cx:'.5',cy:'.5',r:'.5'});
73
+ el('ellipse', {cx:76,cy:55,rx:59,ry:27,fill:white,transform:'rotate(-18 76 55)'}, p);
74
+ }
75
+ const warm = radial('warm-transmission', [[0,'#fff1da',.25],[1,'#fff1da',0]], {cx:'.5',cy:'.5',r:'.5'});
76
+ el('ellipse', {cx:49,cy:140,rx:33,ry:68,fill:warm}, p);
77
+ {
78
+ // The flattened head ends at y=210. Keep this broad inner crescent above
79
+ // that edge, and above the floor reflection so the light cannot erase it.
80
+ // New parameter IDs replace only the rejected bottom-shadow experiment.
81
+ const bottomShade = gradient(defs,'linearGradient',`${id}-bottom-shade-v2`,
82
+ {x1:'.5',y1:'0',x2:'.5',y2:'1'},
83
+ [[0,'#476171',0],[.24,'#344e60',.34],[.56,'#213b4d',.86],[.8,'#294455',.84],[1,'#58717f',.22]]);
84
+ const bottomSoft = el('filter', {id:`${id}-bottom-soft-v2`,x:'-30%',y:'-100%',width:'160%',height:'300%'}, defs);
85
+ el('feGaussianBlur', {stdDeviation:3.5}, bottomSoft);
86
+ const materialName = id.replace(/^material-/, '').replace(/-texture$/, '');
87
+ const bottom = el('g', {id:`${id}-bottom-shadow`,opacity:translucentShadowStrength[materialName] ?? 1,
88
+ 'data-x':0,'data-y':0,'data-width':100,'data-height':100}, p);
89
+ el('path', {
90
+ d:'M39 172C55 186 80 189 120 189C159 189 184 185 201 172C197 188 181 199 158 202C137 205 103 205 81 202C58 199 43 189 39 172Z',
91
+ fill:`url(#${bottomShade.id})`,filter:`url(#${id}-bottom-soft-v2)`,
92
+ }, bottom);
93
+ }
94
+ } else if (kind === 'silverdrop') {
95
+ // Put the reflected dark studio edge outside the face, so it rolls around
96
+ // the silhouette instead of reading as an isolated dent in the surface.
97
+ const dark = radial('studio-dark', [[0,'#43545f',.64],[.35,'#586b76',.43],[.7,'#86969f',.14],[1,'#a6b3bb',0]], {cx:'.5',cy:'.5',r:'.5'});
98
+ el('ellipse', {cx:222,cy:105,rx:65,ry:115,fill:dark,transform:'rotate(-12 222 105)'}, p);
99
+ const underside = radial('underside', [[0,'#4d5d67',.44],[.45,'#63747e',.22],[1,'#94a4ac',0]], {cx:'.5',cy:'.5',r:'.5'});
100
+ el('ellipse', {cx:126,cy:237,rx:128,ry:70,fill:underside}, p);
101
+ const white = radial('studio-white', [[0,'#ffffff',.94],[.28,'#ffffff',.76],[.6,'#f4faff',.26],[1,'#e5f3ff',0]], {cx:'.5',cy:'.5',r:'.5'});
102
+ el('ellipse', {cx:78,cy:57,rx:67,ry:35,fill:white,transform:'rotate(-18 78 57)'}, p);
103
+ const rimLight = radial('rim-light', [[0,'#f6fbff',.72],[.3,'#edf6ff',.4],[.65,'#d8e8f2',.12],[1,'#d8e8f2',0]], {cx:'.5',cy:'.5',r:'.5'});
104
+ el('ellipse', {cx:216,cy:145,rx:28,ry:78,fill:rimLight,transform:'rotate(9 216 145)'}, p);
105
+ const floorBounce = radial('floor-bounce', [[0,'#e2ebee',.36],[.45,'#d8e3e8',.14],[1,'#d8e3e8',0]], {cx:'.5',cy:'.5',r:'.5'});
106
+ el('ellipse', {cx:120,cy:222,rx:92,ry:24,fill:floorBounce}, p);
107
+ const warm = radial('warm-room', [[0,'#e8ceac',.22],[1,'#e8ceac',0]], {cx:'.5',cy:'.5',r:'.5'});
108
+ el('ellipse', {cx:39,cy:137,rx:35,ry:75,fill:warm}, p);
109
+ }
110
+ return p;
111
+ }
@@ -0,0 +1,38 @@
1
+ const SPORTS = new Set(['basketball', 'baseball']);
2
+
3
+ export function sportsTexture(defs, id, kind, el, gradient) {
4
+ if (!SPORTS.has(kind)) return null;
5
+ const p = el('pattern', {id,width:240,height:240,patternUnits:'userSpaceOnUse'}, defs);
6
+ const path = (d, stroke, width=1, fill='none', opacity=1, parent=p) =>
7
+ el('path', {d,stroke,'stroke-width':width,fill,opacity,'stroke-linecap':'round','stroke-linejoin':'round'}, parent);
8
+ // Small deterministic surface marks, with larger seams legible at 118 px.
9
+ if (['basketball','tennis','baseball'].includes(kind)) {
10
+ const grain = el('pattern', {id:`${id}-grain`,width:8,height:8,patternUnits:'userSpaceOnUse'}, defs);
11
+ {
12
+ el('circle', {cx:2,cy:2,r:kind==='basketball'?1.05:.45,fill:kind==='basketball'?'#7f3918':'#9b8c73',opacity:.25}, grain);
13
+ el('circle', {cx:6,cy:6,r:.7,fill:'#fff7de',opacity:.25}, grain);
14
+ }
15
+ el('rect', {width:240,height:240,fill:`url(#${id}-grain)`}, p);
16
+ }
17
+ if (kind === 'basketball') {
18
+ const seams = 'M119 0C107 67 106 160 125 240M0 145C65 160 168 157 240 132M29 0C113 47 76 98 0 117M204 0C130 54 166 101 240 111';
19
+ path(seams, '#ffca7a', 6, 'none', .4);
20
+ path(seams, '#562d21', 3.7);
21
+ path(seams, '#271d1b', 1.2, 'none', .55);
22
+ } else if (kind === 'baseball') {
23
+ for (const side of [-1,1]) {
24
+ const xAt = y => 120 + side * (54 + 28 * Math.sin(Math.PI * (y-20)/200));
25
+ let d = '';
26
+ for (let y=0;y<=240;y+=4) d += `${y===0?'M':'L'}${xAt(y)} ${y}`;
27
+ path(d, '#b9a995', 3, 'none', .45);
28
+ path(d, '#a64d48', 1.3);
29
+ for (let y=17;y<232;y+=11) {
30
+ const x=xAt(y);
31
+ path(`M${x-5} ${y-3}L${x} ${y+1}L${x+5} ${y-3}`, '#b63d44', 2.3);
32
+ el('circle', {cx:x-5,cy:y-3,r:1.2,fill:'#793b3c'}, p);
33
+ el('circle', {cx:x+5,cy:y-3,r:1.2,fill:'#793b3c'}, p);
34
+ }
35
+ }
36
+ }
37
+ return p;
38
+ }
@@ -0,0 +1,68 @@
1
+ // Wood grain, one recipe per wood.
2
+ const grainStyles = {
3
+ woodmaple:{seed:17,dark:'#a17849',light:'#fff0cd',sway:3.5,bend:5,knotX:64,knotY:163,pores:32},
4
+ woodoak:{seed:29,dark:'#70451e',light:'#ffe3ad',sway:5,bend:22,knotX:142,knotY:93,pores:112,cathedral:true},
5
+ woodwalnut:{seed:43,dark:'#2e1a11',light:'#d8ac79',sway:9,bend:29,knotX:68,knotY:165,pores:78,knot:true},
6
+ woodrose:{seed:59,dark:'#481b13',light:'#edb487',sway:6,bend:13,knotX:176,knotY:66,pores:65,slant:.09},
7
+ woodebony:{seed:73,dark:'#090806',light:'#bb9360',sway:2,bend:3,knotX:190,knotY:135,pores:48},
8
+ };
9
+
10
+ export function woodTexture(defs,id,kind,el,gradient) {
11
+ const grain = grainStyles[kind];
12
+ if (!grain) return null;
13
+ const pattern = el('pattern',{id,width:240,height:240,patternUnits:'userSpaceOnUse'},defs);
14
+ let seed = grain.seed;
15
+ const random = () => {
16
+ seed = (Math.imul(seed,1664525)+1013904223) >>> 0;
17
+ return seed/4294967296;
18
+ };
19
+ gradient(defs,'linearGradient',`${id}-wood-grain`,{x1:'0',y1:'0',x2:'1',y2:'.65'},
20
+ [[0,grain.dark,.45],[.45,grain.dark,.7],[1,grain.dark,.52]]);
21
+ gradient(defs,'linearGradient',`${id}-wood-fiber`,{x1:'.1',y1:'0',x2:'.9',y2:'1'},
22
+ [[0,grain.light,.3],[.5,grain.light,.17],[1,grain.light,.26]]);
23
+ const dark = `url(#${id}-wood-grain)`, light = `url(#${id}-wood-fiber)`;
24
+ // Small deterministic warping breaks mechanical stripes without making the
25
+ // grain move when the light, expression, or editor preview changes.
26
+ const warp = el('filter',{id:`${id}-wood-warp`,x:'-10%',y:'-10%',width:'120%',height:'120%'},defs);
27
+ el('feTurbulence',{type:'fractalNoise',baseFrequency:'.045 .018',numOctaves:2,seed:grain.seed,result:'grain-noise'},warp);
28
+ el('feDisplacementMap',{in:'SourceGraphic',in2:'grain-noise',scale:1.6,xChannelSelector:'R',yChannelSelector:'G'},warp);
29
+ const fibers = el('g',{filter:`url(#${id}-wood-warp)`},pattern);
30
+ const stroke = (d,paint,width,opacity,target=fibers) => el('path',{
31
+ d,fill:'none',stroke:paint,'stroke-width':width,opacity,
32
+ 'stroke-linecap':'round','stroke-linejoin':'round',
33
+ },target);
34
+ const flow = (x,y,phase) => {
35
+ const distance = x-grain.knotX;
36
+ const aroundKnot = Math.sign(distance)*grain.bend*Math.exp(-Math.abs(distance)/35)
37
+ * Math.exp(-(((y-grain.knotY)/48)**2));
38
+ return x + Math.sin(y*.023+phase)*grain.sway + Math.sin(y*.057+phase*.7)*grain.sway*.22
39
+ + aroundKnot + (grain.slant || 0)*(y-120);
40
+ };
41
+ for (let index=0;index<122;index++) {
42
+ const x = -26+index*2.45+random()*1.4, phase = x*.024+random()*.45;
43
+ let d = '';
44
+ for (let y=-24;y<=264;y+=12) d += `${y === -24 ? 'M' : 'L'}${flow(x,y,phase).toFixed(2)} ${y}`;
45
+ if (index%9 === 0) stroke(d,dark,2.2+random()*3.5,.08+random()*.09);
46
+ stroke(d,index%5 === 0 ? light : dark,.3+random()*.55,.18+random()*.42);
47
+ }
48
+ if (grain.cathedral) {
49
+ for (let index=0;index<15;index++) {
50
+ const width = 8+index*3.8, top = 145-index*7.3, cx = grain.knotX+Math.sin(index*.8)*2;
51
+ stroke(`M${cx-width} 258 C${cx-width*1.18} 201 ${cx-width*.72} ${top+19} ${cx} ${top}
52
+ C${cx+width*.7} ${top+21} ${cx+width*1.14} 202 ${cx+width} 258`,dark,
53
+ index%4 === 0 ? 1.2 : .55,.21+random()*.18);
54
+ }
55
+ }
56
+ if (grain.knot) {
57
+ for (let index=0;index<6;index++) {
58
+ const rx = 2+index*2.3, ry = 5+index*5.4, cx = grain.knotX, cy = grain.knotY;
59
+ stroke(`M${cx} ${cy-ry} C${cx+rx*1.3} ${cy-ry*.5} ${cx+rx} ${cy+ry*.6} ${cx} ${cy+ry}
60
+ C${cx-rx*.85} ${cy+ry*.55} ${cx-rx*1.2} ${cy-ry*.6} ${cx} ${cy-ry}Z`,dark,.6,.46-index*.045);
61
+ }
62
+ }
63
+ for (let index=0;index<grain.pores;index++) {
64
+ const x = 20+random()*200, y = 28+random()*180, length = 1.2+random()*5.8;
65
+ stroke(`M${x} ${y}q${(random()-.5)*1.4} ${length/2} ${(random()-.5)*1.4} ${length}`,dark,.4+random()*.45,.12+random()*.3);
66
+ }
67
+ return pattern;
68
+ }
Binary file
Binary file