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} Fairspin Portugal - premier mills

Fairspin Portugal

Fairspin Portugal

Fairspin casino é um dos criptocasinos disponíveis para os apostadores em Portugal que desejam passar uma ótima experiência. Este bitcoin casino é relativamente recente, sendo que apenas está disponível desde 2018. No entanto, já é tempo suficiente para percebermos que Fairspin Portugal é uma opção a não perder.

Com grande diversidade de jogos, ainda que este seja conhecido pelas criptomoedas, aceita ainda moedas FIAT de modo a agradar todos os tipos de jogadores.

Se deseja saber mais, leia já a nossa avaliação Fairspin casino e descubra tudo o que este casino tem para lhe oferecer.

Principais Vantagens e Funcionalidades De Fairspin

Sempre que procuramos uma casa de apostas desejamos, claro, que este nos ofereça várias vantagens. Mas, será que Fair Spin tem vantagens suficientes para valer a pena criar conta? Reunimos as principais vantagens deste casino após a nossa revisão de Fairspin Portugal e também quais as funcionalidades que pode encontrar em fairspin.io:

Vantagens

  • Programa de fidelização VIP
  • Grande diversidade de jogos
  • Levantamentos instantâneos
  • Ótimo pacote de boas-vindas
  • Plataforma segura
  • Licença emitida em Curaçao

Além destas vantagens, os jogadores procuram saber quais as funcionalidades que podem encontrar. Para identificar as funcionalidades que o Fairspin casino online oferece é necessário avaliar todos os critérios que consideramos fundamentais. Não se preocupe, pois a nossa equipa de especialistas analisou tudo o que esta plataforma oferece. Além claro, de este ser um dos casinos onde pode usar criptomoedas, oferece outras funcionalidades bastante interessantes que iremos analisar ao detalhe ao longo desta avaliação.

No entanto, antes de analisar detalhadamente todas as funcionalidades iremos destacar o site e o design de FairSpin. Toda a plataforma é bastante moderna com um design limpo e funcional. Todos os separadores estão bem identificados e facilmente consegue encontrar os seus jogos preferidos. Pode também encontrar de forma simples as novidades, as promoções e também as opções de jogo em live.

Com a vantagem clara de que o site está disponível em português, num claro investimento ao público de território nacional. Vejamos então ainda o processo de registro, a diversidade de jogos e, muito importante, os bónus oferecidos no bitcoin casino.

Fatos Rápidos Sobre a Casa de Apostas Fairspin

Programas

Licença Oficial

Online Desde

Proprietário da Empresa

Tipos de Jogo

Aplicativo Móvel

Bancário

Total de Jogos

iSoftBet, Red Tiger, Evolution, Pragmatic Play, BetSoft, Thunderkick
Curacao
2021
Techcore Holding B.V.
Gold Digger, Hustling, Queenie, Thai Blossoms, Wanted Dead or a Wild, Odin’s Gamble
iOS, Android
Bitcoin, Ethereum, Tron, Mastercard, Visa, Piastrix, Perfect Money
3400+

Processo de Registro: Como Se Registrar Em Fairspin?

Antes de conseguir fazer Fairspin login é necessário criar uma conta. Felizmente criar conta em Fairspin online é muito fácil e em poucos minutos tem o seu perfil para começar a jogar nos seus jogos preferidos.

  • Apenas tem de carregar no botão de ‘Registro’ localizado no canto superior direito e surge uma janela de registro.
  • Quando a tela de registo surgir, introduza o seu endereço de e-mail, palavra passe, número de telefone e qual a moeda que deseja escolher para a sua conta.

Em baixo terá um passo-a-passo detalhado, mas antes, é importante referir que os dados fornecidos deverão estar corretos e a palavra passe deverá ser forte e única. Claro que os seus dados não devem ser partilhados a terceiros.

Como Criar Conta Em Fairspin?

Criar conta em Fairspin apostas é realmente muito simples. Para que não existam dúvidas, criamos um passo-a-passo, que verá em baixo. Em caso de não conseguir, por alguma razão, criar a sua conta, entre em contacto com o suporte ao cliente.

Siga o passo-a-passo e comece a explorar e a ganhar hoje mesmo:

Aceda à página de Fairspin

O primeiro passo para criar a sua conta é aceder à página de Fairspin crypto. Pode fazê-lo quer através do navegador, ou através do seu telemóvel, sem necessidade de descarregar uma aplicação.

Clique no Botão de registo

Localizado no canto superior direito do ecrã, encontra o botão de ‘Registo’. Clique e surgirá uma janela pop-up com um formulário que pede os dados para poder criar a sua conta.

Preencha o Formulário

Preencha o seu endereço de e-mail e palavra-passe. Ao aceitar os termos e condições, declara ser maior de idade e pode criar a sua conta. Garanta ainda que não é um chatbot ao clicar no botão ‘Não sou um robot’.

Prepare-se Para Ganhar

