.elementor-3103 .elementor-element.elementor-element-e423cab:not(.elementor-motion-effects-element-type-background), .elementor-3103 .elementor-element.elementor-element-e423cab > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-image:url("https://www.eventek.fr/wp-content/uploads/2024/09/empty-stage-concert-with-lighting-laser-beam-spotl-H34S9C7.jpg");background-position:center center;background-size:cover;}.elementor-3103 .elementor-element.elementor-element-e423cab > .elementor-background-overlay{background-color:transparent;background-image:linear-gradient(180deg, #69C52F 0%, var( --e-global-color-ba7cab5 ) 75%);opacity:0.7;transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-3103 .elementor-element.elementor-element-e423cab > .elementor-container{min-height:30vh;}.elementor-3103 .elementor-element.elementor-element-e423cab{border-style:solid;border-width:0px 0px 0px 0px;border-color:var( --e-global-color-a83c27c );transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;padding:0px 0px 70px 0px;}.elementor-3103 .elementor-element.elementor-element-b206ac9 > .elementor-element-populated{padding:1em 1em 1em 1em;}.elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri .elementor-heading-title{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri div{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-6d86fc7 > .elementor-widget-container{margin:0em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-6d86fc7{text-align:center;}.elementor-3103 .elementor-element.elementor-element-6d86fc7 .elementor-heading-title{font-family:"dk lemon yellow sun", Sans-serif;font-size:80px;font-weight:600;line-height:1.2em;color:var( --e-global-color-text );}.elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > div, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > h1, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > h2, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > h3, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > h4, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > h5, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > h6, .elementor-3103 .elementor-element.elementor-element-6d86fc7.ob-harakiri > p{transform:rotate(0deg);}.elementor-3103 .elementor-element.elementor-element-6d86fc7 > div{text-indent:0px;mix-blend-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-2799fc3 > .elementor-background-overlay{background-color:var( --e-global-color-8f13fcf );background-image:url("https://www.eventek.fr/wp-content/uploads/2024/10/colorful-wave-with-rainbow-it-scaled.jpg");background-size:cover;opacity:0.2;}.elementor-3103 .elementor-element.elementor-element-2799fc3 > .elementor-container{max-width:1200px;}.elementor-3103 .elementor-element.elementor-element-2799fc3{overflow:hidden;padding:60px 30px 60px 30px;}.elementor-bc-flex-widget .elementor-3103 .elementor-element.elementor-element-0668d52.elementor-column .elementor-widget-wrap{align-items:center;}.elementor-3103 .elementor-element.elementor-element-0668d52.elementor-column.elementor-element[data-element_type="column"] > .elementor-widget-wrap.elementor-element-populated{align-content:center;align-items:center;}.elementor-3103 .elementor-element.elementor-element-0668d52 > .elementor-element-populated{padding:1em 1em 1em 1em;}.elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri .elementor-heading-title{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri div{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-fafeca0 > .elementor-widget-container{margin:0em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-fafeca0{text-align:start;}.elementor-3103 .elementor-element.elementor-element-fafeca0 .elementor-heading-title{font-family:var( --e-global-typography-a34e510-font-family ), Sans-serif;font-size:var( --e-global-typography-a34e510-font-size );font-weight:var( --e-global-typography-a34e510-font-weight );font-style:var( --e-global-typography-a34e510-font-style );text-decoration:var( --e-global-typography-a34e510-text-decoration );letter-spacing:var( --e-global-typography-a34e510-letter-spacing );color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > div, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > h1, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > h2, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > h3, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > h4, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > h5, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > h6, .elementor-3103 .elementor-element.elementor-element-fafeca0.ob-harakiri > p{transform:rotate(0deg);}.elementor-3103 .elementor-element.elementor-element-fafeca0 > div{text-indent:0px;mix-blend-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri .elementor-heading-title{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri div{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-9bb0a6c .elementor-heading-title{font-family:var( --e-global-typography-15088bb-font-family ), Sans-serif;font-size:var( --e-global-typography-15088bb-font-size );font-weight:var( --e-global-typography-15088bb-font-weight );line-height:var( --e-global-typography-15088bb-line-height );word-spacing:var( --e-global-typography-15088bb-word-spacing );color:var( --e-global-color-b0f4138 );}.elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > div, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > h1, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > h2, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > h3, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > h4, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > h5, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > h6, .elementor-3103 .elementor-element.elementor-element-9bb0a6c.ob-harakiri > p{transform:rotate(0deg);}.elementor-3103 .elementor-element.elementor-element-9bb0a6c > div{text-indent:0px;mix-blend-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri .elementor-heading-title{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri div{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-f059f72 > .elementor-widget-container{margin:0em 1em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-f059f72{text-align:start;font-family:var( --e-global-typography-b7806b0-font-family ), Sans-serif;font-size:var( --e-global-typography-b7806b0-font-size );font-weight:var( --e-global-typography-b7806b0-font-weight );line-height:var( --e-global-typography-b7806b0-line-height );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > div, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > h1, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > h2, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > h3, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > h4, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > h5, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > h6, .elementor-3103 .elementor-element.elementor-element-f059f72.ob-harakiri > p{transform:rotate(0deg);}.elementor-3103 .elementor-element.elementor-element-f059f72 > div{text-indent:0px;mix-blend-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-6626aaf > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-wrapper{align-items:center;gap:15px;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title{margin-block-end:5px;color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-52f5d3b.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-52f5d3b.elementor-view-framed .elementor-icon, .elementor-3103 .elementor-element.elementor-element-52f5d3b.elementor-view-default .elementor-icon{fill:var( --e-global-color-8f13fcf );color:var( --e-global-color-8f13fcf );border-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon{font-size:31px;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-img{overflow:hidden;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title a{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-description{font-family:var( --e-global-typography-f5c8433-font-family ), Sans-serif;font-size:var( --e-global-typography-f5c8433-font-size );font-weight:var( --e-global-typography-f5c8433-font-weight );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-f6ddd5a > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-wrapper{align-items:center;gap:15px;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title{margin-block-end:5px;color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-bc640ce.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-bc640ce.elementor-view-framed .elementor-icon, .elementor-3103 .elementor-element.elementor-element-bc640ce.elementor-view-default .elementor-icon{fill:var( --e-global-color-8f13fcf );color:var( --e-global-color-8f13fcf );border-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon{font-size:31px;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-img{overflow:hidden;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title a{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-description{font-family:var( --e-global-typography-f5c8433-font-family ), Sans-serif;font-size:var( --e-global-typography-f5c8433-font-size );font-weight:var( --e-global-typography-f5c8433-font-weight );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-58cc78d{margin-top:1em;margin-bottom:0em;}.elementor-3103 .elementor-element.elementor-element-8987a10 > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-wrapper{align-items:center;gap:15px;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title{margin-block-end:10px;color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-36f507c.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-36f507c.elementor-view-framed .elementor-icon, .elementor-3103 .elementor-element.elementor-element-36f507c.elementor-view-default .elementor-icon{fill:var( --e-global-color-8f13fcf );color:var( --e-global-color-8f13fcf );border-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon{font-size:31px;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-img{overflow:hidden;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title a{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-description{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-1adbbf4{margin-top:1em;margin-bottom:0em;}.elementor-3103 .elementor-element.elementor-element-7bbe0ca > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-wrapper{align-items:center;gap:15px;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title{margin-block-end:5px;color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-02ba34c.elementor-view-stacked .elementor-icon{background-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-02ba34c.elementor-view-framed .elementor-icon, .elementor-3103 .elementor-element.elementor-element-02ba34c.elementor-view-default .elementor-icon{fill:var( --e-global-color-8f13fcf );color:var( --e-global-color-8f13fcf );border-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon{font-size:31px;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-img{overflow:hidden;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title a{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-description{font-family:var( --e-global-typography-f5c8433-font-family ), Sans-serif;font-size:var( --e-global-typography-f5c8433-font-size );font-weight:var( --e-global-typography-f5c8433-font-weight );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri .elementor-heading-title{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri div{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-dcba2d4 > .elementor-widget-container{margin:3em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-dcba2d4 .elementor-heading-title{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > div, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > h1, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > h2, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > h3, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > h4, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > h5, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > h6, .elementor-3103 .elementor-element.elementor-element-dcba2d4.ob-harakiri > p{transform:rotate(0deg);}.elementor-3103 .elementor-element.elementor-element-dcba2d4 > div{text-indent:0px;mix-blend-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-3ad783c{--divider-border-style:solid;--divider-color:var( --e-global-color-8f13fcf );--divider-border-width:3px;}.elementor-3103 .elementor-element.elementor-element-3ad783c > .elementor-widget-container{margin:-1% 0% 0% 0%;}.elementor-3103 .elementor-element.elementor-element-3ad783c .elementor-divider-separator{width:27%;}.elementor-3103 .elementor-element.elementor-element-3ad783c .elementor-divider{padding-block-start:2px;padding-block-end:2px;}.elementor-3103 .elementor-element.elementor-element-3f381fb{--grid-template-columns:repeat(0, auto);--icon-size:20px;--grid-column-gap:15px;--grid-row-gap:0px;}.elementor-3103 .elementor-element.elementor-element-3f381fb .elementor-widget-container{text-align:left;}.elementor-3103 .elementor-element.elementor-element-3f381fb .elementor-social-icon{--icon-padding:0.5em;border-style:solid;border-width:0px 0px 0px 0px;border-color:var( --e-global-color-8f13fcf );}.elementor-3103 .elementor-element.elementor-element-62cf8ac:not(.elementor-motion-effects-element-type-background) > .elementor-widget-wrap, .elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-widget-wrap > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:transparent;background-image:radial-gradient(at center right, var( --e-global-color-primary ) 0%, var( --e-global-color-ba7cab5 ) 75%);}.elementor-bc-flex-widget .elementor-3103 .elementor-element.elementor-element-62cf8ac.elementor-column .elementor-widget-wrap{align-items:center;}.elementor-3103 .elementor-element.elementor-element-62cf8ac.elementor-column.elementor-element[data-element_type="column"] > .elementor-widget-wrap.elementor-element-populated{align-content:center;align-items:center;}.elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-element-populated{border-style:solid;border-width:3px 3px 3px 3px;border-color:var( --e-global-color-accent );box-shadow:0px 0px 10px 0px rgba(0,0,0,0.5);transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;padding:20px 20px 20px 20px;}.elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-element-populated, .elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-element-populated > .elementor-background-overlay, .elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-background-slideshow{border-radius:10px 10px 10px 10px;}.elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-element-populated > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri .elementor-heading-title{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri div{writing-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-ecd27b6{text-align:start;}.elementor-3103 .elementor-element.elementor-element-ecd27b6 .elementor-heading-title{font-family:var( --e-global-typography-15088bb-font-family ), Sans-serif;font-size:var( --e-global-typography-15088bb-font-size );font-weight:var( --e-global-typography-15088bb-font-weight );line-height:var( --e-global-typography-15088bb-line-height );word-spacing:var( --e-global-typography-15088bb-word-spacing );color:var( --e-global-color-a83c27c );}.elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > div, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > h1, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > h2, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > h3, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > h4, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > h5, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > h6, .elementor-3103 .elementor-element.elementor-element-ecd27b6.ob-harakiri > p{transform:rotate(0deg);}.elementor-3103 .elementor-element.elementor-element-ecd27b6 > div{text-indent:0px;mix-blend-mode:inherit;}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group{padding-right:calc( 10px/2 );padding-left:calc( 10px/2 );margin-bottom:17px;}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-form-fields-wrapper{margin-left:calc( -10px/2 );margin-right:calc( -10px/2 );margin-bottom:-17px;}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group.recaptcha_v3-bottomleft, .elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group.recaptcha_v3-bottomright{margin-bottom:0;}body.rtl .elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-labels-inline .elementor-field-group > label{padding-left:0px;}body:not(.rtl) .elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-labels-inline .elementor-field-group > label{padding-right:0px;}body .elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-labels-above .elementor-field-group > label{padding-bottom:0px;}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group > label, .elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-subgroup label{color:var( --e-global-color-text );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-type-html{padding-bottom:0px;color:var( --e-global-color-primary );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group .elementor-field{color:var( --e-global-color-text );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group .elementor-field:not(.elementor-select-wrapper){background-color:var( --e-global-color-ba7cab5 );border-color:var( --e-global-color-secondary );border-width:1px 1px 1px 1px;border-radius:10px 10px 10px 10px;}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group .elementor-select-wrapper select{background-color:var( --e-global-color-ba7cab5 );border-color:var( --e-global-color-secondary );border-width:1px 1px 1px 1px;border-radius:10px 10px 10px 10px;}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-field-group .elementor-select-wrapper::before{color:var( --e-global-color-secondary );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button{font-family:var( --e-global-typography-a69bba4-font-family ), Sans-serif;font-size:var( --e-global-typography-a69bba4-font-size );font-weight:var( --e-global-typography-a69bba4-font-weight );line-height:var( --e-global-typography-a69bba4-line-height );border-style:none;border-radius:10px 10px 10px 10px;}.elementor-3103 .elementor-element.elementor-element-9562f66 .e-form__buttons__wrapper__button-next{background-color:var( --e-global-color-primary );color:#ffffff;border-color:var( --e-global-color-primary );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button[type="submit"]{background-color:var( --e-global-color-primary );color:#ffffff;border-color:var( --e-global-color-primary );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button[type="submit"] svg *{fill:#ffffff;}.elementor-3103 .elementor-element.elementor-element-9562f66 .e-form__buttons__wrapper__button-previous{color:#ffffff;}.elementor-3103 .elementor-element.elementor-element-9562f66 .e-form__buttons__wrapper__button-next:hover{background-color:var( --e-global-color-text );color:var( --e-global-color-ba7cab5 );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button[type="submit"]:hover{background-color:var( --e-global-color-text );color:var( --e-global-color-ba7cab5 );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button[type="submit"]:hover svg *{fill:var( --e-global-color-ba7cab5 );}.elementor-3103 .elementor-element.elementor-element-9562f66 .e-form__buttons__wrapper__button-previous:hover{color:#ffffff;}.elementor-3103 .elementor-element.elementor-element-9562f66{--e-form-steps-indicators-spacing:20px;--e-form-steps-indicator-padding:30px;--e-form-steps-indicator-inactive-secondary-color:#ffffff;--e-form-steps-indicator-active-secondary-color:#ffffff;--e-form-steps-indicator-completed-secondary-color:#ffffff;--e-form-steps-divider-width:1px;--e-form-steps-divider-gap:10px;}.elementor-3103 .elementor-element.elementor-element-74f77645{margin-top:0em;margin-bottom:0em;padding:0em 0em 0em 0em;z-index:1;}.elementor-3103 .elementor-element.elementor-element-67849da8 > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-3103 .elementor-element.elementor-element-51d211fa{width:100%;max-width:100%;}.elementor-3103 .elementor-element.elementor-element-51d211fa iframe{height:300px;transition-duration:1s;}.elementor-3103 .elementor-element.elementor-element-51d211fa:hover iframe{filter:brightness( 100% ) contrast( 100% ) saturate( 100% ) blur( 0px ) hue-rotate( 0deg );}html, body{overflow-x:auto;}:root{--page-title-display:none;}@media(max-width:1024px){.elementor-3103 .elementor-element.elementor-element-6d86fc7 > .elementor-widget-container{margin:0em 1em 0em 1em;}.elementor-3103 .elementor-element.elementor-element-6d86fc7 .elementor-heading-title{font-size:40px;line-height:1.2em;}.elementor-3103 .elementor-element.elementor-element-2799fc3{padding:60px 20px 60px 20px;}.elementor-3103 .elementor-element.elementor-element-fafeca0 > .elementor-widget-container{margin:0em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-fafeca0{text-align:center;}.elementor-3103 .elementor-element.elementor-element-fafeca0 .elementor-heading-title{font-size:var( --e-global-typography-a34e510-font-size );letter-spacing:var( --e-global-typography-a34e510-letter-spacing );}.elementor-3103 .elementor-element.elementor-element-9bb0a6c{text-align:center;}.elementor-3103 .elementor-element.elementor-element-9bb0a6c .elementor-heading-title{font-size:var( --e-global-typography-15088bb-font-size );line-height:var( --e-global-typography-15088bb-line-height );word-spacing:var( --e-global-typography-15088bb-word-spacing );}.elementor-3103 .elementor-element.elementor-element-f059f72 > .elementor-widget-container{margin:0em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-f059f72{text-align:center;font-size:var( --e-global-typography-b7806b0-font-size );line-height:var( --e-global-typography-b7806b0-line-height );}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-wrapper{text-align:center;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-description{font-size:var( --e-global-typography-f5c8433-font-size );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-wrapper{text-align:center;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-description{font-size:var( --e-global-typography-f5c8433-font-size );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-wrapper{text-align:center;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-description{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-wrapper{text-align:center;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-description{font-size:var( --e-global-typography-f5c8433-font-size );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );}.elementor-3103 .elementor-element.elementor-element-dcba2d4{text-align:center;}.elementor-3103 .elementor-element.elementor-element-dcba2d4 .elementor-heading-title{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-3ad783c > .elementor-widget-container{margin:-2% 0% 0% 0%;}.elementor-3103 .elementor-element.elementor-element-3ad783c .elementor-divider-separator{width:23%;margin:0 auto;margin-center:0;}.elementor-3103 .elementor-element.elementor-element-3ad783c .elementor-divider{text-align:center;}.elementor-3103 .elementor-element.elementor-element-3f381fb .elementor-widget-container{text-align:center;}.elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-element-populated{margin:2em 2em 2em 2em;--e-column-margin-right:2em;--e-column-margin-left:2em;padding:2em 2em 2em 2em;}.elementor-3103 .elementor-element.elementor-element-ecd27b6 .elementor-heading-title{font-size:var( --e-global-typography-15088bb-font-size );line-height:var( --e-global-typography-15088bb-line-height );word-spacing:var( --e-global-typography-15088bb-word-spacing );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-51d211fa > .elementor-widget-container{margin:0em 1em 0em 1em;}}@media(max-width:767px){.elementor-3103 .elementor-element.elementor-element-6d86fc7 > .elementor-widget-container{margin:0em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-6d86fc7 .elementor-heading-title{font-size:32px;line-height:1.2em;}.elementor-3103 .elementor-element.elementor-element-2799fc3{padding:60px 20px 60px 20px;}.elementor-3103 .elementor-element.elementor-element-0668d52 > .elementor-element-populated{padding:0em 0em 0em 0em;}.elementor-3103 .elementor-element.elementor-element-fafeca0 .elementor-heading-title{font-size:var( --e-global-typography-a34e510-font-size );letter-spacing:var( --e-global-typography-a34e510-letter-spacing );}.elementor-3103 .elementor-element.elementor-element-9bb0a6c .elementor-heading-title{font-size:var( --e-global-typography-15088bb-font-size );line-height:var( --e-global-typography-15088bb-line-height );word-spacing:var( --e-global-typography-15088bb-word-spacing );}.elementor-3103 .elementor-element.elementor-element-f059f72 > .elementor-widget-container{padding:0px 0px 0px 0px;}.elementor-3103 .elementor-element.elementor-element-f059f72{text-align:center;font-size:var( --e-global-typography-b7806b0-font-size );line-height:var( --e-global-typography-b7806b0-line-height );}.elementor-3103 .elementor-element.elementor-element-6626aaf > .elementor-element-populated{margin:10px 0px 10px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon{font-size:30px;}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-52f5d3b .elementor-icon-box-description{font-size:var( --e-global-typography-f5c8433-font-size );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );}.elementor-3103 .elementor-element.elementor-element-f6ddd5a > .elementor-element-populated{margin:10px 0px 10px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon{font-size:30px;}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-bc640ce .elementor-icon-box-description{font-size:var( --e-global-typography-f5c8433-font-size );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );}.elementor-3103 .elementor-element.elementor-element-8987a10 > .elementor-element-populated{margin:10px 0px 10px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon{font-size:30px;}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-36f507c .elementor-icon-box-description{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-7bbe0ca > .elementor-element-populated{margin:10px 0px 10px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon{font-size:30px;}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title, .elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-title a{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-02ba34c .elementor-icon-box-description{font-size:var( --e-global-typography-f5c8433-font-size );line-height:var( --e-global-typography-f5c8433-line-height );word-spacing:var( --e-global-typography-f5c8433-word-spacing );}.elementor-3103 .elementor-element.elementor-element-dcba2d4 > .elementor-widget-container{margin:30px 0px 10px 0px;}.elementor-3103 .elementor-element.elementor-element-dcba2d4 .elementor-heading-title{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}.elementor-3103 .elementor-element.elementor-element-3ad783c .elementor-divider-separator{width:52%;}.elementor-3103 .elementor-element.elementor-element-3f381fb{--icon-size:17px;}.elementor-3103 .elementor-element.elementor-element-62cf8ac > .elementor-element-populated{margin:30px 0px 10px 0px;--e-column-margin-right:0px;--e-column-margin-left:0px;padding:10px 10px 10px 10px;}.elementor-3103 .elementor-element.elementor-element-ecd27b6{text-align:center;}.elementor-3103 .elementor-element.elementor-element-ecd27b6 .elementor-heading-title{font-size:var( --e-global-typography-15088bb-font-size );line-height:var( --e-global-typography-15088bb-line-height );word-spacing:var( --e-global-typography-15088bb-word-spacing );}.elementor-3103 .elementor-element.elementor-element-9562f66 .elementor-button{font-size:var( --e-global-typography-a69bba4-font-size );line-height:var( --e-global-typography-a69bba4-line-height );}}@media(min-width:768px){.elementor-3103 .elementor-element.elementor-element-0668d52{width:50%;}.elementor-3103 .elementor-element.elementor-element-62cf8ac{width:49.965%;}.elementor-3103 .elementor-element.elementor-element-67849da8{width:100%;}}@media(max-width:1024px) and (min-width:768px){.elementor-3103 .elementor-element.elementor-element-0668d52{width:100%;}.elementor-3103 .elementor-element.elementor-element-6626aaf{width:100%;}.elementor-3103 .elementor-element.elementor-element-f6ddd5a{width:100%;}.elementor-3103 .elementor-element.elementor-element-8987a10{width:100%;}.elementor-3103 .elementor-element.elementor-element-7bbe0ca{width:100%;}.elementor-3103 .elementor-element.elementor-element-62cf8ac{width:100%;}}@media(min-width:1025px){.elementor-3103 .elementor-element.elementor-element-2799fc3 > .elementor-background-overlay{background-attachment:fixed;}}/* Start custom CSS for section, class: .elementor-element-e423cab */<script>
import GUI from "https://cdn.jsdelivr.net/npm/lil-gui@0.18.2/+esm"

const canvasEl = document.querySelector("canvas");
const textureEl = document.createElement("canvas");
const textureCtx = textureEl.getContext("2d");

const fontOptions = {
    "Arial": "Arial, sans-serif",
    "Verdana": "Verdana, sans-serif",
    "Tahoma": "Tahoma, sans-serif",
    "Times New Roman": "Times New Roman, serif",
    "Georgia": "Georgia, serif",
    "Garamond": "Garamond, serif",
    "Courier New": "Courier New, monospace",
    "Brush Script MT": "Brush Script MT, cursive"
}

const params = {
    fontName: "Verdana",
    isBold: false,
    fontSize: 80,
    text: "fluid",
    pointerSize: null,
    color: {r: 1., g: .0, b: .5}
};

const pointer = {
    x: 0,
    y: 0,
    dx: 0,
    dy: 0,
    moved: false,
};


let outputColor, velocity, divergence, pressure, canvasTexture;
let isPreview = true;

const gl = canvasEl.getContext("webgl");
gl.getExtension("OES_texture_float");

const vertexShader = createShader(
    document.getElementById("vertShader").innerHTML,
    gl.VERTEX_SHADER);

const splatProgram = createProgram("fragShaderPoint");
const divergenceProgram = createProgram("fragShaderDivergence");
const pressureProgram = createProgram("fragShaderPressure");
const gradientSubtractProgram = createProgram("fragShaderGradientSubtract");
const advectionProgram = createProgram("fragShaderAdvection");
const outputShaderProgram = createProgram("fragShaderOutputShader");

gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
    -1, -1,
    -1, 1,
    1, 1,
    1, -1
]), gl.STATIC_DRAW);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), gl.STATIC_DRAW);
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(0);


