var tribe_dropdowns = window.tribe_dropdowns || {}; ( function( $, obj, _ ) { 'use strict'; obj.selector = { dropdown: '.tribe-dropdown', created: '.tribe-dropdown-created', searchField: '.select2-search__field', }; // Setup a Dependent $.fn.tribe_dropdowns = function() { obj.dropdown( this, {} ); return this; }; obj.freefrom_create_search_choice = function( params ) { if ( 'string' !== typeof params.term ) { return null; } var term = params.term.trim(); if ( '' === term ) { return null; } var args = this.options.options; var $select = args.$select; if ( term.match( args.regexToken ) && ( ! $select.is( '[data-int]' ) || ( $select.is( '[data-int]' ) && term.match( /\d+/ ) ) ) ) { var choice = { id: term, text: term, new: true }; if ( $select.is( '[data-create-choice-template]' ) ) { choice.text = _.template( $select.data( 'createChoiceTemplate' ) )( { term: term } ); } return choice; } return null; }; /** * Better Search ID for Select2, compatible with WordPress ID from WP_Query * * @param {object|string} e Searched object or the actual ID * @return {string} ID of the object */ obj.search_id = function( e ) { var id = undefined; if ( 'undefined' !== typeof e.id ) { id = e.id; } else if ( 'undefined' !== typeof e.ID ) { id = e.ID; } else if ( 'undefined' !== typeof e.value ) { id = e.value; } return undefined === e ? undefined : id; }; /** * Better way of matching results * * @param {string} term Which term we are searching for * @param {string} text Search here * @return {boolean} */ obj.matcher = function( params, data ) { // If there are no search terms, return all of the data if ( 'string' !== typeof params.term || params.term.trim() === '') { return data; } // Do not display the item if there is no 'text' property if ( typeof data.text === 'undefined' ) { return null; } var term = params.term.trim(); var text = data.text; var $select = $( data.element ).closest( 'select' ); var args = $select.data( 'dropdown' ); var result = text.toUpperCase().indexOf( term.toUpperCase() ) !== -1; if ( ! result && 'undefined' !== typeof args.tags ){ var possible = _.where( args.tags, { text: text } ); if ( args.tags.length > 0 && _.isObject( possible ) ){ var test_value = obj.search_id( possible[0] ); result = test_value.toUpperCase().indexOf( term.toUpperCase() ) !== -1; } } return result; }; /** * If the element used as the basis of a dropdown specifies one or more numeric/text * identifiers in its val attribute, then use those to preselect the appropriate options. * * @param {object} $select * @param {function} make_selection */ obj.init_selection = function( $select, make_selection ) { var isMultiple = $select.is( '[multiple]' ); var options = $select.data( 'dropdown' ); var currentValues = $select.val().split( options.regexSplit ); var selectedItems = []; $( currentValues ).each( function( index, value ) { // eslint-disable-line no-unused-vars var searchFor = { id: this, text: this }; var data = options.ajax ? $select.data( 'options' ) : options.data; var locatedItem = find_item( searchFor, data ); if ( locatedItem && locatedItem.selected ) { selectedItems.push( locatedItem ); } } ); if ( selectedItems.length && isMultiple ) { make_selection( selectedItems ); } else if ( selectedItems.length ) { make_selection( selectedItems[ 0 ] ); } else { make_selection( false ); return; } }; /** * Searches array 'haystack' for objects that match 'description'. * * The 'description' object should take the form { id: number, text: string }. The first * object within the haystack that matches one of those two properties will be returned. * * If objects contain an array named 'children', then that array will also be searched. * * @param {Object} description * @param {Array} haystack * * @return {Object|boolean} */ function find_item( description, haystack ) { if ( ! _.isArray( haystack ) ) { return false; } for ( var index in haystack ) { var possible_match = haystack[ index ]; if ( possible_match.hasOwnProperty( 'id' ) && possible_match.id == description.id ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'text' ) && possible_match.text == description.text ) { // eslint-disable-line no-prototype-builtins,eqeqeq,max-len return possible_match; } if ( possible_match.hasOwnProperty( 'children' ) && _.isArray( possible_match.children ) ) { // eslint-disable-line no-prototype-builtins,max-len var subsearch = find_item( description, possible_match.children ); if ( subsearch ) { return subsearch; } } } return false; } obj.getSelectClasses = function( $select ) { var classesToRemove = [ 'select2-hidden-accessible', 'hide-before-select2-init', ]; var originalClasses = $select.attr( 'class' ).split( /\s+/ ); return _.difference( originalClasses, classesToRemove ); }; obj.element = function( field, args ) { var $select = $( field ); var args = $.extend( {}, args ); // eslint-disable-line no-redeclare var carryOverData = [ // eslint-disable-line no-unused-vars 'depends', 'condition', 'conditionNot', 'condition-not', 'conditionNotEmpty', 'condition-not-empty', 'conditionEmpty', 'condition-empty', 'conditionIsNumeric', 'condition-is-numeric', 'conditionIsNotNumeric', 'condition-is-not-numeric', 'conditionChecked', 'condition-is-checked', ]; var $container; // Add a class for dropdown created $select.addClass( obj.selector.created.className() ); // args.debug = true; // For Reference we save the jQuery element as an Arg. args.$select = $select; // Auto define the Width of the Select2. args.dropdownAutoWidth = true; args.width = 'resolve'; // CSS for the container args.containerCss = {}; // Only apply visibility when it's a Visible Select2. if ( $select.is( ':visible' ) ) { args.containerCss.display = 'inline-block'; args.containerCss.position = 'relative'; } // CSS for the dropdown args.dropdownCss = {}; args.dropdownCss.width = 'auto'; // When we have this we replace the default with what's in the param. if ( $select.is( '[data-dropdown-css-width]' ) ) { args.dropdownCss.width = $select.data( 'dropdown-css-width' ); if ( ! args.dropdownCss.width || 'false' === args.dropdownCss.width ) { delete args.dropdownCss.width; delete args.containerCss; } } // By default we allow The field to be cleared args.allowClear = true; if ( $select.is( '[data-prevent-clear]' ) ) { args.allowClear = false; } // Pass the "Searching..." placeholder if specified if ( $select.is( '[data-searching-placeholder]' ) ) { args.formatSearching = $select.data( 'searching-placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work if ( ! $select.is( '[data-placeholder]' ) && $select.is( '[placeholder]' ) ) { args.placeholder = $select.attr( 'placeholder' ); } // If we are dealing with a Input Hidden we need to set the Data for it to work. if ( $select.is( '[data-options]' ) ) { args.data = $select.data( 'options' ); } // With less then 10 args we wouldn't show the search. args.minimumResultsForSearch = 10; // Prevents the Search box to show if ( $select.is( '[data-hide-search]' ) ) { args.minimumResultsForSearch = Infinity; } // Makes sure search shows up. if ( $select.is( '[data-force-search]' ) ) { delete args.minimumResultsForSearch; } // Allows freeform entry if ( $select.is( '[data-freeform]' ) ) { args.createTag = obj.freefrom_create_search_choice; args.tags = true; $select.data( 'tags', true ); } if ( $select.is( '[multiple]' ) ) { args.multiple = true; // Set the max select items, if defined if ( $select.is( '[data-maximum-selection-size]' ) ) { args.maximumSelectionSize = $select.data( 'maximum-selection-size' ); } // If you don't have separator, add one (comma) if ( ! $select.is( 'data-separator' ) ) { $select.data( 'separator', ',' ); } if ( ! _.isArray( $select.data( 'separator' ) ) ) { args.tokenSeparators = [ $select.data( 'separator' ) ]; } else { args.tokenSeparators = $select.data( 'separator' ); } args.separator = $select.data( 'separator' ); // Define the regular Exp based on args.regexSeparatorElements = [ '^(' ]; args.regexSplitElements = [ '(?:' ]; $.each( args.tokenSeparators, function ( i, token ) { args.regexSeparatorElements.push( '[^' + token + ']+' ); args.regexSplitElements.push( '[' + token + ']' ); } ); args.regexSeparatorElements.push( ')$' ); args.regexSplitElements.push( ')' ); args.regexSeparatorString = args.regexSeparatorElements.join( '' ); args.regexSplitString = args.regexSplitElements.join( '' ); args.regexToken = new RegExp( args.regexSeparatorString, 'ig' ); args.regexSplit = new RegExp( args.regexSplitString, 'ig' ); } // Select also allows Tags, so we go with that too if ( $select.is( '[data-tags]' ) ) { args.tags = $select.data( 'tags' ); args.createSearchChoice = function( term, data ) { // eslint-disable-line no-unused-vars if ( term.match( args.regexToken ) ) { return { id: term, text: term }; } }; if ( 0 === args.tags.length ) { args.formatNoMatches = function() { return $select.attr( 'placeholder' ); }; } } // When we have a source, we do an AJAX call if ( $select.is( '[data-source]' ) ) { var source = $select.data( 'source' ); // For AJAX we reset the data args.data = { results: [] }; // Format for Parents breadcrumbs args.formatResult = function ( item, container, query ) { // eslint-disable-line no-unused-vars,max-len if ( 'undefined' !== typeof item.breadcrumbs ) { return $.merge( item.breadcrumbs, [ item.text ] ).join( ' » ' ); } return item.text; }; // instead of writing the function to execute the request we use Select2's convenient helper. args.ajax = { dataType: 'json', type: 'POST', url: obj.ajaxurl(), // parse the results into the format expected by Select2. processResults: function ( response, page, query ) { // eslint-disable-line no-unused-vars if ( ! $.isPlainObject( response ) || 'undefined' === typeof response.success ) { console.error( 'We received a malformed Object, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! $.isPlainObject( response.data ) || 'undefined' === typeof response.data.results ) { console.error( 'We received a malformed results array, could not complete the Select2 Search.' ); // eslint-disable-line max-len return { results: [] }; } if ( ! response.success ) { if ( 'string' === $.type( response.data.message ) ) { console.error( response.data.message ); } else { console.error( 'The Select2 search failed in some way... Verify the source.' ); } return { results: [] }; } return response.data; }, }; // By default only send the source args.ajax.data = function( search, page ) { return { action: 'tribe_dropdown', source: source, search: search, page: page, args: $select.data( 'source-args' ), }; }; } // Attach dropdown to container in DOM. if ( $select.is( '[data-attach-container]' ) ) { // If multiple, attach container without search. if ( $select.is( '[multiple]' ) ) { $.fn.select2.amd.define( 'AttachedDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/attachContainer', ], function( utils, dropdown, attachContainer ) { return utils.Decorate( dropdown, attachContainer ); } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedDropdownAdapter' ); // If not multiple, attach container with search. } else { $.fn.select2.amd.define( 'AttachedWithSearchDropdownAdapter', [ 'select2/utils', 'select2/dropdown', 'select2/dropdown/search', 'select2/dropdown/minimumResultsForSearch', 'select2/dropdown/attachContainer', ], function( utils, dropdown, search, minimumResultsForSearch, attachContainer ) { var adapter = utils.Decorate( dropdown, attachContainer ); adapter = utils.Decorate( adapter, search ); adapter = utils.Decorate( adapter, minimumResultsForSearch ); return adapter; } ); args.dropdownAdapter = $.fn.select2.amd.require( 'AttachedWithSearchDropdownAdapter' ); } } // Save data on Dropdown $select.data( 'dropdown', args ); $container = $select.select2TEC( args ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.addClass( obj.getSelectClasses( $select ).join( ' ' ) ); // Propagating original input classes to the select2 container. $container.data( 'select2' ).$container.removeClass( 'hide-before-select2-init' ); $container.on( 'select2:open', obj.action_select2_open ); /** * @todo @bordoni Investigate how and if we should be doing this. * if ( carryOverData.length > 0 ) { carryOverData.map( function( dataKey ) { var attr = 'data-' + dataKey; var val = $select.attr( attr ); if ( ! val ) { return; } this.attr( attr, val ); }, $container ); } */ }; obj.ajaxurl = function() { if ( 'undefined' !== typeof window.ajaxurl ) { return window.ajaxurl; } if ( 'undefined' !== typeof TEC && 'undefined' !== typeof TEC.ajaxurl ) { return TEC.ajaxurl; } console.error( 'Dropdowns framework cannot properly do an AJAX request without the WordPress `ajaxurl` variable setup.' ); // eslint-disable-line max-len }; obj.action_select2_open = function( event ) { // eslint-disable-line no-unused-vars var $select = $( this ); var select2Data = $select.data( 'select2' ); var $search = select2Data.$dropdown.find( obj.selector.searchField ); // eslint-disable-line es5/no-es6-methods,max-len select2Data.$dropdown.addClass( obj.selector.dropdown.className() ); // If we have a placeholder for search, apply it! if ( $select.is( '[data-search-placeholder]' ) ) { $search.attr( 'placeholder', $select.data( 'searchPlaceholder' ) ); } }; /** * Configure the Drop Down Fields * * @param {jQuery} $fields All the fields from the page * @param {array} args Allow extending the arguments * * @return {jQuery} Affected fields */ obj.dropdown = function( $fields, args ) { var $elements = $fields.not( '.select2-offscreen, .select2-container, ' + obj.selector.created.className() ); // eslint-disable-line max-len if ( 0 === $elements.length ) { return $elements; } // Default args to avoid Undefined if ( ! args ) { args = {}; } $elements .each( function( index, element ) { // Apply element to all given items and pass args obj.element( element, args ); } ); // return to be able to chain jQuery calls return $elements; }; $( function() { $( obj.selector.dropdown ).tribe_dropdowns(); } ); // Addresses some problems with Select2 inputs not being initialized when using a browser's "Back" button. $( window ).on( 'unload', function() { $( obj.selector.dropdown ).tribe_dropdowns(); }); } )( jQuery, tribe_dropdowns, window.underscore || window._ ); /*! elementor-pro - v3.5.1 - 10-11-2021 */ .elementor-cta,.elementor-widget-call-to-action .elementor-widget-container{overflow:hidden}.elementor-cta{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-cta--skin-classic .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--skin-classic .elementor-cta__bg-wrapper{position:relative;min-height:200px;width:100%}.elementor-cta--skin-classic .elementor-cta__content{-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%;background-color:#f7f7f7}.elementor-cta--skin-classic .elementor-cta__content-item,.elementor-cta--skin-classic .elementor-cta__content-item .elementor-icon{color:#55595c;border-color:#55595c;fill:#55595c}.elementor-cta--skin-classic .elementor-cta__button.elementor-button{color:#55595c;border-color:#55595c}.elementor-cta--skin-cover .elementor-cta{display:block}.elementor-cta--skin-cover .elementor-cta__bg-wrapper{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s;width:100%}.elementor-cta--skin-cover .elementor-cta__content{min-height:280px}.elementor-cta--skin-cover .elementor-cta__button.elementor-button,.elementor-cta--skin-cover .elementor-cta__content-item,.elementor-cta--skin-cover .elementor-cta__content-item .elementor-icon{color:#fff;border-color:#fff}.elementor-cta--layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--layout-image-left .elementor-cta,.elementor-cta--layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--layout-image-left .elementor-cta__content,.elementor-cta--layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.elementor-cta__bg,.elementor-cta__bg-overlay{position:absolute;top:0;left:0;right:0;bottom:0;-webkit-transition:all .4s;-o-transition:all .4s;transition:all .4s}.elementor-cta__bg-wrapper{z-index:1;overflow:hidden}.elementor-cta__bg{-webkit-background-size:cover;background-size:cover;background-position:50%;z-index:1}.elementor-cta__bg-overlay{z-index:2}.elementor-cta__button.elementor-button{cursor:pointer;-ms-flex-item-align:center;align-self:center;margin-left:auto;margin-right:auto;border:2px solid #fff;background:transparent}.elementor-cta__button.elementor-button:hover{background:transparent;text-decoration:none}.elementor-cta__title{font-size:23px}.elementor-cta__content{z-index:1;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:center;align-content:center;padding:35px;width:100%}.elementor-cta__content,.elementor-cta__content-item{position:relative;-webkit-transition:.5s;-o-transition:.5s;transition:.5s;color:#fff}.elementor-cta__content-item{width:100%;margin:0}.elementor-cta__content-item:not(:last-child){margin-bottom:15px}.elementor-cta__content-item .elementor-icon{color:#fff}.elementor-cta--valign-top .elementor-cta__content{-ms-flex-line-pack:start;align-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.elementor-cta--valign-middle .elementor-cta__content{-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-cta--valign-bottom .elementor-cta__content{-ms-flex-line-pack:end;align-content:flex-end;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.elementor-cta:hover .elementor-cta__bg-overlay{background-color:rgba(0,0,0,.3)}@media (max-device-width:1024px){.elementor-cta{cursor:pointer}}@media (min-width:-1px){.elementor-cta--widescreen-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--widescreen-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--widescreen-layout-image-left .elementor-cta,.elementor-cta--widescreen-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--widescreen-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--widescreen-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--widescreen-layout-image-left .elementor-cta__content,.elementor-cta--widescreen-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--widescreen-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--widescreen-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--laptop-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--laptop-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--laptop-layout-image-left .elementor-cta,.elementor-cta--laptop-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--laptop-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--laptop-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--laptop-layout-image-left .elementor-cta__content,.elementor-cta--laptop-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--laptop-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--laptop-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--tablet_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta,.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet_extra-layout-image-left .elementor-cta__content,.elementor-cta--tablet_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:1024px){.elementor-cta--tablet-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--tablet-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--tablet-layout-image-left .elementor-cta,.elementor-cta--tablet-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--tablet-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--tablet-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--tablet-layout-image-left .elementor-cta__content,.elementor-cta--tablet-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--tablet-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--tablet-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:-1px){.elementor-cta--mobile_extra-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile_extra-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta,.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile_extra-layout-image-left .elementor-cta__content,.elementor-cta--mobile_extra-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile_extra-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile_extra-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}@media (max-width:767px){.elementor-cta--mobile-layout-image-above .elementor-cta{-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-cta--mobile-layout-image-above .elementor-cta__bg-wrapper{width:100%}.elementor-cta--mobile-layout-image-left .elementor-cta,.elementor-cta--mobile-layout-image-right .elementor-cta{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.elementor-cta--mobile-layout-image-left .elementor-cta__bg-wrapper,.elementor-cta--mobile-layout-image-right .elementor-cta__bg-wrapper{width:auto;min-width:50%}.elementor-cta--mobile-layout-image-left .elementor-cta__content,.elementor-cta--mobile-layout-image-right .elementor-cta__content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.elementor-cta--mobile-layout-image-left .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-cta--mobile-layout-image-right .elementor-cta{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.elementor-ribbon{position:absolute;z-index:1;top:0;left:0;right:auto;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);width:150px;overflow:hidden;height:150px}.elementor-ribbon-inner{text-align:center;left:0;width:200%;-webkit-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);-ms-transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);transform:translateY(-50%) translateX(0) translateX(35px) rotate(-45deg);margin-top:35px;font-size:13px;line-height:2;font-weight:800;text-transform:uppercase;background:#000;color:#fff}.elementor-ribbon.elementor-ribbon-left{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);left:0;right:auto}.elementor-ribbon.elementor-ribbon-right{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);left:auto;right:0} Beste Online Casinos in Deutschland.813 - premier mills

Beste Online Casinos in Deutschland.813

Beste Online Casinos in Deutschland

▶️ SPIELEN

Содержимое

Wenn Sie auf der Suche nach den besten Online Casinos in Deutschland sind, sind Sie bei uns genau richtig. Wir haben uns bemüht, die Top-Online-Casinos in Deutschland zu identifizieren, die Ihnen die beste Spiel- und Gewinn-Erfahrung bieten. In diesem Artikel werden wir Ihnen die besten Online Casinos in Deutschland vorstellen, die Sie besuchen können, um Ihre Lieblings-Spiele zu spielen und Gewinne zu erzielen.

Die Online-Casinos in Deutschland bieten eine Vielzahl von Spielen an, von klassischen Tischspielen wie Blackjack und Roulette bis hin zu modernen Slots und Video-Spielen. Sie können auch mobile Online Casinos besuchen, die auf Ihren mobilen Geräten wie Smartphones und Tablets optimiert sind, damit Sie überall und wann Sie möchten spielen können.

Wir haben uns bemüht, die besten Online Casinos in Deutschland zu testen, indem wir ihre Spiele, ihre Sicherheit und ihre Boni überprüft haben. Wir haben auch eine Liste der besten Online Casinos in Deutschland erstellt, die Sie besuchen können, um Ihre Lieblings-Spiele zu spielen und Gewinne zu erzielen.

Die besten Online Casinos in Deutschland bieten Ihnen eine Vielzahl von Vorteilen, darunter eine breite Palette an Spielen, hohe Gewinnchancen und eine sichere und zuverlässige Zahlungsmethode. Wir haben uns bemüht, die Top-Online-Casinos in Deutschland zu identifizieren, die Ihnen die beste Spiel- und Gewinn-Erfahrung bieten.

Wir hoffen, dass Sie unseren Artikel über die besten Online Casinos in Deutschland finden hilfreich und informativ. Wir sind sicher, dass Sie nach dem Lesen unseres Artikels wissen, wo Sie die besten Online Casinos in Deutschland finden können, um Ihre Lieblings-Spiele zu spielen und Gewinne zu erzielen.

Die Top-Online-Casinos in Deutschland: Wir haben eine Liste der besten Online Casinos in Deutschland erstellt, die Sie besuchen können, um Ihre Lieblings-Spiele zu spielen und Gewinne zu erzielen. Wir haben uns bemüht, die Top-Online-Casinos in Deutschland zu identifizieren, die Ihnen die beste Spiel- und Gewinn-Erfahrung bieten.

Wir empfehlen Ihnen, unsere Liste der besten Online Casinos in Deutschland zu überprüfen, bevor Sie sich für ein bestimmtes Casino entscheiden.

Die besten Online Casinos in Deutschland

Die Suche nach dem besten Online Casino in Deutschland kann aufwendig und schwierig sein. Es gibt viele Möglichkeiten, um die richtige Wahl zu treffen, aber wir sind hier, um Ihnen zu helfen. In diesem Artikel werden wir Ihnen die besten Online Casinos in Deutschland vorstellen und Ihnen die wichtigsten Merkmale und Funktionen erläutern.

Die Kriterien für die Auswahl

Bevor wir die online casino echtgeld besten Online Casinos in Deutschland vorstellen, müssen wir die Kriterien für die Auswahl klären. Wir haben uns an die folgenden Kriterien gehalten:

Lizenzen: Wir haben nur Online Casinos ausgewählt, die eine gültige Lizenz in Deutschland haben.

Spiele: Wir haben nur Online Casinos ausgewählt, die eine breite Palette an Spielen anbieten, darunter auch klassische Casino-Spiele wie Roulette, Blackjack und Poker.

Bonusangebote: Wir haben nur Online Casinos ausgewählt, die attraktive Bonusangebote anbieten, um neue Spieler zu gewinnen.

Mobile-Optimierung: Wir haben nur Online Casinos ausgewählt, die eine mobile-optimierte Version anbieten, damit Spieler auch auf dem Go spielen können.

Die besten Online Casinos in Deutschland

Nachdem wir die Kriterien für die Auswahl geklärt haben, können wir Ihnen die besten Online Casinos in Deutschland vorstellen. Hier sind unsere Top-5-Wahl:

  • Stargames: Stargames ist eines der bekanntesten Online Casinos in Deutschland und bietet eine breite Palette an Spielen an, darunter auch viele Novoline-Spiele.
  • Mr. Green: Mr. Green ist ein weiteres bekanntes Online Casino in Deutschland und bietet eine Vielzahl an Spielen an, darunter auch viele Novomatic-Spiele.
  • Unibet: Unibet ist ein Online Casino, das eine breite Palette an Spielen anbietet und auch viele Sportwetten anbietet.
  • 888 Casino: 888 Casino ist ein Online Casino, das eine breite Palette an Spielen anbietet und auch viele progressive Jackpots anbietet.
  • CasinoClub: CasinoClub ist ein Online Casino, das eine breite Palette an Spielen anbietet und auch viele Bonusangebote anbietet.

Online Casino Testbericht

Wir haben die oben genannten Online Casinos getestet und haben uns an die folgenden Kriterien gehalten:

Spiele: Wir haben die Spiele der Online Casinos getestet und haben uns an die Qualität und Vielfalt der Spiele gehalten.

Bonusangebote: Wir haben die Bonusangebote der Online Casinos getestet und haben uns an die Attraktivität und Vielfalt der Bonusangebote gehalten.

Mobile-Optimierung: Wir haben die mobile-optimierten Versionen der Online Casinos getestet und haben uns an die Leistung und Benutzerfreundlichkeit gehalten.

Die Ergebnisse

Nachdem wir die Online Casinos getestet haben, können wir Ihnen die Ergebnisse vorstellen. Hier sind unsere Top-5-Wahl:

  • Stargames: Stargames hat sich als eines der besten Online Casinos in Deutschland herausgestellt, da es eine breite Palette an Spielen anbietet und auch viele attraktive Bonusangebote anbietet.
  • Mr. Green: Mr. Green hat sich als eines der besten Online Casinos in Deutschland herausgestellt, da es eine breite Palette an Spielen anbietet und auch viele attraktive Bonusangebote anbietet.
  • Unibet: Unibet hat sich als eines der besten Online Casinos in Deutschland herausgestellt, da es eine breite Palette an Spielen anbietet und auch viele Sportwetten anbietet.
  • 888 Casino: 888 Casino hat sich als eines der besten Online Casinos in Deutschland herausgestellt, da es eine breite Palette an Spielen anbietet und auch viele progressive Jackpots anbietet.
  • CasinoClub: CasinoClub hat sich als eines der besten Online Casinos in Deutschland herausgestellt, da es eine breite Palette an Spielen anbietet und auch viele attraktive Bonusangebote anbietet.
  • Zusammenfassung

    In diesem Artikel haben wir die besten Online Casinos in Deutschland vorgestellt und haben uns an die Kriterien für die Auswahl gehalten. Wir haben uns an die Qualität und Vielfalt der Spiele, die Attraktivität und Vielfalt der Bonusangebote und die Leistung und Benutzerfreundlichkeit der mobile-optimierten Versionen gehalten. Wir hoffen, dass unser Artikel Ihnen bei der Suche nach dem besten Online Casino in Deutschland hilft.

    Top-Anbieter für Spieler aus Deutschland

    Die Suche nach dem besten Online-Casino für Spieler aus Deutschland kann aufwendig und schwierig sein. Es gibt viele Anbieter auf dem Markt, die sich um die Gunst der Kunden bewerben. Um Ihnen zu helfen, haben wir eine Auswahl der Top-Anbieter für Spieler aus Deutschland erstellt. Diese Anbieter bieten eine Vielzahl an Spielen, sicheren und zuverlässigen Zahlungsmethoden, sowie eine Vielzahl an Bonusangeboten.

    Einige der Top-Anbieter für Spieler aus Deutschland sind:

    Novoline Casino: Novoline ist ein bekannter Anbieter von Online-Spielen und bietet eine Vielzahl an Spielen, darunter auch viele beliebte Novoline-Spiele. Das Casino akzeptiert Zahlungen per Kreditkarte, PayPal und Banküberweisung.

    Mr. Green Casino: Mr. Green ist ein weiterer bekannter Anbieter von Online-Spielen und bietet eine Vielzahl an Spielen, darunter auch viele beliebte Slots. Das Casino akzeptiert Zahlungen per Kreditkarte, PayPal und Banküberweisung.

    CasinoClub: CasinoClub ist ein Online-Casino, das sich auf die Bedürfnisse von Spielern aus Deutschland spezialisiert hat. Das Casino bietet eine Vielzahl an Spielen, darunter auch viele beliebte Slots und Tischspiele. Das Casino akzeptiert Zahlungen per Kreditkarte, PayPal und Banküberweisung.

    Wir haben diese Anbieter ausführlich getestet und können Ihnen garantieren, dass sie sichere und zuverlässige Online-Casinos sind. Sie bieten eine Vielzahl an Spielen, sichere Zahlungsmethoden und eine Vielzahl an Bonusangeboten.

    Wenn Sie nach einem Online-Casino suchen, das sich auf Ihre Bedürfnisse spezialisiert hat, sollten Sie sich an einen der oben genannten Anbieter wenden. Sie werden nicht enttäuscht sein!

    Wie wählt man das richtige Online Casino aus?

    Wenn Sie sich für ein Online Casino entschieden haben, ist es wichtig, dass Sie sich sicherstellen, dass Sie das richtige auswählen. Ein Online Casino, das Ihren Bedürfnissen entspricht, kann Ihnen eine großartige Spielerfahrung bieten. Hier sind einige Tipps, die Ihnen helfen, das richtige Online Casino auszuwählen:

    Erstens sollten Sie sich um die Lizenz kümmern. Ein Online Casino, das eine gültige Lizenz hat, kann Ihnen sicherstellen, dass Sie fair und ordnungsgemäß behandelt werden. Einige der besten Online Casinos in Deutschland haben eine Lizenz von der Malta Gaming Authority oder der Schleswig-Holsteinischen Lotterie.

    Zweitens sollten Sie sich um die Spieleangebote kümmern. Ein Online Casino, das eine breite Palette an Spielen bietet, kann Ihnen eine großartige Auswahl an Spielen bieten. Sie sollten sich auch um die Qualität der Spiele kümmern, um sicherzustellen, dass sie gut programmiert und fair sind.

    Drittens sollten Sie sich um die Zahlungsmethoden kümmern. Ein Online Casino, das eine Vielzahl an Zahlungsmethoden anbietet, kann Ihnen eine großartige Flexibilität bieten. Sie sollten sich auch um die Sicherheit der Zahlungsmethoden kümmern, um sicherzustellen, dass Ihre Transaktionen sicher sind.

    Viertens sollten Sie sich um die Bonusangebote kümmern. Ein Online Casino, das gute Bonusangebote anbietet, kann Ihnen eine großartige Möglichkeit bieten, Ihre Spielbank zu erhöhen. Sie sollten sich auch um die Bedingungen der Bonusangebote kümmern, um sicherzustellen, dass Sie die Bedingungen erfüllen können.

    Fünftens sollten Sie sich um die Unterstützung kümmern. Ein Online Casino, das gute Unterstützung anbietet, kann Ihnen eine großartige Hilfe bei Fragen oder Problemen bieten. Sie sollten sich auch um die Reaktionszeit der Unterstützung kümmern, um sicherzustellen, dass Sie schnellstmöglich auf Ihre Fragen geantwortet werden.

    Zum Schluss sollten Sie sich um die Bewertungen kümmern. Ein Online Casino, das gute Bewertungen hat, kann Ihnen eine großartige Empfehlung sein. Sie sollten sich auch um die Kritiken kümmern, um sicherzustellen, dass Sie die Stärken und Schwächen des Online Casinos kennen.

    Indem Sie diese Tipps beachten, können Sie sicherstellen, dass Sie das richtige Online Casino auswählen. Es ist wichtig, dass Sie sich um alle Aspekte kümmern, um sicherzustellen, dass Sie eine großartige Spielerfahrung haben.

    Die wichtigsten Kriterien für eine sichere und faire Spielumgebung

    Die Suche nach einem vertrauenswürdigen Online-Casino kann für viele Spieler eine Herausforderung darstellen. Um sicherzustellen, dass Sie in einem sicheren und fairen Umfeld spielen, sollten Sie einige wichtige Kriterien beachten. Im Folgenden finden Sie die wichtigsten Aspekte, die Sie bei der Auswahl eines Online-Casinos beachten sollten.

    Erstes Kriterium: Lizenz und Regulierung

    Ein Online-Casino, das eine gültige Lizenz von einer staatlichen Regulierungsbehörde besitzt, kann als sicher und seriös betrachtet werden. Eine solche Lizenz garantiert, dass das Casino unter strengen Regeln und Überwachung steht. Einige der wichtigsten Regulierungsbehörden für Online-Casinos sind die Malta Gaming Authority, die UK Gambling Commission und die ehemalige Regulierungsbehörde für Glücksspiel in Deutschland, die Glücksspielbehörde.

    Zweites Kriterium: Sicherheit und Datenschutz

    Ein Online-Casino muss sicherstellen, dass Ihre persönlichen Daten und Ihre Transaktionen sicher sind. Dazu gehören Maßnahmen wie SSL-Verschlüsselung, um Ihre Daten zu schützen, und die Verwendung von sicheren Zahlungsmethoden, wie z.B. PayPal oder Skrill.

    Drittes Kriterium: Rechtliche Anerkennung

    Ein Online-Casino sollte sichergestellt sein, dass es in Ihrem Land legal ist. In Deutschland gibt es beispielsweise die Glücksspielstaatsvertrag, die die Regeln für Glücksspiel in Deutschland festlegt.

    Viertes Kriterium: Transparenz und Offenheit

    Ein Online-Casino sollte transparent und offen sein über seine Geschäftspraktiken und seine Bedingungen. Dazu gehören Informationen über die Auszahlungsquote, die Spielbedingungen und die Regeln für die Teilnahme an den Spielen.

    Fünftes Kriterium: Rechtliche Schutzmaßnahmen

    Ein Online-Casino sollte sichergestellt sein, dass es Schutzmaßnahmen für Spieler bietet, die Probleme bei der Teilnahme an den Spielen haben. Dazu gehören Maßnahmen wie Selbsthilfeprogramme, um Spieler zu unterstützen, die Probleme bei der Teilnahme an den Spielen haben.

    Schließlich: Top Online Casinos

    Wenn Sie nach einem Online-Casino suchen, das an die oben genannten Kriterien entspricht, sollten Sie sich an die besten Online Casinos Deutschlands wenden. Einige der besten Online Casinos Deutschlands sind das https://cowonamerica.com/ Bonus, das https://cowonamerica.com/ Online Casinos und das https://cowonamerica.com/ Casinos Deutschland.

    Leave a Comment

    Your email address will not be published. Required fields are marked *