Faça o primeiro depósito e comece a ganhar nos seus jogos preferidos. Caso prefira pode simplesmente criar a sua conta através da rede social Facebook, ou através do Google e rapidamente pode começar a jogar.

Verificação De Conta

A sua conta de apostas pode necessitar de ser verificada. Para isso, clique no botão que encontra no canto superior direito do seu perfil e selecione a opção de verificação de identidade. Será enviado para outra página onde deverá descarregar a imagem de um comprovativo de identidade. Deverá também enviar uma ‘selfie’ e ao ser considerado um utilizador verificado, ganhará um bónus de aniversário.

É importante referir também que Fairspin oferece a opção de auto exclusão localizado no fundo da página. Esta opção é especialmente útil para a política de jogo responsável. Caso sinta que deverá optar pela auto exclusão poderá solicitá-la também através do chat ao vivo.

Processo De Login

Após a criação de conta, sempre que desejar aceder à sua conta basta fazer login. Como? Acedendo à página principal de Fairspin, encontrará no canto superior, mesmo ao lado do botão de registo, a opção de login.

Ao clicar na sua conta poderá ser necessário introduzir os seus dados de e-mail e palavra-passe, caso não os tenha guardado. Lembramos que nunca deverá guardar e/ou partilhar a sua palavra-passe em dispositivos partilhados.

Bónus De Boas-Vindas De Fairspin

Nada como um bom bónus de boas-vindas para cativar novos jogadores. Felizmente Fairspin sabe como oferecer um bónus que valha realmente a pena e disponibiliza um bónus nos primeiros quatro depósitos.

Além do bónus oferecido na primeira vez que joga em Fairspin, tem também a possibilidade de receber um bónus no aniversário Fairspin. Existem também promoções com alguma frequência em alguns jogos específicos. Recomendamos que verifique o separador de bónus com frequência, não deixando escapar nenhuma oportunidade.

Ao se registar no casino tem um bónus nos quatro primeiros depósitos. É um bónus com diferentes percentagens em cada depósito com um total de 140 rodadas grátis combinadas entre o total dos depósitos. Não há como negar – Fairspin casino sabe como conquistar os seus apostadores!

O bónus funciona desta forma:

  • No primeiro depósito o bónus é de 100% até um máximo de $100 00 mais 30 rodadas grátis. Os 100% são oferecidos se depositar um mínimo de 500 USD. Com 20 USD já consegue um bónus de 50% e 10 rodadas grátis.
  • Ao segundo e terceiro depósito recebe um bónus de 75% com 30 rodadas grátis até $75 000. Também aqui tem de efetuar um depósito de 500USD, mas com 20 USD é-lhe oferecido um bónus de 25% e 10 rodadas grátis.
  • No quarto depósito recebe-se um bónus de 200% até $200 000 e 50 rodadas grátis. Aqui o máximo de bónus é de 500 USD, mas com 20 USD receberá um bónus de 100% e 10 rodadas grátis.
  • O requisito de aposta é de 60x o valor do bónus.

Opções De Apostas Desportivas Em Fairspin

São várias as opções de apostas desportivas. Com apostas rápidas, ou combinadas. A possibilidade de apostas desportivas é algo recente, mas que acreditamos cumprir com todos os requisitos.

Mercados Desportivos

São mais de 2000 mercados onde se pode apostar em Fairspin. Desde os mais populares como o resultado final, a outros como o mercado de Handicap. São milhares de opções de aposta.

Tipos De Apostas

Fairspin oferece a possibilidade de apostas rápidas ou combinadas. As primeiras possuem, geralmente odds menores, mas mais fáceis de acertar. As apostas combinadas oferecem potenciais valores bastante apetecíveis, mas são, obviamente, mais difíceis de conseguir acertar em todos os resultados.

Opções De Apostas Ao Vivo

Graças ao fornecimento de conteúdos em direto nas 24 horas do dia, as apostas ao vivo são mais fáceis de fazer. Verifique as opções e tente a sua sorte.

Apostas Em eSports

Fairspin oferece um separador de jogos eSports onde pode apostar em jogos populares como League of Legends. Se é fã de esportes eletrónicos vai adorar este separador de Fairspin.

Odds De Apostas

A nossa análise verificou que as odds oferecidas por Fairspin são justas e estão dentro da média que é encontrada em outras plataformas de apostas desportivas. Com grande concorrência é difícil que as odds sejam muito dispares entre plataformas, mas Fairspin consegue boas cotações na maioria dos mercados oferecidos.

Review Geral Do Casino

De modo geral não há nada de grave a apontar a este casino. Com boa diversidade de jogos e um design moderno e minimalista, é difícil encontrar razões para não jogar em Fairspin. No entanto, de modo geral, a nossa equipa recomenda Fairspin como uma boa escolha para jogar os seus jogos preferidos.

Slot Machines