createTextCanvasTexture();
initFBOs();
createControls();
setupEvents();
resizeCanvas();
window.addEventListener("resize", resizeCanvas);

render();

function createTextCanvasTexture() {
    canvasTexture = gl.createTexture();
    gl.bindTexture(gl.TEXTURE_2D, canvasTexture);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
}

function updateTextCanvas() {
    textureCtx.fillStyle = "black";
    textureCtx.fillRect(0, 0, textureEl.width, textureEl.height);

    textureCtx.font = (params.isBold ? "bold" : "normal") + " " + (params.fontSize * devicePixelRatio) + "px " + fontOptions[params.fontName];
    textureCtx.fillStyle = "#ffffff";
    textureCtx.textAlign = "center";

    textureCtx.filter = "blur(3px)";

    const textBox = textureCtx.measureText(params.text);
    textureCtx.fillText(params.text, .5 * textureEl.width, .5 * textureEl.height + .5 * textBox.actualBoundingBoxAscent);

    gl.activeTexture(gl.TEXTURE0);
    gl.bindTexture(gl.TEXTURE_2D, canvasTexture);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureEl);
}

function createProgram(elId) {
    const shader = createShader(
        document.getElementById(elId).innerHTML,
        gl.FRAGMENT_SHADER);
    const program = createShaderProgram(vertexShader, shader);
    const uniforms = getUniforms(program);
    return {
        program, uniforms
    }
}

