

window.ImpulseElementConfig = (function() {
    'use strict';

    
    const W = (selector) => {
        if (!selector) return '{{WRAPPER}}';
        
        if (selector.indexOf(',') !== -1) {
            return selector.split(',').map(s => `{{WRAPPER}} ${s.trim()}`).join(', ');
        }
        return `{{WRAPPER}} ${selector}`;
    };

    
    const units = {
        px: (v) => `${v}px`,
        pct: (v) => `${v}%`,
        em: (v) => `${v}em`,
        ratio: (v) => v / 100, 
        flexAlign: (v) => ({ left: 'flex-start', center: 'center', right: 'flex-end', justify: 'space-between' }[v] || v),
        fullWidth: (v) => v === 'full' ? '100%' : 'auto',
        gridCols: (v) => `repeat(${v}, 1fr)`
    };

    
    const contrastColor = (hex) => {
        if (!hex) return '#000000';
        hex = hex.replace('#', '');
        if (hex.length === 3) hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
        var r = parseInt(hex.substr(0, 2), 16), g = parseInt(hex.substr(2, 2), 16), b = parseInt(hex.substr(4, 2), 16);
        return (0.299 * r + 0.587 * g + 0.114 * b) / 255 > 0.5 ? '#000000' : '#ffffff';
    };

    
    

    const elements = {


        
        text: {
            settings: {
                
                content: {
                    render_type: 'content',
                    target: '.impulse-text [contenteditable]',
                    type: 'html'
                },
                
                
                font_family: {
                    selector: W('.impulse-text'),
                    property: 'font-family'
                },
                color: {
                    selector: W('.impulse-text'),
                    property: 'color'
                },
                size: {
                    selector: W('.impulse-text'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                line_height: {
                    selector: W('.impulse-text'),
                    property: 'line-height',
                    unit: units.ratio,
                    responsive: true
                },
                letter_spacing: {
                    selector: W('.impulse-text'),
                    property: 'letter-spacing',
                    unit: units.px,
                    responsive: true
                },
                

                
                align: {
                    selector: W('.impulse-text'),
                    property: 'text-align',
                    responsive: true
                },
                columns: { render_type: 'refresh' },
                column_gap: {
                    selector: W('.impulse-text'),
                    property: 'column-gap',
                    unit: units.px,
                    responsive: true
                },
                
                
                bg_color: {
                    selector: W('.impulse-text'),
                    property: 'background-color'
                },
                hover_color: {
                    selector: W('.impulse-text:hover'),
                    property: 'color'
                },


                

                
                text_halo:           { render_type: 'refresh' },
                
                
                margin_top: { selector: W('.impulse-text'), property: 'margin-top', unit: units.px, responsive: true },
                margin_bottom: { selector: W('.impulse-text'), property: 'margin-bottom', unit: units.px, responsive: true },
                padding_top: { selector: W('.impulse-text'), property: 'padding-top', unit: units.px, responsive: true },
                padding_right: { selector: W('.impulse-text'), property: 'padding-right', unit: units.px, responsive: true },
                padding_bottom: { selector: W('.impulse-text'), property: 'padding-bottom', unit: units.px, responsive: true },
                padding_left: { selector: W('.impulse-text'), property: 'padding-left', unit: units.px, responsive: true },

                
                width: { render_type: 'refresh', responsive: true },
                min_height: { render_type: 'refresh', responsive: true }
            },
            structural: ['columns', 'min_height', 'width']
        },
        
        button: {
            settings: {
                
                text: { render_type: 'refresh' },
                url: { render_type: 'refresh' },
                icon: { render_type: 'refresh' },
                icon_position: { render_type: 'refresh' },
                
                
                style: { render_type: 'refresh' },
                
                
                align: {
                    selector: W('.impulse-button-wrap'),
                    property: 'justify-content',
                    transform: function(v) {
                        var map = { left: 'flex-start', center: 'center', right: 'flex-end', full: 'stretch' };
                        return map[v] || 'center';
                    }
                },
                

                weight: {
                    selector: W('.impulse-button'),
                    property: 'font-weight'
                },

                
                font_size: {
                    selector: W('.impulse-button'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },


                

                

                bg_color: {
                    selector: W('.impulse-button'),
                    property: '--impulse-bg-color'
                },
                text_color: {
                    selector: W('.impulse-button'),
                    property: 'color'
                },
                border_color: {
                    selector: W('.impulse-button'),
                    property: '--impulse-border-color'
                },

                icon_spacing: {
                    selector: W('.impulse-button'),
                    property: 'gap',
                    unit: units.px
                },

                icon_size: {
                    selector: W('.impulse-button svg'),
                    property: ['width', 'height'],
                    unit: units.px
                },

                width: {
                    selector: W('.impulse-button'),
                    property: 'width',
                    unit: units.fullWidth
                },


                

                
                
                btn_font: {
                    selector: W('.impulse-button'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                btn_pad_y: {
                    selector: W('.impulse-button'),
                    property: ['padding-top', 'padding-bottom'],
                    unit: units.px,
                    responsive: true
                },
                btn_pad_x: {
                    selector: W('.impulse-button'),
                    property: ['padding-left', 'padding-right'],
                    unit: units.px,
                    responsive: true
                },

                btn_min_width: {
                    selector: W('.impulse-button'),
                    property: '--impulse-btn-min-width',

                    
                    
                    unit: function (v) { return v > 0 ? v + 'px' : 'auto'; },

                    
                    
                    responsive: true
                },

                shadow: {
                    selector: W('.impulse-button'),
                    property: 'box-shadow',
                    transform: function(v) {
                        var map = { none: 'none', small: '0 2px 8px rgba(0,0,0,0.12)', medium: '0 4px 16px rgba(0,0,0,0.15)', large: '0 8px 32px rgba(0,0,0,0.2)' };
                        return map[v] || 'none';
                    }
                },

                
                btn_size: { render_type: 'refresh' },

                border_width: {
                    selector: W('.impulse-button'),
                    property: 'border-width',
                    unit: units.px
                },


                

                
                border_radius:         { render_type: 'none' },

                

                

                
                border_gradient_to:    { render_type: 'refresh' },
                border_gradient_angle: { render_type: 'none' },
                border_mouse_sens:     { render_type: 'none' },
                border_spin_speed:     { render_type: 'none' },

                new_tab: { render_type: 'refresh' }
            },

            

            
            structural: ['text', 'style', 'icon', 'icon_position', 'url', 'btn_size', 'new_tab', 'align']
        },


        
        image: {
            settings: {

                
                img_align: {
                    selector: W('.impulse-image-wrapper'),
                    property: 'align-self',
                    responsive: true,
                    transform: function (v) {
                        var m = { left: 'flex-start', center: 'center', right: 'flex-end' };
                        return m[v] || '';
                    }
                },
                image_id: { render_type: 'refresh' },
                alt: { render_type: 'none' },
                link: { render_type: 'refresh' },
                lightbox: { render_type: 'refresh' },


                

                

                
                image_crop_tl:        { render_type: 'none' },
                image_crop_tr:        { render_type: 'none' },
                image_crop_br:        { render_type: 'none' },
                image_crop_bl:        { render_type: 'none' },
                image_crop_top_c1:    { render_type: 'none' },
                image_crop_top_c2:    { render_type: 'none' },
                image_crop_right_c1:  { render_type: 'none' },
                image_crop_right_c2:  { render_type: 'none' },
                image_crop_bottom_c1: { render_type: 'none' },
                image_crop_bottom_c2: { render_type: 'none' },
                image_crop_left_c1:   { render_type: 'none' },
                image_crop_left_c2:   { render_type: 'none' },
                image_radius_tl:      { render_type: 'none' },
                image_radius_tr:      { render_type: 'none' },
                image_radius_br:      { render_type: 'none' },
                image_radius_bl:      { render_type: 'none' },

                
                image_crop_top:       { render_type: 'none' },
                image_crop_right:     { render_type: 'none' },
                image_crop_bottom:    { render_type: 'none' },
                image_crop_left:      { render_type: 'none' },
                image_crop_top_c:     { render_type: 'none' },
                image_crop_right_c:   { render_type: 'none' },
                image_crop_bottom_c:  { render_type: 'none' },
                image_crop_left_c:    { render_type: 'none' },

                

                
                image_crop_top_nodes:    { render_type: 'refresh' },
                image_crop_right_nodes:  { render_type: 'refresh' },
                image_crop_bottom_nodes: { render_type: 'refresh' },
                image_crop_left_nodes:   { render_type: 'refresh' },

                image_crop_tl_tangent:   { render_type: 'refresh' },
                image_crop_tr_tangent:   { render_type: 'refresh' },
                image_crop_br_tangent:   { render_type: 'refresh' },
                image_crop_bl_tangent:   { render_type: 'refresh' },

                
                video_crop_top:          { render_type: 'refresh' },
                video_crop_right:        { render_type: 'refresh' },
                video_crop_bottom:       { render_type: 'refresh' },
                video_crop_left:         { render_type: 'refresh' },
                video_crop_tl:           { render_type: 'refresh' },
                video_crop_tr:           { render_type: 'refresh' },
                video_crop_br:           { render_type: 'refresh' },
                video_crop_bl:           { render_type: 'refresh' },
                video_crop_top_c:        { render_type: 'refresh' },
                video_crop_right_c:      { render_type: 'refresh' },
                video_crop_bottom_c:     { render_type: 'refresh' },
                video_crop_left_c:       { render_type: 'refresh' },
                video_crop_top_c1:       { render_type: 'refresh' },
                video_crop_top_c2:       { render_type: 'refresh' },
                video_crop_right_c1:     { render_type: 'refresh' },
                video_crop_right_c2:     { render_type: 'refresh' },
                video_crop_bottom_c1:    { render_type: 'refresh' },
                video_crop_bottom_c2:    { render_type: 'refresh' },
                video_crop_left_c1:      { render_type: 'refresh' },
                video_crop_left_c2:      { render_type: 'refresh' },
                video_crop_top_nodes:    { render_type: 'refresh' },
                video_crop_right_nodes:  { render_type: 'refresh' },
                video_crop_bottom_nodes: { render_type: 'refresh' },
                video_crop_left_nodes:   { render_type: 'refresh' },
                video_crop_tl_tangent:   { render_type: 'refresh' },
                video_crop_tr_tangent:   { render_type: 'refresh' },
                video_crop_br_tangent:   { render_type: 'refresh' },
                video_crop_bl_tangent:   { render_type: 'refresh' },
                video_radius_tl:         { render_type: 'refresh' },
                video_radius_tr:         { render_type: 'refresh' },
                video_radius_br:         { render_type: 'refresh' },
                video_radius_bl:         { render_type: 'refresh' },

                
                image_shadow_side:     { render_type: 'refresh' }, 
                image_shadow_top:      { render_type: 'refresh' },
                image_shadow_right:    { render_type: 'refresh' },
                image_shadow_bottom:   { render_type: 'refresh' },
                image_shadow_left:     { render_type: 'refresh' },
                image_shadow_strength: { render_type: 'refresh' },
                image_shadow_blur:     { render_type: 'refresh' },

                

                

                depth_map:      { render_type: 'none' },
                depth_strength: { render_type: 'none' },

                
                bg_color: {
                    selector: W('.impulse-image'),
                    property: 'background-color'
                },
                

                
                width: {

                    

                    
                    
                    selector: W(),
                    property: '--impulse-width',
                    unit: units.pct,
                    responsive: true
                },
                max_width: {
                    selector: W('.impulse-image-wrapper:not(.impulse-image-pinned)'),
                    property: 'max-width',
                    unit: units.px,
                    responsive: true
                },
                object_fit: {
                    selector: W('.impulse-image-wrapper img'),
                    property: 'object-fit'
                },
                
                
                align: {
                    selector: W(),
                    property: 'justify-content',
                    unit: units.flexAlign,
                    responsive: true
                },
                
                
                border_radius: {
                    selector: W('.impulse-image img'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                border_width: {
                    selector: W('.impulse-image img'),
                    property: 'border-width',
                    unit: units.px
                },
                border_color: {
                    selector: W('.impulse-image img'),
                    property: 'border-color'
                },
                
                
                hover_effect: { render_type: 'refresh' },
                style_preset: { render_type: 'refresh' },
                caption: { render_type: 'refresh' },
                

                margin_top: { selector: W('.impulse-image-wrapper:not(.impulse-image-pinned)'), property: 'margin-top', unit: units.px, responsive: true },
                margin_bottom: { selector: W('.impulse-image-wrapper:not(.impulse-image-pinned)'), property: 'margin-bottom', unit: units.px, responsive: true },
                padding_top: { selector: W('.impulse-image-wrapper:not(.impulse-image-pinned)'), property: 'padding-top', unit: units.px, responsive: true },
                padding_bottom: { selector: W('.impulse-image-wrapper:not(.impulse-image-pinned)'), property: 'padding-bottom', unit: units.px, responsive: true },
                
                
                shadow: {
                    selector: W('.impulse-image img'),
                    property: 'box-shadow',
                    transform: function(v) {
                        var map = { none: 'none', small: '0 2px 8px rgba(0,0,0,0.12)', medium: '0 4px 16px rgba(0,0,0,0.15)', large: '0 8px 32px rgba(0,0,0,0.2)' };
                        return map[v] || 'none';
                    }
                },

            },
            structural: ['image_id', 'link', 'caption', 'hover_effect', 'style_preset', 'fill_container']
        },


        
        schedule: {
            settings: {
                title: { render_type: 'refresh' },
                days_ahead: { render_type: 'refresh' },
                max_width: { render_type: 'refresh' },
                card_bg: { render_type: 'refresh' },
                accent_color: { render_type: 'refresh' },
                accent_text: { render_type: 'refresh' },
                border_color: { render_type: 'refresh' }
            }
        },


        
        divider: {
            settings: {
                add_element: { render_type: 'refresh' },
                style: { render_type: 'refresh' },
                orientation: { render_type: 'refresh' },
                
                
                bg_color: {
                    selector: W('.impulse-divider'),
                    property: 'background-color'
                },
                
                
                width: { render_type: 'refresh' },
                thickness: { render_type: 'refresh' },
                color: { render_type: 'refresh' },
                color2: { render_type: 'refresh' },
                complexity: { render_type: 'refresh' },

                
                tilt: {
                    selector: W('.impulse-divider-inner'),
                    property: 'transform',
                    transform: function(v) {
                        var n = parseInt(v) || 0;
                        return n > 0 ? 'rotateY(' + n + 'deg)' : 'none';
                    }
                },
                
                
                align: {
                    selector: W('.impulse-divider'),
                    property: 'justify-content',
                    transform: function(v) {
                        var map = { left: 'flex-start', center: 'center', right: 'flex-end' };
                        return map[v] || 'center';
                    }
                },
                position_align: { render_type: 'refresh' },
                
                
                element_spacing: {
                    selector: W('.impulse-divider'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                element_text_size: {
                    selector: W('.impulse-divider span'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                element_text_weight: {
                    selector: W('.impulse-divider span'),
                    property: 'font-weight'
                },
                element_color: {
                    selector: W('.impulse-divider span, .impulse-divider i'),
                    property: 'color'
                },
                element_icon_size: {
                    selector: W('.impulse-divider i'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                
                
                icon_bg_color: {
                    selector: W('.impulse-divider .impulse-divider-icon'),
                    property: 'background-color'
                },
                icon_padding: {
                    selector: W('.impulse-divider .impulse-divider-icon'),
                    property: 'padding',
                    unit: units.px,
                    responsive: true
                },
                icon_radius: {
                    selector: W('.impulse-divider .impulse-divider-icon'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                icon_border_width: {
                    selector: W('.impulse-divider .impulse-divider-icon'),
                    property: 'border-width',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['add_element', 'style', 'orientation', 'icon', 'icon_view', 'line_type', 'width', 'thickness', 'color', 'color2', 'complexity', 'position_align', 'label']
        },


        
        icon_card: {
            settings: {
                icon: { render_type: 'refresh' },
                view: { render_type: 'refresh' },
                icon_image: { render_type: 'refresh' },
                
                
                size: {
                    selector: [W('.impulse-icon-wrap')],
                    property: '--impulse-size',
                    unit: units.px,
                    responsive: true
                },
                color: {
                    selector: W('.impulse-icon-wrap'),
                    property: 'color'
                },
                hover_color: {
                    selector: W('.impulse-icon-wrap:hover'),
                    property: 'color'
                },
                

                
                
                bg_color: { render_type: 'refresh' },
                padding: {
                    selector: W('.impulse-icon-wrap'),
                    property: 'padding',
                    unit: units.px
                },
                border_radius: {
                    selector: W('.impulse-icon-wrap'),
                    property: 'border-radius',
                    unit: units.px
                },
                border_width: {
                    selector: W('.impulse-icon-wrap'),
                    property: 'border-width',
                    unit: units.px
                },
                border_color: {
                    selector: W('.impulse-icon-wrap'),
                    property: 'border-color'
                },
                
                
                title_content: {
                    render_type: 'content',
                    target: '.impulse-icon-title',
                    type: 'text'
                },
                title_size: {
                    selector: W('.impulse-icon-title'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },

                
                text_content: {
                    render_type: 'content',
                    target: '.impulse-icon-text',
                    type: 'text'
                },
                text_size: {
                    selector: W('.impulse-icon-text'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                
                text_color: {
                    selector: W('.impulse-icon-text, .impulse-icon-title'),
                    property: 'color'
                },
                
                
                align: {
                    render_type: 'none',
                    responsive: true
                },
                valign: {
                    selector: W('.impulse-icon'),
                    property: 'align-items',
                    unit: (v) => ({ top: 'flex-start', center: 'center', bottom: 'flex-end' }[v] || 'center')
                },
                text_spacing: {
                    selector: W('.impulse-icon'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                text_position: { render_type: 'refresh' },


                
                
                hover_effect: { render_type: 'refresh' },
                
                
                container_bg: {
                    selector: W('.impulse-icon-container'),
                    property: 'background-color'
                },
                container_radius: {
                    selector: W('.impulse-icon-container'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                container_width: {
                    selector: W('.impulse-icon-container'),
                    property: 'width',
                    unit: units.px,
                    responsive: true
                },
                container_height: {
                    selector: W('.impulse-icon-container'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                
                
                padding_top: { selector: W('.impulse-icon-container'), property: 'padding-top', unit: units.px, responsive: true },
                padding_right: { selector: W('.impulse-icon-container'), property: 'padding-right', unit: units.px, responsive: true },
                padding_bottom: { selector: W('.impulse-icon-container'), property: 'padding-bottom', unit: units.px, responsive: true },
                padding_left: { selector: W('.impulse-icon-container'), property: 'padding-left', unit: units.px, responsive: true }
            },
            structural: ['icon', 'view', 'icon_image', 'text_position', 'bg_color', 'container_bg', 'continuous_effect', 'link', 'align', 'valign']
        },


        
        video: {
            settings: {
                video_url: { render_type: 'refresh' },
                aspect_ratio: { render_type: 'refresh' },
                autoplay: { render_type: 'refresh' },
                controls: { render_type: 'refresh' },
                
                
                bg_color: {
                    selector: W('.impulse-video'),
                    property: 'background-color'
                },
                

                
                width: {
                    selector: W('.impulse-video'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                },
                align: {
                    selector: W('.impulse-video-outer'),
                    property: 'justify-content',
                    transform: function(v) {
                        var map = { left: 'flex-start', center: 'center', right: 'flex-end' };
                        return map[v] || 'center';
                    },
                    responsive: true
                },
                
                max_width: {
                    selector: W('.impulse-video'),
                    property: 'max-width',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-video, .impulse-video iframe, .impulse-video video'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                shadow: {
                    selector: W('.impulse-video'),
                    property: 'box-shadow',
                    transform: function(v) {
                        var map = { none: 'none', small: '0 2px 8px rgba(0,0,0,0.12)', medium: '0 4px 16px rgba(0,0,0,0.15)', large: '0 8px 32px rgba(0,0,0,0.2)' };
                        return map[v] || 'none';
                    }
                }
            },
            structural: ['video_url', 'video_file_url', 'aspect_ratio', 'autoplay', 'controls', 'mask_id', 'mask_url', 'poster_url']
        },


        

        

        

        

        section: {
            settings: {
                content_width: {
                    selector: W('> .impulse-section > .impulse-container'),
                    property: '--impulse-content-width',
                    unit: function (v) { return Math.max(1, Math.min(100, parseInt(v) || 100)) + '%'; },
                    responsive: true
                }
            }
        },


        
        grid: {
            settings: {
                gap_horizontal: {
                    selector: W('.impulse-grid'),
                    property: 'column-gap',
                    unit: units.px,
                    responsive: true
                },
                gap_vertical: {
                    selector: W('.impulse-grid'),
                    property: 'row-gap',
                    unit: units.px,
                    responsive: true
                },
                min_height: {
                    selector: W('.impulse-grid'),
                    property: 'min-height',
                    unit: units.px,
                    responsive: true
                },
                padding: {
                    selector: W('.impulse-grid'),
                    property: 'padding',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-grid'),
                    property: 'border-radius',
                    unit: units.px
                },
                bg_color: {
                    selector: W('.impulse-grid'),
                    property: 'background-color'
                },
                margin_top: {
                    selector: W(),
                    property: 'margin-top',
                    unit: units.px,
                    responsive: true
                },
                margin_bottom: {
                    selector: W(),
                    property: 'margin-bottom',
                    unit: units.px,
                    responsive: true
                },
                max_width: {
                    selector: W('.impulse-grid-wrapper'),
                    property: 'max-width',
                    unit: (v) => v > 0 ? v + 'px' : 'none',
                    responsive: true
                },
                border_width: {
                    selector: W('.impulse-grid'),
                    property: 'border-width',
                    unit: units.px
                },
                border_color: {
                    selector: W('.impulse-grid'),
                    property: 'border-color'
                },

                

                content_gap: { render_type: 'refresh' },

                grid_halign: { render_type: 'refresh' }
            },

            

            
            structural: ['columns', 'rows', 'auto_fit', 'layout_mode', 'direction', 'justify', 'align', 'wrap', 'content_gap', 'grid_halign', 'cell_sizing']
        },

        marquee: {
            settings: {

                

                
                
                width: {
                    custom: function(_el, val, id) {
                        var v = Math.max(30, Math.min(100, parseInt(val) || 100));
                        var sel = '.impulse-el[data-id="' + id + '"] .impulse-marquee';
                        return sel + '{width:' + v + 'vw !important;margin-left:calc(50% - ' + (v / 2) + 'vw) !important;margin-right:0 !important;max-width:none !important}';
                    },
                    responsive: true
                }

                

                
            },

            
            
            structural: ['mode', 'image_style', 'caption_pos', 'card_width', 'row_count', 'dir_0', 'dir_1', 'dir_2', 'speed', 'edge_fade', 'pause_hover', 'hover_reveal', 'cards', 'card_bg', 'text_color', 'icon_color', 'border_color', 'card_height', 'card_radius']
        },
        rows: {
            settings: {
                bg_color: {
                    selector: W('.impulse-rows'),
                    property: 'background-color'
                },
                row_gap: {
                    selector: W('.impulse-rows'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                min_height: {
                    selector: W('.impulse-rows'),
                    property: 'min-height',
                    unit: units.px,
                    responsive: true
                },
                max_width: {
                    selector: W(),
                    property: 'max-width',
                    unit: (v) => v > 0 ? v + 'px' : 'none',
                    responsive: true
                },
                margin_top: {
                    selector: W(),
                    property: 'margin-top',
                    unit: units.px,
                    responsive: true
                },
                margin_bottom: {
                    selector: W(),
                    property: 'margin-bottom',
                    unit: units.px,
                    responsive: true
                },

                
                content_gap: { render_type: 'refresh' }
            },
            structural: ['rows', 'content_gap']
        },
        columns: {
            settings: {
                bg_color: {
                    selector: W('.impulse-layout-grid'),
                    property: 'background-color'
                },
                col_gap: {
                    selector: W('.impulse-layout-grid'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                min_height: {
                    selector: W('.impulse-layout-grid'),
                    property: 'min-height',
                    unit: units.px,
                    responsive: true
                },
                max_width: {
                    selector: W(),
                    property: 'max-width',
                    unit: (v) => v > 0 ? v + 'px' : 'none',
                    responsive: true
                },
                margin_top: {
                    selector: W(),
                    property: 'margin-top',
                    unit: units.px,
                    responsive: true
                },
                margin_bottom: {
                    selector: W(),
                    property: 'margin-bottom',
                    unit: units.px,
                    responsive: true
                },

                content_gap: { render_type: 'refresh' }
            },
            structural: ['columns', 'content_gap']
        },


        
        shortcode: {
            settings: {
                shortcode: { render_type: 'refresh' },
                bg_color: {
                    selector: W('.impulse-shortcode'),
                    property: 'background-color'
                },
                padding_top: {
                    selector: W('.impulse-shortcode'),
                    property: 'padding-top',
                    unit: units.px,
                    responsive: true
                },
                padding_right: {
                    selector: W('.impulse-shortcode'),
                    property: 'padding-right',
                    unit: units.px,
                    responsive: true
                },
                padding_bottom: {
                    selector: W('.impulse-shortcode'),
                    property: 'padding-bottom',
                    unit: units.px,
                    responsive: true
                },
                padding_left: {
                    selector: W('.impulse-shortcode'),
                    property: 'padding-left',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['shortcode']
        },


        
        unfold: {
            settings: {
                items: { render_type: 'refresh' },
                allow_multiple: { render_type: 'refresh' },
                first_open: { render_type: 'refresh' },
                icon_style: { render_type: 'refresh' },
                anim_style: { render_type: 'refresh' },
                acc_width: {
                    selector: W('.impulse-unfold') + ',' + W('.impulse-acc-spotlight') + ',' + W('.impulse-unfold-scroll') + ',' + W('.impulse-acc-tiles'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                },

                
                acc_align: { render_type: 'refresh' },

                reveal_cols: { render_type: 'refresh' },
                
                
                bg_color: {
                    selector: W('.impulse-unfold'),
                    property: 'background-color'
                },
                
                header_color: {
                    selector: W('.impulse-unfold-card-title') + ',' + W('.impulse-acc-spot-header') + ',' + W('.impulse-acc-tile-title') + ',' + W('.impulse-acc-tile-num') + ',' + W('.impulse-acc-stack-num.active'),
                    property: 'color'
                },

                content_bg: {
                    selector: W('.impulse-unfold-card') + ',' + W('.impulse-acc-spot-item.active') + ',' + W('.impulse-acc-tile') + ',' + W('.impulse-acc-tile-back'),
                    property: 'background-color'
                },
                content_color: {
                    selector: W('.impulse-unfold-card') + ',' + W('.impulse-acc-spot-body') + ',' + W('.impulse-acc-tile-back') + ',' + W('.impulse-acc-stack-num') + ',' + W('.impulse-acc-stack-nav button'),
                    property: 'color'
                },
                
                gap: {
                    selector: W('.impulse-unfold') + ',' + W('.impulse-acc-tiles'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-unfold') + ',' + W('.impulse-unfold-scroll') + ',' + W('.impulse-acc-tile'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                border_color: {
                    selector: W('.impulse-unfold') + ',' + W('.impulse-unfold-scroll') + ',' + W('.impulse-acc-spot-item') + ',' + W('.impulse-acc-tile'),
                    property: 'border-color'
                },

                
                accent_color: {
                    selector: W('.impulse-acc-spot-item.active .impulse-acc-spot-header'),
                    property: 'color'
                },
                
                spot_bg: {
                    selector: W('.impulse-acc-spotlight'),
                    property: 'background-color'
                },
                
                blur_intensity: {
                    selector: W('.impulse-acc-spot-item:not(.active)'),
                    property: 'filter',
                    unit: (v) => 'blur(' + v + 'px)',
                    responsive: true
                },
                
                title_size: {
                    selector: W('.impulse-acc-spot-header span:first-child') + ',' + W('.impulse-unfold-card-title') + ',' + W('.impulse-acc-tile-title'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                
                content_size: {
                    selector: W('.impulse-acc-spot-body') + ',' + W('.impulse-unfold-card > div:last-child') + ',' + W('.impulse-acc-tile-back'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                
                tiles_cols: {
                    selector: W('.impulse-acc-tiles'),
                    property: 'grid-template-columns',
                    unit: function(v) { return 'repeat(' + v + ',1fr)'; },
                    responsive: true
                },
                number_size: {
                    selector: W('.impulse-acc-tile-num'),
                    property: 'font-size',
                    unit: units.px
                },
                tiles_expand: {},

                
                tiles_align_a: { render_type: 'refresh' },
                tiles_align_b: { render_type: 'refresh' },
                
                card_height: {
                    selector: W('.impulse-acc-tile') + ',' + W('.impulse-acc-tile-flipper') + ',' + W('.impulse-unfold-stage'),
                    property: 'min-height',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['items', 'allow_multiple', 'first_open', 'icon_style', 'anim_style']
        },


        
        plans: {
            settings: {
                plans: { render_type: 'refresh' },
                show_toggle: { render_type: 'refresh' },
                yearly_label: { render_type: 'refresh' },
                equal_height: { render_type: 'refresh' },
                ribbon_style: { render_type: 'refresh' },
                check_icon: { render_type: 'refresh' },
                cross_icon: { render_type: 'refresh' },
                
                
                section_max_width: {
                    selector: W('.impulse-pricing-wrapper'),
                    property: 'max-width',
                    unit: units.px
                },
                
                
                bg_color: {
                    selector: W('.impulse-pricing-card:not(.highlighted)'),
                    property: 'background-color'
                },
                border_color: {
                    selector: W('.impulse-pricing-card:not(.highlighted)'),
                    property: 'border-color'
                },
                border_radius: {
                    selector: W('.impulse-pricing-card'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                
                
                text_color: {
                    selector: W('.impulse-pricing-card:not(.highlighted) .impulse-pricing-subtitle, .impulse-pricing-card:not(.highlighted) .impulse-pricing-feature span'),
                    property: 'color'
                },
                
                
                price_size: {
                    selector: W('.impulse-price-amount'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                
                
                btn_font_size: {
                    selector: W('.impulse-pricing-button'),
                    property: 'font-size',
                    unit: units.px
                },
                
                
                btn_padding_v: {
                    custom: function(el, val, id) {
                        var s = '.impulse-el[data-id="' + id + '"] .impulse-pricing-button';
                        return s + '{padding-top:' + val + 'px!important;padding-bottom:' + val + 'px!important}';
                    }
                },
                
                
                check_color: {
                    selector: W('.impulse-pricing-card:not(.highlighted) svg.impulse-feature-check'),
                    property: 'stroke',
                    important: true
                },
                cross_color: {
                    selector: W('.impulse-pricing-card:not(.highlighted) svg.impulse-feature-cross'),
                    property: 'stroke',
                    important: true
                },
                
                
                button_bg: {
                    selector: W('.impulse-pricing-card:not(.highlighted) .impulse-pricing-button'),
                    property: 'background-color'
                },
                button_color: {
                    selector: W('.impulse-pricing-card:not(.highlighted) .impulse-pricing-button'),
                    property: 'color'
                },
                
                
                ribbon_bg: {
                    selector: W('.impulse-pricing-card:not(.highlighted) .impulse-pricing-ribbon-banner, .impulse-pricing-card:not(.highlighted) .impulse-pricing-ribbon-corner div'),
                    property: 'background-color'
                },
                
                
                highlight_bg: {
                    selector: W('.impulse-pricing-card.highlighted'),
                    property: 'background-color'
                },
                highlight_border: {
                    selector: W('.impulse-pricing-card.highlighted'),
                    property: 'border-color'
                },
                highlight_color: {
                    selector: W('.impulse-pricing-card.highlighted .impulse-pricing-title, .impulse-pricing-card.highlighted .impulse-pricing-subtitle'),
                    property: 'color'
                },
                highlight_button_bg: {
                    selector: W('.impulse-pricing-card.highlighted .impulse-pricing-button'),
                    property: 'background-color'
                },
                highlight_button_color: {
                    selector: W('.impulse-pricing-card.highlighted .impulse-pricing-button'),
                    property: 'color'
                },
                highlight_ribbon_bg: {
                    selector: W('.impulse-pricing-card.highlighted .impulse-pricing-ribbon-banner, .impulse-pricing-card.highlighted .impulse-pricing-ribbon-corner div'),
                    property: 'background-color'
                },
                highlight_check_color: {
                    selector: W('.impulse-pricing-card.highlighted svg.impulse-feature-check'),
                    property: 'stroke',
                    important: true
                },
                highlight_cross_color: {
                    selector: W('.impulse-pricing-card.highlighted svg.impulse-feature-cross'),
                    property: 'stroke',
                    important: true
                }
            },
            structural: ['plans', 'show_toggle', 'equal_height', 'ribbon_style', 'check_icon', 'cross_icon', 'min_card_width']
        },


        
        kinetic: {

            

            

            settings: {
                text:         { render_type: 'none' },
                composition:  { render_type: 'none' },
                tier:         { render_type: 'none' },
                line_gap:     { render_type: 'none' },
                cyl_diameter: { render_type: 'none' },
                cube_style:   { render_type: 'none' },
                cube_size:    { render_type: 'none' },
                accent:       { render_type: 'none' },
                accent_text:  { render_type: 'none' },
                color:        { render_type: 'none' },
                loop:         { render_type: 'none' },
                speed:        { render_type: 'none' },
                intensity:    { render_type: 'none' },
                height:       { render_type: 'none' },
                custom_mode:   { render_type: 'none' },
                custom_lines:  { render_type: 'none' },
                fit_container: { render_type: 'none' },

                
                tag:           { render_type: 'refresh' },

                

                
                align:        { render_type: 'refresh' },
                
                raw_text:     { render_type: 'none' },
                phrases:      { render_type: 'none' },
                preset:       { render_type: 'none' },
                font:         { render_type: 'none' },
                weight:       { render_type: 'none' },
                fill:         { render_type: 'none' },
                grad_speed:   { render_type: 'none' },
                kinetic_font: { render_type: 'none' },
                comp_scale:   { render_type: 'none' },

                
                cursor_magnetic:  { render_type: 'none' },
                cursor_spotlight: { render_type: 'none' },
                cursor_gradient:  { render_type: 'none' },
                cursor_tilt:      { render_type: 'none' }
            },
            structural: ['align']
        },
flip_box: {
            settings: {
                animation_type: { render_type: 'refresh' },
                flip_direction: { render_type: 'refresh' },
                slide_direction: { render_type: 'refresh' },
                
                
                bg_color: {
                    selector: W('.impulse-flip-box'),
                    property: 'background-color'
                },
                
                
                front_title: {
                    render_type: 'content',
                    target: '.impulse-flip-front .impulse-flip-title',
                    type: 'text'
                },
                front_content: {
                    render_type: 'content',
                    target: '.impulse-flip-front .impulse-flip-content',
                    type: 'html'
                },
                front_bg: {
                    selector: W('.impulse-flip-front'),
                    property: 'background-color'
                },
                front_color: {
                    selector: W('.impulse-flip-front'),
                    property: 'color'
                },
                
                
                back_title: {
                    render_type: 'content',
                    target: '.impulse-flip-back .impulse-flip-title',
                    type: 'text'
                },
                back_content: {
                    render_type: 'content',
                    target: '.impulse-flip-back .impulse-flip-content',
                    type: 'html'
                },
                back_bg: {
                    selector: W('.impulse-flip-back'),
                    property: 'background-color'
                },
                back_color: {
                    selector: W('.impulse-flip-back'),
                    property: 'color'
                },
                back_button_text: { render_type: 'refresh' },
                back_button_link: { render_type: 'refresh' },
                
                
                front_title_size: {
                    selector: W('.impulse-flip-title'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                front_content_size: {
                    selector: W('.impulse-flip-content'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                height: {
                    selector: W('.impulse-flip-box'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-flip-front, .impulse-flip-back'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                section_max_width: {
                    selector: W('.impulse-flip-box'),
                    property: 'max-width',
                    unit: units.px
                },
                
                border_width: {
                    selector: [W('.impulse-flip-front'), W('.impulse-flip-back')],
                    property: 'border-width',
                    unit: units.px
                },
                border_color: {
                    selector: [W('.impulse-flip-front'), W('.impulse-flip-back')],
                    property: 'border-color'
                },
                border_top: {
                    selector: [W('.impulse-flip-front'), W('.impulse-flip-back')],
                    property: 'border-top-style',
                    transform: function(v) { return v ? 'solid' : 'none'; }
                },
                border_right: {
                    selector: [W('.impulse-flip-front'), W('.impulse-flip-back')],
                    property: 'border-right-style',
                    transform: function(v) { return v ? 'solid' : 'none'; }
                },
                border_bottom: {
                    selector: [W('.impulse-flip-front'), W('.impulse-flip-back')],
                    property: 'border-bottom-style',
                    transform: function(v) { return v ? 'solid' : 'none'; }
                },
                border_left: {
                    selector: [W('.impulse-flip-front'), W('.impulse-flip-back')],
                    property: 'border-left-style',
                    transform: function(v) { return v ? 'solid' : 'none'; }
                }
            },
            structural: ['animation_type', 'flip_direction', 'slide_direction']
        },


        
        social: {
            settings: {
                links: { render_type: 'refresh' },
                bg_shape: { render_type: 'refresh' },
                brand_colors: { render_type: 'refresh' },
                hover_effect: { render_type: 'refresh' },
                
                
                icon_size: {
                    selector: W('.impulse-social-icons svg'),
                    property: ['width', 'height'],
                    unit: units.px,
                    responsive: true
                },
                icon_color: {
                    selector: W('.impulse-social-icons a'),
                    property: 'color'
                },
                hover_color: {
                    selector: W('.impulse-social-icons a:hover'),
                    property: 'color'
                },
                bg_color: {
                    selector: W('.impulse-social-icons a'),
                    property: 'background-color'
                },
                
                
                gap: {
                    selector: W('.impulse-social-icons'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                align: {
                    selector: W('.impulse-social-icons'),
                    property: 'justify-content',
                    transform: function(v) {
                        var map = { left: 'flex-start', center: 'center', right: 'flex-end' };
                        return map[v] || 'center';
                    }
                }
            },
            structural: ['links', 'bg_shape', 'brand_colors', 'hover_effect']
        },


        
        form: {
            settings: {
                fields: { render_type: 'smooth_refresh' },
                on_submit: { render_type: 'none' },
                show_labels: { render_type: 'smooth_refresh' },
                show_placeholders: { render_type: 'smooth_refresh' },
                button_text: { render_type: 'smooth_refresh' },
                success_message: { render_type: 'none' },
                redirect_url: { render_type: 'none' },
                entrance_animation: { render_type: 'none' },
                animation_duration: { render_type: 'none' },
                animation_delay: { render_type: 'none' },
                
                
                form_width: {
                    selector: W('.impulse-form'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                },
                
                
                field_bg: {
                    selector: W('.impulse-form input:not([type="hidden"]):not([type="checkbox"]), .impulse-form textarea, .impulse-form select'),
                    property: 'background-color'
                },
                field_border_color: {
                    selector: W('.impulse-form input:not([type="hidden"]):not([type="checkbox"]), .impulse-form textarea, .impulse-form select'),
                    property: 'border-color'
                },
                field_border_width: {
                    selector: W('.impulse-form input:not([type="hidden"]):not([type="checkbox"]), .impulse-form textarea, .impulse-form select'),
                    property: 'border-width',
                    unit: units.px
                },
                field_radius: {
                    selector: W('.impulse-form input:not([type="hidden"]):not([type="checkbox"]), .impulse-form textarea, .impulse-form select'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                field_text_color: {
                    selector: W('.impulse-form input:not([type="hidden"]):not([type="checkbox"]), .impulse-form textarea, .impulse-form select'),
                    property: 'color'
                },
                field_gap: {
                    selector: W('.impulse-form'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                
                
                button_bg: {
                    selector: W('.impulse-form .impulse-form-submit'),
                    property: 'background-color'
                },
                button_color: {
                    selector: W('.impulse-form .impulse-form-submit'),
                    property: 'color'
                },
                button_radius: {
                    selector: W('.impulse-form .impulse-form-submit'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                button_width: {
                    selector: W('.impulse-form .impulse-form-submit'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                },
                
                
                section_max_width: {
                    selector: W('.impulse-form-wrapper'),
                    property: 'max-width',
                    unit: units.px
                }
            },
            structural: ['fields', 'show_labels', 'show_placeholders', 'button_text', 'on_submit']
        },


        

        
        login: {
            settings: {
                show_remember: { render_type: 'smooth_refresh' },
                show_lost_password: { render_type: 'smooth_refresh' },
                redirect_url: { render_type: 'none' },
                button_text: { render_type: 'smooth_refresh' },
                entrance_animation: { render_type: 'none' },
                animation_duration: { render_type: 'none' },
                animation_delay: { render_type: 'none' },
                
                
                form_width: {
                    selector: W('.impulse-login-form'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                },
                
                
                field_bg: {
                    selector: W('.impulse-login-form input[type="text"], .impulse-login-form input[type="email"], .impulse-login-form input[type="password"]'),
                    property: 'background-color'
                },
                field_border_color: {
                    selector: W('.impulse-login-form input[type="text"], .impulse-login-form input[type="email"], .impulse-login-form input[type="password"]'),
                    property: 'border-color'
                },
                field_radius: {
                    selector: W('.impulse-login-form input[type="text"], .impulse-login-form input[type="email"], .impulse-login-form input[type="password"]'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                field_gap: {
                    selector: W('.impulse-login-form'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                
                
                button_bg: {
                    selector: W('.impulse-login-form .impulse-form-submit'),
                    property: 'background-color'
                },
                button_color: {
                    selector: W('.impulse-login-form .impulse-form-submit'),
                    property: 'color'
                },
                button_radius: {
                    selector: W('.impulse-login-form .impulse-form-submit'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                
                
                section_max_width: {
                    selector: W('.impulse-login-wrapper'),
                    property: 'max-width',
                    unit: units.px
                }
            },
            structural: ['show_remember', 'show_lost_password', 'button_text', 'show_google']
        },


        
        register: {
            settings: {
                show_name_fields: { render_type: 'smooth_refresh' },
                require_name: { render_type: 'none' },
                redirect_url: { render_type: 'none' },
                button_text: { render_type: 'smooth_refresh' },
                entrance_animation: { render_type: 'none' },
                animation_duration: { render_type: 'none' },
                animation_delay: { render_type: 'none' },
                
                
                form_width: {
                    selector: W('.impulse-register-form'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                },
                
                
                field_bg: {
                    selector: W('.impulse-register-form input[type="text"], .impulse-register-form input[type="email"], .impulse-register-form input[type="password"]'),
                    property: 'background-color'
                },
                field_border_color: {
                    selector: W('.impulse-register-form input[type="text"], .impulse-register-form input[type="email"], .impulse-register-form input[type="password"]'),
                    property: 'border-color'
                },
                field_radius: {
                    selector: W('.impulse-register-form input[type="text"], .impulse-register-form input[type="email"], .impulse-register-form input[type="password"]'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                field_gap: {
                    selector: W('.impulse-register-form'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                
                
                button_bg: {
                    selector: W('.impulse-register-form .impulse-form-submit'),
                    property: 'background-color'
                },
                button_color: {
                    selector: W('.impulse-register-form .impulse-form-submit'),
                    property: 'color'
                },
                button_radius: {
                    selector: W('.impulse-register-form .impulse-form-submit'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                
                
                section_max_width: {
                    selector: W('.impulse-register-wrapper'),
                    property: 'max-width',
                    unit: units.px
                }
            },
            structural: ['show_name_fields', 'button_text', 'show_google']
        },


        
        booking: {
            settings: {
                title: { render_type: 'refresh' },
                button_text: { render_type: 'refresh' },
                max_width: {
                    selector: W('.impulse-booking-block'),
                    property: 'max-width',
                    unit: units.px,
                    responsive: true
                },
                title_size: {
                    selector: W('.impulse-booking-block h2'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                button_bg: {
                    selector: W('.impulse-booking-block .ibk-submit-btn, .impulse-booking-block .ibk-submit'),
                    property: 'background-color'
                },
                button_color: {
                    selector: W('.impulse-booking-block .ibk-submit-btn, .impulse-booking-block .ibk-submit'),
                    property: 'color'
                },
                button_radius: {
                    selector: W('.impulse-booking-block .ibk-submit-btn, .impulse-booking-block .ibk-submit'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                field_bg: {
                    selector: W('.impulse-booking-block select, .impulse-booking-block input, .impulse-booking-block textarea'),
                    property: 'background-color'
                },
                field_border: {
                    selector: W('.impulse-booking-block select, .impulse-booking-block input, .impulse-booking-block textarea'),
                    property: 'border-color'
                },
                field_radius: {
                    selector: W('.impulse-booking-block select, .impulse-booking-block input, .impulse-booking-block textarea'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['title', 'button_text']
        },


        


        
        products: {
            settings: {
                source: { render_type: 'refresh' },
                query_type: { render_type: 'refresh' },
                count: { render_type: 'refresh' },
                category_id: { render_type: 'refresh' },
                card_design: { render_type: 'refresh' },
                product_ids: { render_type: 'refresh' },
                display_mode: { render_type: 'refresh' },
                columns: { render_type: 'refresh' },
                gap: { render_type: 'refresh' },
                
                
                section_bg: {
                    selector: W('.impulse-product-grid'),
                    property: 'background-color'
                },
                section_padding_v: {
                    selector: W('.impulse-product-grid'),
                    property: ['padding-top', 'padding-bottom'],
                    unit: units.px,
                    responsive: true
                },
                section_padding_h: {
                    selector: W('.impulse-product-grid'),
                    property: ['padding-left', 'padding-right'],
                    unit: units.px,
                    responsive: true
                }
                

            },
            structural: ['source', 'query_type', 'count', 'category_id', 'card_design', 'product_ids', 'display_mode', 'columns', 'gap', 'visible_count', 'carousel_mode', 'scroll_speed', 'transition_speed']
        },

        bundle: {
            settings: {
                bundle_id:     { render_type: 'refresh' },
                show_images:   { render_type: 'refresh' },
                show_prices:   { render_type: 'refresh' },
                btn_label: {
                    render_type: 'content',
                    target: '.impulse-bundle-add-btn',
                    type: 'text'
                },
                accent_color: {
                    render_type: 'css',
                    rules: [
                        { selector: W('.impulse-bundle-savings-badge'), property: 'background-color' },
                        { selector: W('.impulse-bundle-savings-badge'), property: 'color', transform: function(v) { return contrastColor(v); } },
                        { selector: W('.impulse-bundle-price'), property: 'color' },
                        { selector: W('.impulse-bundle-add-btn'), property: 'background-color' },
                        { selector: W('.impulse-bundle-add-btn'), property: 'color', transform: function(v) { return contrastColor(v); } }
                    ]
                },
                field_color: {
                    render_type: 'css',
                    rules: [
                        { selector: W('.impulse-bundle-item'), property: 'background-color' },
                        { selector: W('.impulse-bundle-item'), property: 'color', transform: function(v) { return contrastColor(v); } }
                    ]
                },
                border_radius: {
                    render_type: 'css',
                    rules: [
                        { selector: W('.impulse-bundle-item'), property: 'border-radius', transform: function(v) { return parseInt(v) + 'px'; } },
                        { selector: W('.impulse-bundle-add-btn'), property: 'border-radius', transform: function(v) { return parseInt(v) + 'px'; } }
                    ]
                },
                bundle_width: {
                    render_type: 'css',
                    rules: [
                        {
                            selector: W('.impulse-product-bundle'),
                            property: 'max-width',
                            transform: function(v) { var n = parseInt(v); return (n >= 340 && n <= 600) ? n + 'px' : '400px'; }
                        },
                        {
                            selector: W('.impulse-product-bundle'),
                            property: 'width',
                            transform: function() { return '100%'; }
                        },
                        {
                            selector: W('.impulse-product-bundle'),
                            property: ['margin-left', 'margin-right'],
                            transform: function(v) { return 'auto'; }
                        },
                    ]
                },
            },
            structural: ['bundle_id', 'show_images', 'show_prices']
        },


        
        header: {
            settings: {
                logo: { render_type: 'refresh' },
                layout: { render_type: 'refresh' },
                menu_items: { render_type: 'refresh' },
                show_search: { render_type: 'refresh' },
                show_cart: { render_type: 'refresh' },
                show_account: { render_type: 'refresh' },
                show_site_name: { render_type: 'refresh' },
                announcement_enabled: { render_type: 'refresh' },
                announcement_text: { render_type: 'refresh' },
                sticky: { render_type: 'refresh' },
                show_border: { render_type: 'refresh' },
                
                
                padding_top: {
                    selector: W('.impulse-header-main'),
                    property: 'padding-top',
                    unit: units.px,
                    responsive: true
                },
                padding_bottom: {
                    selector: W('.impulse-header-main'),
                    property: 'padding-bottom',
                    unit: units.px,
                    responsive: true
                },
                side_padding: {
                    selector: W('.impulse-header-main'),
                    property: 'padding-inline',
                    unit: units.px,
                    responsive: true
                },
                margin_bottom: {
                    selector: W('.impulse-header'),
                    property: 'margin-bottom',
                    unit: units.px,
                    responsive: true
                },
                
                
                bg_color: {
                    selector: W('.impulse-header-main'),
                    property: 'background-color'
                },
                text_color: {
                    selector: W('.impulse-header-menu a'),
                    property: 'color'
                },
                hover_color: {
                    selector: W('.impulse-header-menu a:hover'),
                    property: 'color'
                },
                border_color: {
                    selector: W('.impulse-header-main'),
                    property: 'border-bottom-color'
                },
                border_width: {
                    selector: W('.impulse-header-main'),
                    property: 'border-bottom-width',
                    unit: units.px
                },
                show_shadow: { render_type: 'refresh' },
                
                
                logo_height: {
                    selector: W('.impulse-header-logo img'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                
                
                menu_gap: {
                    selector: W('.impulse-header-menu'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                },
                menu_font_size: {
                    selector: W('.impulse-header-menu a'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                
                
                icon_size: {
                    selector: W('.impulse-header-icons svg'),
                    property: 'width',
                    unit: units.px,
                    responsive: true
                },
                
                
                announcement_bg: {
                    selector: W('.impulse-announcement-bar'),
                    property: 'background-color'
                },
                announcement_text_color: {
                    selector: W('.impulse-announcement-bar'),
                    property: 'color'
                },
                
                
                show_cta: { render_type: 'refresh' },
                cta_text: { render_type: 'refresh' },
                cta_url: { render_type: 'refresh' },
                cta_bg: {
                    selector: W('.impulse-header-cta'),
                    property: 'background-color'
                },
                cta_color: {
                    selector: W('.impulse-header-cta'),
                    property: 'color'
                },
                cta_radius: {
                    selector: W('.impulse-header-cta'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['logo', 'layout', 'menu_items', 'menu_position', 'show_search', 'show_cart', 'show_account', 'show_site_name', 'site_name', 'announcement_enabled', 'announcement_text', 'sticky', 'show_border', 'show_shadow', 'show_breadcrumbs', 'show_cta', 'cta_text', 'cta_url']
        },


        
        footer: {
            settings: {
                logo: { render_type: 'refresh' },
                layout: { render_type: 'refresh' },
                show_logo: { render_type: 'refresh' },
                show_social: { render_type: 'refresh' },
                show_newsletter: { render_type: 'refresh' },
                col1_links: { render_type: 'refresh' },
                col2_links: { render_type: 'refresh' },
                col3_links: { render_type: 'refresh' },
                copyright_text: { render_type: 'refresh' },
                
                bg_color: {
                    selector: W('.impulse-footer'),
                    property: 'background-color'
                },
                text_color: {
                    selector: W('.impulse-footer'),
                    property: 'color'
                },
                heading_color: {
                    selector: W('.impulse-footer .footer-column > div:first-child'),
                    property: 'color'
                },
                link_color: {
                    selector: W('.impulse-footer a'),
                    property: 'color'
                },
                link_hover_color: {
                    selector: W('.impulse-footer a:hover'),
                    property: 'color'
                },
                border_color: {
                    selector: W('.impulse-footer'),
                    property: 'border-top-color'
                },
                logo_height: {
                    selector: W('.impulse-footer .footer-column img'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                padding_top: {
                    selector: W('.impulse-footer'),
                    property: 'padding-top',
                    unit: units.px,
                    responsive: true
                },
                margin_top: {
                    selector: W('.impulse-footer'),
                    property: 'margin-top',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['logo', 'layout', 'show_logo', 'show_social', 'show_newsletter', 'col1_links', 'col2_links', 'col3_links', 'col1_title', 'col2_title', 'col3_title', 'copyright_text', 'site_name', 'description', 'social_links']
        },


        
        cart_icon: {

            settings: {},
            structural: []
        },


        
        mini_cart: {

            settings: {},
            structural: []
        },


        
        cart: {
            settings: {
                cart_mode: { render_type: 'refresh' },
                
                
                bg_color: {
                    selector: [W('.impulse-cart-block'), W('.impulse-mini-cart')],
                    property: 'background-color'
                },
                text_color: {
                    selector: [W('.impulse-cart-block'), W('.impulse-mini-cart')],
                    property: 'color'
                },
                border_radius: {
                    selector: [W('.impulse-cart-block'), W('.impulse-mini-cart')],
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                title_size: {
                    selector: W('.impulse-cart-block .impulse-cart-title'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                section_max_width: { render_type: 'refresh' },
                max_width: {
                    selector: W('.impulse-cart-block'),
                    property: 'width',
                    unit: units.pct
                },
                checkout_btn_radius: { render_type: 'refresh' },
                checkout_btn_size: { render_type: 'refresh' },
                show_image: { render_type: 'smooth_refresh' },
                show_quantity: { render_type: 'smooth_refresh' },
                show_subtotal: { render_type: 'smooth_refresh' },
                show_header: { render_type: 'smooth_refresh' },
                show_table: { render_type: 'smooth_refresh' },
                
                
                align: {
                    selector: [W('.impulse-cart-icon-wrap'), W('.impulse-mini-cart-wrap')],
                    property: 'justify-content',
                    transform: function(v) {
                        return v === 'left' ? 'flex-start' : (v === 'right' ? 'flex-end' : 'center');
                    }
                },
                size: {
                    selector: W('.impulse-cart-icon svg'),
                    property: ['width', 'height'],
                    unit: units.px,
                    responsive: true
                },
                color: {
                    selector: W('.impulse-cart-icon svg'),
                    property: 'stroke'
                },
                badge_bg: {
                    selector: W('.impulse-cart-icon span'),
                    property: 'background-color'
                },
                
                
                width: {
                    selector: W('.impulse-mini-cart'),
                    property: 'width',
                    unit: units.px,
                    responsive: true
                },
                button_bg: {
                    selector: W('.impulse-mini-cart-btn'),
                    property: 'background-color'
                },
                button_color: {
                    selector: W('.impulse-mini-cart-btn'),
                    property: 'color'
                },
                button_size: {
                    selector: W('.impulse-mini-cart-btn'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                image_size: { render_type: 'refresh' }
            },
            structural: ['cart_mode', 'show_image', 'show_quantity', 'show_subtotal', 'show_header', 'show_table', 'title', 'empty_text', 'button_text', 'hide_when_empty', 'show_remove', 'image_size', 'checkout_btn_text', 'checkout_btn_bg', 'checkout_btn_color', 'checkout_btn_radius', 'checkout_btn_size', 'max_width']
        },


        
        order_summary: {
            settings: {
                bg_color: {
                    selector: W('.impulse-order-summary'),
                    property: 'background-color'
                },
                padding: {
                    selector: W('.impulse-order-summary'),
                    property: 'padding',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-order-summary'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                width: {
                    selector: W('.impulse-order-summary'),
                    property: 'width',
                    unit: units.pct,
                    responsive: true
                }
            },
            structural: ['title', 'show_items', 'show_subtotal', 'show_shipping', 'show_tax', 'show_discount']
        },


        
        receipt: {
            settings: {
                title: { render_type: 'smooth_refresh' },
                button_text: { render_type: 'smooth_refresh' },
                entrance_animation: { render_type: 'none' },
                animation_duration: { render_type: 'none' },
                animation_delay: { render_type: 'none' },
                section_max_width: {
                    selector: W('.instinctor-order-received'),
                    property: 'max-width',
                    unit: units.px,
                    responsive: true
                },
                icon_color: {
                    selector: W('.instinctor-success-icon'),
                    property: 'color'
                },
                text_color: {
                    selector: W('.instinctor-order-received'),
                    property: 'color'
                },
                btn_bg: {
                    selector: W('.instinctor-order-received .instinctor-btn-primary'),
                    property: 'background-color'
                },
                btn_color: {
                    selector: W('.instinctor-order-received .instinctor-btn-primary'),
                    property: 'color'
                },
                border_radius: {
                    selector: W('.instinctor-order-section'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['heading', 'button_text']
        },

        account: {
            settings: {
                title: { render_type: 'smooth_refresh' },
                entrance_animation: { render_type: 'none' },
                animation_duration: { render_type: 'none' },
                animation_delay: { render_type: 'none' },

                text_color: {
                    selector: W('.instinctor-account'),
                    property: '--ia-text'
                },
                nav_active_color: {
                    selector: W('.instinctor-account'),
                    property: '--ia-nav-color'
                },
                btn_bg: {
                    selector: W('.instinctor-account'),
                    property: '--ia-btn-bg'
                },
                btn_color: {
                    selector: W('.instinctor-account'),
                    property: '--ia-btn-color'
                },
                border_radius: {
                    selector: W('.instinctor-account'),
                    property: '--ia-radius',
                    unit: units.px
                }
            },
            structural: ['title', 'preview_loggedout']
        },

        checkout: {
            settings: {
                checkout_design_button: {
                    selector: W('.impulse-checkout-btn'),
                    property: 'background-color'
                },
                checkout_design_button_text: {
                    selector: W('.impulse-checkout-btn'),
                    property: 'color'
                },
                checkout_design_text: {
                    selector: W('.impulse-checkout-block') + ',' + W('.impulse-checkout-btn'),
                    property: 'color'
                },
                checkout_design_form_bg: {
                    selector: W('.impulse-checkout-block'),
                    property: 'background-color'
                },
                checkout_design_field_bg: {
                    selector: W('.impulse-checkout-block input[type="text"], .impulse-checkout-block input[type="email"]'),
                    property: 'background-color'
                },
                checkout_design_field_border: {
                    selector: W('.impulse-checkout-block input[type="text"], .impulse-checkout-block input[type="email"]'),
                    property: 'border-color'
                },
                
                checkout_design_field_border_width: {
                    custom: function(el, val, id) {
                        var s = '.impulse-el[data-id="' + id + '"]';
                        var sel = s + ' .impulse-checkout-block input[type="text"],' + s + ' .impulse-checkout-block input[type="email"]';
                        
                        var isScreen = window.Impulse && window.Impulse.pageSettings && (true);
                        return sel + '{border-width:' + (isScreen ? '0' : val + 'px') + '!important}';
                    }
                },
                checkout_design_field_radius: {
                    selector: W('.impulse-checkout-block input[type="text"], .impulse-checkout-block input[type="email"], .impulse-checkout-btn'),
                    property: 'border-radius',
                    unit: units.px
                },
                section_max_width: {
                    selector: W('.impulse-checkout-block'),
                    property: 'max-width',
                    unit: units.px
                }
            },
            structural: ['checkout_design_fields', 'checkout_design_preset', 'checkout_design_guest_checkout', 'checkout_design_create_account', 'checkout_design_email_first', 'checkout_design_show_coupon', 'checkout_design_show_gift_card', 'checkout_button_text']
        },


        
        slider: {
            settings: {
                slides: { render_type: 'refresh' },
                slider_effect: { render_type: 'refresh' },
                autoplay: { render_type: 'refresh' },
                autoplay_speed: { render_type: 'refresh' },
                
                bg_color: {
                    selector: W('.impulse-new-slider'),
                    property: 'background-color'
                },
                height: {
                    selector: W('.impulse-carousel-track'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-new-slider'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['slides', 'slider_effect', 'autoplay', 'autoplay_speed']
        },


        
        icon_text: {
            settings: {
                icon: { render_type: 'refresh' },
                layout: { render_type: 'refresh' },
                
                bg_color: {
                    selector: W('.impulse-icon-text'),
                    property: 'background-color'
                },
                color: {
                    selector: W('.impulse-icon-text'),
                    property: 'color'
                },
                icon_size: {
                    selector: W('.impulse-icon-text svg'),
                    property: 'width',
                    unit: units.px,
                    responsive: true
                },
                icon_color: {
                    selector: W('.impulse-icon-text svg'),
                    property: 'stroke'
                }
            },
            structural: ['icon', 'layout']
        },


        
        carousel: {
            settings: {
                images: { render_type: 'refresh' },
                slides_per_view: { render_type: 'refresh' },
                autoplay: { render_type: 'refresh' },
                items_to_show: { render_type: 'refresh' },
                scroll_speed: { render_type: 'refresh' },
                autoplay_speed: { render_type: 'refresh' },
                animation_mode: { render_type: 'refresh' },
                
                bg_color: {
                    selector: W('.impulse-image-carousel'),
                    property: 'background-color'
                },
                gap: {
                    render_type: 'refresh',
                    responsive: true
                },
                height: {
                    selector: W('.impulse-carousel-track'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                max_width: {
                    selector: W('.impulse-image-carousel'),
                    property: 'width',
                    unit: units.pct
                },
                border_radius: {
                    selector: W('.impulse-image-carousel'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                margin_top: {
                    selector: '{{WRAPPER}}',
                    property: 'margin-top',
                    unit: units.px,
                    responsive: true
                },
                margin_bottom: {
                    selector: '{{WRAPPER}}',
                    property: 'margin-bottom',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['images', 'slides_per_view', 'autoplay', 'scroll_speed', 'autoplay_speed', 'animation_mode', 'gap', 'items_to_show', 'content_type', 'slider_effect', 'direction', 'object_fit', 'bg_color']
        },


        
        map: {
            settings: {
                address: { render_type: 'refresh' },
                zoom: { render_type: 'refresh' },
                map_shape: { render_type: 'refresh' },
                map_style: { render_type: 'refresh' },
                map_height: { render_type: 'refresh' },
                border_radius: { render_type: 'refresh' },
                position_align: { render_type: 'refresh' },
                width: { render_type: 'refresh' }
            },
            structural: ['address', 'zoom', 'map_shape', 'map_style', 'map_height', 'border_radius', 'width', 'position_align']
        },


        
        product_carousel: {
            settings: {
                source: { render_type: 'refresh' },
                query_type: { render_type: 'refresh' },
                per_page: { render_type: 'refresh' },
                carousel_mode: { render_type: 'refresh' },
                visible_count: { render_type: 'refresh' },
                scroll_speed: { render_type: 'refresh' },
                autoplay_speed: { render_type: 'refresh' },
                transition_speed: { render_type: 'refresh' },
                carousel_height: { render_type: 'refresh' },
                card_design: { render_type: 'refresh' },
                
                bg_color: {
                    selector: W('.impulse-product-carousel'),
                    property: 'background-color'
                },
                section_bg: {
                    selector: W('.impulse-product-carousel'),
                    property: 'background-color'
                },
                gap: {
                    selector: W('.impulse-product-carousel'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['source', 'query_type', 'per_page', 'carousel_mode', 'visible_count',
                         'scroll_speed', 'autoplay_speed', 'transition_speed', 'carousel_height', 'card_design']
        },


        
        pricing: {
            settings: {
                plans: { render_type: 'refresh' },
                columns: { render_type: 'refresh' },
                
                bg_color: {
                    selector: W('.impulse-pricing'),
                    property: 'background-color'
                },
                text_color: {
                    selector: W('.impulse-pricing'),
                    property: 'color'
                },
                gap: {
                    selector: W('.impulse-pricing'),
                    property: 'gap',
                    unit: units.px,
                    responsive: true
                }
            },
            structural: ['plans', 'columns']
        },


        
        title: {
            settings: {

                

                la_font_size:    { render_type: 'none' },
                la_color:        { render_type: 'none' },
                la_font_weight:  { render_type: 'none' },
                la_image_width:  { render_type: 'none' },
                la_bg:           { selector: W('.impulse-logo-animator'), property: 'background-color' },
                la_content_type: { render_type: 'none' },
                la_text:         { render_type: 'none' },
                la_image_src:    { render_type: 'none' },
                
                la_preset:       { render_type: 'none' },
                la_duration:     { render_type: 'none' },
                la_delay:        { render_type: 'none' },
                la_flash:        { render_type: 'none' },
                la_scroll_trigger: { render_type: 'none' },

                
                dt_3d_mode: { render_type: 'refresh' },

                

                

                layer_gap: { render_type: 'none' },
                stroke_width: { render_type: 'none' },
                line_1_stroke: { render_type: 'none' },

                

                
                dt_3d_mouse: { render_type: 'none' },
                dt_3d_rotate: { render_type: 'none' },
                dt_3d_speed: { render_type: 'none' },
                
                
                tag: { render_type: 'none' },
                content: { render_type: 'none' },
                
                
                line_1: { render_type: 'none' },
                
                
                dt_entrance: { render_type: 'none' },
                dt_scroll: { render_type: 'none' },
                reveal_from: { render_type: 'none' },
                reveal_to: { render_type: 'none' },
                
                
                mouse_sensitive: { render_type: 'none' },
                depth_of_field: { render_type: 'none' },
                depth_shadow: { render_type: 'none' },
                scatter_entrance: { render_type: 'none' },
                orbit_hover: { render_type: 'none' },
                
                
                depth: { render_type: 'none' },
                line_1_depth: { render_type: 'none' },
                
                
                perspective: {},
                dof_intensity: {},


                

                

                text_halo: { render_type: 'refresh' },
                
                
                font_family: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'font-family'
                },
                font_weight: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'font-weight'
                },
                color: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'color'
                },
                size: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                weight: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'font-weight'
                },

                

                
                line_height: { render_type: 'none', responsive: true },
                letter_spacing: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'letter-spacing',
                    unit: units.px,
                    responsive: true
                },
                align: {
                    render_type: 'none',
                    responsive: true
                },

                

                

                max_width: {
                    selector: W('.impulse-display-text h1,.impulse-display-text h2,.impulse-display-text h3,.impulse-display-text h4,.impulse-display-text h5,.impulse-display-text h6,.impulse-display-text p,.impulse-display-text div'),
                    property: 'max-width',
                    unit: units.px,
                    responsive: true
                },
                
                
                line_1_font: { selector: W('.impulse-dt-line[data-line="1"]'), property: 'font-family' },

                
                line_1_color: { selector: W('.impulse-dt-line[data-line="1"]'), property: 'color' },

                
                line_1_size: { selector: W('.impulse-dt-line[data-line="1"]'), property: 'font-size', unit: units.px, responsive: true },

                
                line_1_weight: { selector: W('.impulse-dt-line[data-line="1"]'), property: 'font-weight' },

                
                line_1_height: { selector: W('.impulse-dt-line[data-line="1"]'), property: 'line-height', unit: units.ratio, responsive: true },
                

                

                

                

                line_1_fill: { render_type: 'none' },
                line_1_grad_1: { render_type: 'none' },
                line_1_grad_2: { render_type: 'none' },
                line_1_grad_angle: { render_type: 'none' },
                
                
                margin_top: { selector: W('.impulse-display-text'), property: 'margin-top', unit: units.px },
                margin_bottom: { selector: W('.impulse-display-text'), property: 'margin-bottom', unit: units.px }
            },
            structural: ['dt_3d_mode', 'layer_gap', 'stroke_width']
        },


        
        modal: {
            settings: {
                trigger: { render_type: 'refresh' },
                trigger_delay: { render_type: 'refresh' },
                trigger_scroll: { render_type: 'refresh' },
                position: { render_type: 'refresh' },
                popup_animation: { render_type: 'refresh' },
                show_close: { render_type: 'refresh' },
                close_on_overlay: { render_type: 'refresh' },
                once_per_session: { render_type: 'refresh' },
                auto_dismiss: { render_type: 'refresh' },
                auto_dismiss_after: { render_type: 'refresh' },
                overlay_edge_effect: { render_type: 'refresh' },

                

                overlay_color: {
                    selector: '{{WRAPPER}} .impulse-modal-scrim, {{PORTAL}}',
                    property: 'background-color'
                },
                popup_bg: {
                    selector: '{{WRAPPER}} .impulse-modal-container, {{PORTAL}} .impulse-modal-container',
                    property: 'background-color'
                },
                popup_width: {
                    selector: '{{WRAPPER}} .impulse-modal-container, {{PORTAL}} .impulse-modal-container',
                    property: 'width',
                    unit: units.px,
                    responsive: true
                },
                popup_height: {
                    selector: '{{WRAPPER}} .impulse-modal-container, {{PORTAL}} .impulse-modal-container',
                    property: 'min-height',
                    unit: units.px,
                    responsive: true
                },
                popup_padding: {
                    selector: '{{WRAPPER}} .impulse-modal-container, {{PORTAL}} .impulse-modal-container',
                    property: 'padding',
                    unit: units.px,
                    responsive: true
                },
                popup_radius: {
                    selector: '{{WRAPPER}} .impulse-modal-container, {{PORTAL}} .impulse-modal-container',
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },

                

                oc_position: { render_type: 'refresh' },
                oc_width: {
                    selector: W('.impulse-modal-drawer-preview'),
                    property: 'width',
                    unit: units.px
                },
                oc_padding: {
                    selector: W('.impulse-modal-drawer-preview'),
                    property: 'padding',
                    unit: units.px
                },
                oc_bg: {
                    selector: W('.impulse-modal-drawer-preview'),
                    property: 'background-color'
                },
                oc_show_close: { render_type: 'refresh' },
                oc_show_overlay: { render_type: 'refresh' },
                oc_close_on_overlay: { render_type: 'refresh' },
                oc_overlay_color: {
                    selector: W('.impulse-modal-drawer-overlay'),
                    property: 'background-color'
                }
            },
            structural: ['trigger', 'trigger_delay', 'trigger_scroll', 'position', 'popup_animation', 'show_close', 'close_on_overlay', 'once_per_session', 'auto_dismiss', 'auto_dismiss_after', 'overlay_edge_effect', 'oc_position', 'oc_show_close', 'oc_show_overlay', 'oc_close_on_overlay']
        },


        
        shape: {
            settings: {
                
                shape_width: {
                    selector: W('> div > img, > div > svg'),
                    property: 'width',
                    unit: units.px,
                    responsive: true
                },
                
                shape_align: {
                    selector: W('> div'),
                    property: 'justify-content',
                    transform: (v) => v === 'left' ? 'flex-start' : v === 'right' ? 'flex-end' : 'center'
                },
                
                shape_color:   { selector: W('> div > svg'), property: '--c1' },
                shape_color_2: { selector: W('> div > svg'), property: '--c2' },
                shape_color_3: { selector: W('> div > svg'), property: '--c3' },
                shape_color_4: { selector: W('> div > svg'), property: '--c4' },
                shape_color_5: { selector: W('> div > svg'), property: '--c5' },
                shape_color_6: { selector: W('> div > svg'), property: '--c6' },
                shape_color_7: { selector: W('> div > svg'), property: '--c7' },
                shape_color_8: { selector: W('> div > svg'), property: '--c8' }
            },
            structural: []
        },


        
        table: {
            settings: {
                items: { render_type: 'refresh' },
                columns: { render_type: 'refresh' },
                show_header: { render_type: 'refresh' },
                show_icons: { render_type: 'refresh' },
                zebra_stripes: { render_type: 'refresh' },
                highlight_col: { render_type: 'refresh' },
                highlight_bg: { render_type: 'refresh' },
                hover_highlight: { render_type: 'refresh' },
                hover_highlight_effect: { render_type: 'refresh' },
                entrance_animation: { render_type: 'refresh' },
                stagger_items: { render_type: 'refresh' },
                
                icon_size: { render_type: 'css_var' },
                text_size: { render_type: 'css_var' },
                gap: { render_type: 'css_var' },
                icon_gap: { render_type: 'css_var' },
                icon_color: { render_type: 'css_var' },
                text_color: { render_type: 'css_var' },
                section_max_width: { render_type: 'css_var' },
                hh_duration: { render_type: 'css_var' },

                col_flex_1: { render_type: 'css_var' },
                col_flex_2: { render_type: 'css_var' },
                col_flex_3: { render_type: 'css_var' },
                col_flex_4: { render_type: 'css_var' },
                col_flex_5: { render_type: 'css_var' },
                col_flex_6: { render_type: 'css_var' }
            },
            structural: ['items', 'columns', 'show_header', 'show_icons', 'zebra_stripes', 'highlight_col', 'highlight_bg', 'hover_highlight', 'hover_highlight_effect', 'entrance_animation', 'stagger_items']
        },

        price_list: {
            settings: {
                pl_items: { render_type: 'refresh' },
                pl_separator: { render_type: 'refresh' },
                pl_show_divider: { render_type: 'refresh' },
                pl_icon_color: { render_type: 'refresh' },
                pl_icon_size: { render_type: 'refresh' }
            },
            structural: ['pl_items', 'pl_separator', 'pl_show_divider', 'pl_icon_color', 'pl_icon_size']
        },

        shipping: {
            settings: {
                bar_color: {
                    custom: function(el, val, id) {
                        var s = '.impulse-el[data-id="' + id + '"]';
                        return s + ' .impulse-shipping-bar-fill{background:repeating-linear-gradient(135deg,' + val + ' 0px,' + val + ' 20px,rgba(0,0,0,0.15) 20px,rgba(0,0,0,0.15) 40px)!important}';
                    }
                },
                text_color: {
                    selector: W('.impulse-shipping-bar-text'),
                    property: 'color'
                },
                bar_height: {
                    selector: W('.impulse-shipping-bar-track'),
                    property: 'height',
                    unit: units.px,
                    responsive: true
                },
                border_radius: {
                    selector: W('.impulse-shipping-bar-track') + ',' + W('.impulse-shipping-bar-fill'),
                    property: 'border-radius',
                    unit: units.px,
                    responsive: true
                },
                font_size: {
                    selector: W('.impulse-shipping-bar-text'),
                    property: 'font-size',
                    unit: units.px,
                    responsive: true
                },
                text_before: { render_type: 'refresh' },
                text_after: { render_type: 'refresh' },
                threshold: { render_type: 'refresh' }
            },
            structural: ['text_before', 'text_after', 'threshold']
        }
    };


    
    
    return {
        
        get: function(elementType) {
            return elements[elementType] || null;
        },

        
        getTypes: function() {
            return Object.keys(elements);
        },

        
        getSetting: function(elementType, settingName) {
            const element = elements[elementType];
            if (!element) return null;
            return element.settings[settingName] || null;
        },

        
        needsRefresh: function(elementType, settingName) {
            const element = elements[elementType];
            
            
            if (!element) {
                
                const universalCssSettings = [
                    'margin_top', 'margin_right', 'margin_bottom', 'margin_left',
                    'padding_top', 'padding_right', 'padding_bottom', 'padding_left',
                    'border_radius', 'border_width', 'border_color',
                    'bg_color', 'text_color', 'color', 'background',
                    'font_size', 'font_weight', 'line_height', 'letter_spacing',
                    'gap', 'width', 'height', 'max_width', 'min_height',
                    'opacity', 'align', 'text_align'
                ];
                
                const baseName = settingName.replace(/_tablet$|_mobile$/, '');
                if (universalCssSettings.includes(baseName)) return false;
                
                
                return false;
            }
            
            const setting = element.settings[settingName];
            
            
            if (element.structural && element.structural.includes(settingName)) return true;
            
            
            if (setting) {
                
                if (setting.render_type === 'refresh') return true;
                
                if (setting.selector) return false;
                
                if (setting.render_type === 'content') return false;
            }
            
            
            return false;
        },

        
        isCssOnly: function(elementType, settingName) {
            const setting = this.getSetting(elementType, settingName);
            if (!setting) return false;
            return setting.selector && !setting.render_type;
        },

        
        isContent: function(elementType, settingName) {
            const setting = this.getSetting(elementType, settingName);
            if (!setting) return false;
            return setting.render_type === 'content';
        },

        
        getCssSettings: function(elementType) {
            const element = elements[elementType];
            if (!element) return {};
            
            const css = {};
            for (const [name, config] of Object.entries(element.settings)) {
                if (config.selector && !config.render_type) {
                    css[name] = config;
                }
            }
            return css;
        },

        
        getContentSettings: function(elementType) {
            const element = elements[elementType];
            if (!element) return {};
            
            const content = {};
            for (const [name, config] of Object.entries(element.settings)) {
                if (config.render_type === 'content') {
                    content[name] = config;
                }
            }
            return content;
        },

        
        getResponsiveKeys: function(settingName) {
            return [settingName, `${settingName}_tablet`, `${settingName}_mobile`];
        },

        
        isResponsive: function(elementType, settingName) {
            
            const setting = this.getSetting(elementType, settingName);
            if (setting && setting.responsive === true) {
                return true;
            }
            
            
            if (window.RESPONSIVE_SETTINGS) {
                if (window.RESPONSIVE_SETTINGS.indexOf(settingName) !== -1) {
                    return true;
                }
                
                for (var i = 0; i < window.RESPONSIVE_SETTINGS.length; i++) {
                    var rs = window.RESPONSIVE_SETTINGS[i];
                    if (settingName.endsWith('_' + rs) || settingName === rs) {
                        return true;
                    }
                }
            }
            
            return false;
        },

        
        units: units,

        
        contrastColor: contrastColor
    };
})();