Sem dúvida que as slot machines são um dos jogos mais populares nos casinos online. Fairspin não é exceção e felizmente a diversidade é bastante boa. Com recursos exclusivos para uma experiência de jogo verdadeiramente emocionante, encontra slots dos fornecedores mais renomeados do mercado e títulos para todos os gostos num catalogo que conta com mais de 4000 slots.

Jogos De Mesa

Todos os casinos necessitam de jogos de mesa. Os jogos mais tradicionais e frequentemente procurados, oferecem na sua versão online a mesma experiência de jogo, sem necessidade de sair de sua casa. Desde os jogos mais tradicionais como Blackjack, ou Roleta, encontra em Fairspin versões modernas de jogos de mesa como Caribbean Stud, ou roleta rápida.

Poker

O Poker é uma das atrações fortes dos casinos online. Felizmente aqui pode contar com diversas mesas de poker para apostar com bitcoins. Desde as versões mais tradicionais como Texas Holdem, até às mais ‘fora-da-caixa’ como Oasis Poker, ou Poker Teen Patti, encontra, com certeza, o seu jogo de poker favorito.

Roleta

A roleta é um jogo que dispensa apresentações. Obrigatória em todos os casinos, físicos ou online, é um jogo que cativa pela sua simplicidade e emoção. Com a opção de jogar em diferentes variantes da Roleta como a roleta europeia ou americana, facilmente vai colocar este jogo na sua lista de preferidos.

Blackjack

Outro que dispensa apresentações. Blackjack ou 21 como também é conhecido está disponível na versão RPG e live em cerca de 100 mesas diferentes. Tente alcançar os 21 pontos primeiro que o dealer e divirta-se em um dos jogos de casino mais populares.

Jogos De Casino Live

As versões ao vivo oferecem uma experiência imersiva aos apostadores. Neste separador encontra jogos como Blackjack, Roleta, poker e muitos outros em versão ao vivo com transmissões de alta qualidade. Sinta-se como se estivesse realmente numa sala de casino sem sequer sair de casa.

Opções De Pagamento

Ainda que Fairspin seja um casino de criptomoedas ele oferece opções de pagamento com moedas FIAT para que todos os apostadores possam aceder à plataforma.

Opções De Depósito

Para depositar fundos em Fairspin pode fazê-lo através de cartão VISA ou Mastercard. Todos os pagamentos são processados em minutos. O limite mínimo de depósito é de 0.58 mBTC. Pode ainda usar carteiras eletrónicas como Skrill, Neteller, Jeton e muito mais.

Opções De Levantamento

Tal como os depósitos, também os levantamentos podem ser feitos através de VISA ou Mastercard. A maior diferença é que o processamento pode demorar alguns dias. Para levantar é necessário ter um mínimo que irá depender da moeda e do método de pagamento escolhido.

Licença e Segurança

Fairspin possui licença emitida pelas entidades de Curaçao. Além da licença toda a plataforma adota medidas modernas de criptografia para proteger os seus jogadores. A segurança é, aliás, uma das características dos casinos com tecnologia blockchain que usam criptomoedas como o Bitcoin e outras.

Usabilidade Das Apostas Online

É uma adição recente de Fairspin, as apostas desportivas. Mas, na verdade, este é um separador com grande qualidade, tal qual a encontrada nos jogos de casino. Com diversos mercados disponíveis e diversidade de apostas inclusive com opções de reembolso e mais de 70 000 eventos todos os meses, Fairspin é uma boa opção para os fãs de apostas.

Suporte Ao Cliente

Foi com agrado que percebemos que Fairspin oferece diferentes opções de contato. No caso de possuir alguma questão pode usar o chat ao vivo, que recomendamos especialmente para questões de resposta rápida. Pode ainda optar por uma chamada telefónica, via chat Telegram, ou até através de mensagem privada pelo Facebook.

Conclusão

Fairspin é uma plataforma recente, mas que não deixa dúvidas de que veio para ficar. Com grande qualidade, aposta na satisfação dos seus jogadores, seja com a oferta de um atrativo pacote de boas-vindas, quer com milhares de jogos de fornecedores de qualidade.

Muito para oferecer, consegue agradar aos fãs de criptomoedas, sem esquecer aqueles que preferem as moedas FIAT.

Perguntas Frequentes

  1. Fairspin é seguro?

    Sim. A nossa equipa de especialistas analisou o casino Fairspin e concluímos que este é uma escolha segura. Leia a nossa avaliação para saber tudo o que Fairspin tem para lhe oferecer.

  2. Fairspin oferece bónus de boas-vindas?

    Este é, na verdade, um dos pontos fortes de Fairspin. Um bónus de boas-vindas nos primeiros quatro depósitos. Veja como funciona no separador bónus que encontra na nossa página.

  3. Apenas posso utilizar criptomoedas em Fairspin?

    Não. Fairspin aceita também moedas FIAT. Veja quais são os métodos de pagamento aceites em Fairspin no nosso separador de métodos de pagamento.

Leave a Comment

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