function createShaderProgram(vertexShader, fragmentShader) {
    const program = gl.createProgram();
    gl.attachShader(program, vertexShader);
    gl.attachShader(program, fragmentShader);
    gl.linkProgram(program);

    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
        console.error("Unable to initialize the shader program: " + gl.getProgramInfoLog(program));
        return null;
    }

    return program;
}

function getUniforms(program) {
    let uniforms = [];
    let uniformCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
    for (let i = 0; i < uniformCount; i++) {
        let uniformName = gl.getActiveUniform(program, i).name;
        uniforms[uniformName] = gl.getUniformLocation(program, uniformName);
    }
    return uniforms;
}

function createShader(sourceCode, type) {
    const shader = gl.createShader(type);
    gl.shaderSource(shader, sourceCode);
    gl.compileShader(shader);

    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
        console.error("An error occurred compiling the shaders: " + gl.getShaderInfoLog(shader));
        gl.deleteShader(shader);
        return null;
    }

    return shader;
}

function blit(target) {
    if (target == null) {
        gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
        gl.bindFramebuffer(gl.FRAMEBUFFER, null);
    } else {
        gl.viewport(0, 0, target.width, target.height);
        gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo);
    }
    gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);
}

function initFBOs() {
    const fboSize = [
        Math.floor(.5 * window.innerWidth),
        Math.floor(.5 * window.innerHeight),
    ]
    outputColor = createDoubleFBO(fboSize[0], fboSize[1]);
    velocity = createDoubleFBO(fboSize[0], fboSize[1], gl.RG);
    divergence = createFBO(fboSize[0], fboSize[1], gl.RGB);
    pressure = createDoubleFBO(fboSize[0], fboSize[1], gl.RGB);
}


function createFBO(w, h, type = gl.RGBA) {
    gl.activeTexture(gl.TEXTURE0);

    const texture = gl.createTexture();
    gl.bindTexture(gl.TEXTURE_2D, texture);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
    gl.texImage2D(gl.TEXTURE_2D, 0, type, w, h, 0, type, gl.FLOAT, null);

    const fbo = gl.createFramebuffer();
    gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
    gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
    gl.viewport(0, 0, w, h);
    gl.clear(gl.COLOR_BUFFER_BIT);

    return {
        fbo,
        width: w,
        height: h,
        attach(id) {
            gl.activeTexture(gl.TEXTURE0 + id);
            gl.bindTexture(gl.TEXTURE_2D, texture);
            return id;
        }
    };
}

function createDoubleFBO(w, h, type) {
    let fbo1 = createFBO(w, h, type);
    let fbo2 = createFBO(w, h, type);

    return {
        width: w,
        height: h,
        texelSizeX: 1. / w,
        texelSizeY: 1. / h,
        read: () => {
            return fbo1;
        },
        write: () => {
            return fbo2;
        },
        swap() {
            let temp = fbo1;
            fbo1 = fbo2;
            fbo2 = temp;
        }
    }
}

function render(t) {

    const dt = 1 / 60;

    if (t && isPreview) {
        updateMousePosition(
            (.5 - .45 * Math.sin(.003 * t - 2)) * window.innerWidth,
            (.5 + .1 * Math.sin(.0025 * t) + .1 * Math.cos(.002 * t)) * window.innerHeight
        );
    }

    if (pointer.moved) {
        if (!isPreview) {
            pointer.moved = false;
        }

        gl.useProgram(splatProgram.program);
        gl.uniform1i(splatProgram.uniforms.u_input_texture, velocity.read().attach(1));
        gl.uniform1f(splatProgram.uniforms.u_ratio, canvasEl.width / canvasEl.height);
        gl.uniform2f(splatProgram.uniforms.u_point, pointer.x / canvasEl.width, 1 - pointer.y / canvasEl.height);
        gl.uniform3f(splatProgram.uniforms.u_point_value, pointer.dx, -pointer.dy, 1);
        gl.uniform1f(splatProgram.uniforms.u_point_size, params.pointerSize);
        blit(velocity.write());
        velocity.swap();

        gl.uniform1i(splatProgram.uniforms.u_input_texture, outputColor.read().attach(1));
        gl.uniform3f(splatProgram.uniforms.u_point_value, 1. - params.color.r, 1. - params.color.g, 1. - params.color.b);
        blit(outputColor.write());
        outputColor.swap();
    }

    gl.useProgram(divergenceProgram.program);
    gl.uniform2f(divergenceProgram.uniforms.u_texel, velocity.texelSizeX, velocity.texelSizeY);
    gl.uniform1i(divergenceProgram.uniforms.u_velocity_texture, velocity.read().attach(1));
    blit(divergence);

    gl.useProgram(pressureProgram.program);
    gl.uniform2f(pressureProgram.uniforms.u_texel, velocity.texelSizeX, velocity.texelSizeY);
    gl.uniform1i(pressureProgram.uniforms.u_divergence_texture, divergence.attach(1));

    for (let i = 0; i < 10; i++) {
        gl.uniform1i(pressureProgram.uniforms.u_pressure_texture, pressure.read().attach(2));
        blit(pressure.write());
        pressure.swap();
    }

    gl.useProgram(gradientSubtractProgram.program);
    gl.uniform2f(gradientSubtractProgram.uniforms.u_texel, velocity.texelSizeX, velocity.texelSizeY);
    gl.uniform1i(gradientSubtractProgram.uniforms.u_pressure_texture, pressure.read().attach(1));
    gl.uniform1i(gradientSubtractProgram.uniforms.u_velocity_texture, velocity.read().attach(2));
    blit(velocity.write());
    velocity.swap();

    gl.useProgram(advectionProgram.program);
    gl.uniform1f(advectionProgram.uniforms.u_use_text, 0);
    gl.uniform2f(advectionProgram.uniforms.u_texel, velocity.texelSizeX, velocity.texelSizeY);
    gl.uniform1i(advectionProgram.uniforms.u_velocity_texture, velocity.read().attach(1));
    gl.uniform1i(advectionProgram.uniforms.u_input_texture, velocity.read().attach(1));
    gl.uniform1f(advectionProgram.uniforms.u_dt, dt);
    blit(velocity.write());
    velocity.swap();

    gl.useProgram(advectionProgram.program);
    gl.uniform1f(advectionProgram.uniforms.u_use_text, 1);
    gl.uniform2f(advectionProgram.uniforms.u_texel, outputColor.texelSizeX, outputColor.texelSizeY);
    gl.uniform1i(advectionProgram.uniforms.u_input_texture, outputColor.read().attach(2));
    blit(outputColor.write());
    outputColor.swap();

    gl.useProgram(outputShaderProgram.program);
    gl.uniform1i(outputShaderProgram.uniforms.u_output_texture, outputColor.read().attach(1));

    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
    gl.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0);

    requestAnimationFrame(render);
}

function resizeCanvas() {
    params.pointerSize = 4 / window.innerHeight;
    canvasEl.width = textureEl.width = window.innerWidth;
    canvasEl.height = textureEl.height = window.innerHeight;
	 initFBOs();
    updateTextCanvas();
}

function setupEvents() {
    canvasEl.addEventListener("mousemove", (e) => {
        isPreview = false;
        updateMousePosition(e.pageX, e.pageY);
    });

    canvasEl.addEventListener("touchmove", (e) => {
        e.preventDefault();
        isPreview = false;
        updateMousePosition(e.targetTouches[0].pageX, e.targetTouches[0].pageY);
    });
}

function updateMousePosition(eX, eY) {
    pointer.moved = true;
    pointer.dx = 5 * (eX - pointer.x);
    pointer.dy = 5 * (eY - pointer.y);
    pointer.x = eX;
    pointer.y = eY;
}

function createControls() {
    const gui = new GUI();
	 gui.close();
	
    gui
        .add(params, "text")
        .onChange(updateTextCanvas);
    gui
        .add(params, "fontSize", 10, 300)
        .onChange(updateTextCanvas)
        .name("font size, px");
    gui
        .add(params, "isBold")
        .onChange(updateTextCanvas)
        .name("bold");
    gui
        .add(params, "fontName", Object.keys(fontOptions))
        .onChange(updateTextCanvas)
        .name("font");
    gui
        .addColor(params, "color");
}
<script>/* End custom CSS */
/* Start custom CSS for social-icons, class: .elementor-element-3f381fb */.elementor-icon.elementor-social-icon.elementor-social-icon-instagram.elementor-repeater-item-3e53207 {
    background: linear-gradient(45deg, #f09433, #e6683c, #dc2743, #cc2366, #bc1888);
    padding: 10px;
    
}

.elementor-icon.elementor-social-icon.elementor-social-icon-instagram.elementor-repeater-item-3e53207 svg {
    fill: white; /* Pour rendre l'icône SVG blanche au-dessus du dégradé */
}/* End custom CSS */
/* Start Custom Fonts CSS */@font-face {
	font-family: 'dk lemon yellow sun';
	font-style: normal;
	font-weight: normal;
	font-display: auto;
	src: url('https://www.eventek.fr/wp-content/uploads/2024/09/DK-Lemon-Yellow-Sun.eot');
	src: url('https://www.eventek.fr/wp-content/uploads/2024/09/DK-Lemon-Yellow-Sun.eot?#iefix') format('embedded-opentype'),
		url('https://www.eventek.fr/wp-content/uploads/2024/09/DK-Lemon-Yellow-Sun.woff2') format('woff2'),
		url('https://www.eventek.fr/wp-content/uploads/2024/09/DK-Lemon-Yellow-Sun.woff') format('woff'),
		url('https://www.eventek.fr/wp-content/uploads/2024/09/DK-Lemon-Yellow-Sun.ttf') format('truetype'),
		url('https://www.eventek.fr/wp-content/uploads/2024/09/DK-Lemon-Yellow-Sun.svg#dklemonyellowsun') format('svg');
}
@font-face {
	font-family: 'dk lemon yellow sun';
	font-style: normal;
	font-weight: normal;
	font-display: auto;
	src: ;
}
/* End Custom Fonts CSS */