/* Widget Name: Button Description: Create a custom button with flexible styling, icon support, and click tracking functionality. Author: SiteOrigin Author URI: https://siteorigin.com Documentation: https://siteorigin.com/widgets-bundle/button-widget-documentation/ Keywords: event, icon, link */ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget { public function __construct() { parent::__construct( 'sow-button', __( 'SiteOrigin Button', 'so-widgets-bundle' ), array( 'description' => __( 'Create a custom button with flexible styling, icon support, and click tracking functionality.', 'so-widgets-bundle' ), 'help' => 'https://siteorigin.com/widgets-bundle/button-widget-documentation/', ), array( ), false, plugin_dir_path( __FILE__ ) ); } public function get_settings_form() { return array( 'responsive_breakpoint' => array( 'type' => 'measurement', 'label' => __( 'Responsive Breakpoint', 'so-widgets-bundle' ), 'default' => '780px', 'description' => __( 'This setting controls when the Mobile Align setting will be used. The default value is 780px.', 'so-widgets-bundle' ), ), ); } public function initialize() { $this->register_frontend_styles( array( array( 'sow-button-base', plugin_dir_url( __FILE__ ) . 'css/style.css', array(), SOW_BUNDLE_VERSION, ), ) ); } public function get_widget_form() { return array( 'text' => array( 'type' => 'text', 'label' => __( 'Button Text', 'so-widgets-bundle' ), ), 'url' => array( 'type' => 'link', 'label' => __( 'Destination URL', 'so-widgets-bundle' ), 'allow_shortcode' => true, ), 'new_window' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Open in a new window', 'so-widgets-bundle' ), ), 'download' => array( 'type' => 'checkbox', 'default' => false, 'label' => __( 'Download', 'so-widgets-bundle' ), 'description' => __( 'The Destination URL will be downloaded when a user clicks on the button.', 'so-widgets-bundle' ), ), 'button_icon' => array( 'type' => 'section', 'label' => __( 'Icon', 'so-widgets-bundle' ), 'fields' => array( 'icon_selected' => array( 'type' => 'icon', 'label' => __( 'Icon', 'so-widgets-bundle' ), ), 'icon_color' => array( 'type' => 'color', 'label' => __( 'Icon Color', 'so-widgets-bundle' ), ), 'icon' => array( 'type' => 'media', 'label' => __( 'Image Icon', 'so-widgets-bundle' ), 'description' => __( 'Replaces the icon with your own image icon.', 'so-widgets-bundle' ), ), 'icon_placement' => array( 'type' => 'select', 'label' => __( 'Icon Placement', 'so-widgets-bundle' ), 'default' => 'left', 'options' => array( 'top' => __( 'Top', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'bottom' => __( 'Bottom', 'so-widgets-bundle' ), 'left' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), 'design' => array( 'type' => 'section', 'label' => __( 'Design and Layout', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'width' => array( 'type' => 'measurement', 'label' => __( 'Width', 'so-widgets-bundle' ), 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' ), ), 'align' => array( 'type' => 'select', 'label' => __( 'Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'mobile_align' => array( 'type' => 'select', 'label' => __( 'Mobile Align', 'so-widgets-bundle' ), 'default' => 'center', 'options' => array( 'left' => __( 'Left', 'so-widgets-bundle' ), 'right' => __( 'Right', 'so-widgets-bundle' ), 'center' => __( 'Center', 'so-widgets-bundle' ), 'justify' => __( 'Full Width', 'so-widgets-bundle' ), ), ), 'theme' => array( 'type' => 'select', 'label' => __( 'Button Theme', 'so-widgets-bundle' ), 'default' => 'flat', 'options' => array( 'atom' => __( 'Atom', 'so-widgets-bundle' ), 'flat' => __( 'Flat', 'so-widgets-bundle' ), 'wire' => __( 'Wire', 'so-widgets-bundle' ), ), ), 'button_color' => array( 'type' => 'color', 'label' => __( 'Button Color', 'so-widgets-bundle' ), ), 'text_color' => array( 'type' => 'color', 'label' => __( 'Text Color', 'so-widgets-bundle' ), ), 'hover' => array( 'type' => 'checkbox', 'default' => true, 'label' => __( 'Use hover effects', 'so-widgets-bundle' ), 'state_emitter' => array( 'callback' => 'conditional', 'args' => array( 'hover[show]: val', 'hover[hide]: ! val', ), ), ), 'hover_background_color' => array( 'type' => 'color', 'label' => __( 'Hover Background Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'hover_text_color' => array( 'type' => 'color', 'label' => __( 'Hover Text Color', 'so-widgets-bundle' ), 'state_handler' => array( 'hover[show]' => array( 'show' ), 'hover[hide]' => array( 'hide' ), ), ), 'font' => array( 'type' => 'font', 'label' => __( 'Font', 'so-widgets-bundle' ), 'default' => 'default', ), 'font_size' => array( 'type' => 'measurement', 'label' => __( 'Font Size', 'so-widgets-bundle' ), 'default' => '1em', ), 'icon_size' => array( 'type' => 'measurement', 'label' => __( 'Icon Size', 'so-widgets-bundle' ), 'default' => '1.3em', ), 'padding' => array( 'type' => 'measurement', 'label' => __( 'Padding', 'so-widgets-bundle' ), 'default' => '1em', ), 'rounding' => array( 'type' => 'multi-measurement', 'label' => __( 'Rounding', 'so-widgets-bundle' ), 'default' => '0.25em 0.25em 0.25em 0.25em', 'measurements' => array( 'top' => array( 'label' => __( 'Top', 'so-widgets-bundle' ), ), 'right' => array( 'label' => __( 'Right', 'so-widgets-bundle' ), ), 'bottom' => array( 'label' => __( 'Bottom', 'so-widgets-bundle' ), ), 'left' => array( 'label' => __( 'Left', 'so-widgets-bundle' ), ), ), ), ), ), 'attributes' => array( 'type' => 'section', 'label' => __( 'Other Attributes and SEO', 'so-widgets-bundle' ), 'hide' => true, 'fields' => array( 'id' => array( 'type' => 'text', 'label' => __( 'Button ID', 'so-widgets-bundle' ), 'description' => __( 'An ID attribute allows you to target this button in JavaScript.', 'so-widgets-bundle' ), ), 'classes' => array( 'type' => 'text', 'label' => __( 'Button Classes', 'so-widgets-bundle' ), 'description' => __( 'Additional CSS classes added to the button link.', 'so-widgets-bundle' ), ), 'title' => array( 'type' => 'text', 'label' => __( 'Title Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a title attribute to the button link.', 'so-widgets-bundle' ), ), 'on_click' => array( 'type' => 'text', 'label' => __( 'Onclick', 'so-widgets-bundle' ), 'description' => __( 'Run this JavaScript when the button is clicked. Ideal for tracking.', 'so-widgets-bundle' ), 'onclick' => true, ), 'rel' => array( 'type' => 'text', 'label' => __( 'Rel Attribute', 'so-widgets-bundle' ), 'description' => __( 'Adds a rel attribute to the button link.', 'so-widgets-bundle' ), ), ), ), ); } public function get_style_name( $instance ) { if ( empty( $instance['design']['theme'] ) ) { return 'atom'; } return $instance['design']['theme']; } /** * Get the variables for the Button Widget. * * @return array */ public function get_template_variables( $instance, $args ) { $button_attributes = array(); $attributes = $instance['attributes']; $classes = ! empty( $attributes['classes'] ) ? $attributes['classes'] : ''; if ( ! empty( $classes ) ) { $classes .= ' '; } $classes .= 'sowb-button ow-icon-placement-' . $instance['button_icon']['icon_placement']; if ( ! empty( $instance['design']['hover'] ) ) { $classes .= ' ow-button-hover'; } $button_attributes['class'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $classes ) ) ); if ( ! empty( $instance['new_window'] ) ) { $button_attributes['target'] = '_blank'; $button_attributes['rel'] = 'noopener noreferrer'; } if ( ! empty( $instance['download'] ) ) { $button_attributes['download'] = null; } if ( ! empty( $attributes['id'] ) ) { $button_attributes['id'] = $attributes['id']; } if ( ! empty( $attributes['title'] ) ) { $button_attributes['title'] = $attributes['title']; } if ( ! empty( $attributes['rel'] ) ) { if ( isset( $button_attributes['rel'] ) ) { $button_attributes['rel'] .= " $attributes[rel]"; } else { $button_attributes['rel'] = $attributes['rel']; } } $icon_image_url = ''; if ( ! empty( $instance['button_icon']['icon'] ) ) { $attachment = wp_get_attachment_image_src( $instance['button_icon']['icon'] ); if ( ! empty( $attachment ) ) { $icon_image_url = $attachment[0]; } } return array( 'button_attributes' => apply_filters( 'siteorigin_widgets_button_attributes', $button_attributes, $instance ), 'href' => ! empty( $instance['url'] ) ? $instance['url'] : '', 'on_click' => ! empty( $attributes['on_click'] ) ? $attributes['on_click'] : '', 'align' => $instance['design']['align'], 'icon_image_url' => $icon_image_url, 'icon' => $instance['button_icon']['icon_selected'], 'icon_color' => $instance['button_icon']['icon_color'], 'text' => $instance['text'], ); } /** * Get the variables that we'll be injecting into the less stylesheet. * * @return array */ public function get_less_variables( $instance ) { if ( empty( $instance ) || empty( $instance['design'] ) ) { return array(); } $text_color = isset( $instance['design']['text_color'] ) ? $instance['design']['text_color'] : ''; $button_color = isset( $instance['design']['button_color'] ) ? $instance['design']['button_color'] : ''; $less_vars = array( 'button_width' => isset( $instance['design']['width'] ) ? $instance['design']['width'] : '', 'button_color' => $button_color, 'text_color' => $text_color, 'icon_size' => ! empty( $instance['design']['icon_size'] ) ? $instance['design']['icon_size'] : '1.3em', 'hover_text_color' => ! empty( $instance['design']['hover_text_color'] ) ? $instance['design']['hover_text_color'] : $text_color, 'hover_background_color' => ! empty( $instance['design']['hover_background_color'] ) ? $instance['design']['hover_background_color'] : $button_color, 'font_size' => isset( $instance['design']['font_size'] ) ? $instance['design']['font_size'] : '', 'rounding' => isset( $instance['design']['rounding'] ) ? $instance['design']['rounding'] : '', 'padding' => isset( $instance['design']['padding'] ) ? $instance['design']['padding'] : '', 'has_text' => empty( $instance['text'] ) ? 'false' : 'true', 'responsive_breakpoint' => $this->get_global_settings( 'responsive_breakpoint' ), 'align' => ! empty( $instance['design']['align'] ) ? $instance['design']['align'] : 'center', 'mobile_align' => ! empty( $instance['design']['mobile_align'] ) ? $instance['design']['mobile_align'] : 'center', 'has_button_icon' => empty( $instance['button_icon']['icon_selected'] ) ? 'false' : 'true', ); if ( ! empty( $instance['design']['font'] ) ) { $font = siteorigin_widget_get_font( $instance['design']['font'] ); $less_vars['button_font'] = $font['family']; if ( ! empty( $font['weight'] ) ) { $less_vars['button_font_weight'] = $font['weight_raw']; $less_vars['button_font_style'] = $font['style']; } } return $less_vars; } /** * Make sure the instance is the most up to date version. * * @return mixed */ public function modify_instance( $instance ) { if ( empty( $instance ) ) { return array(); } $migrate_props = array( 'button_icon' => array( 'icon_selected', 'icon_color', 'icon', ), 'design' => array( 'align', 'theme', 'button_color', 'text_color', 'hover', 'hover_text_color', 'hover_background_color', 'font_size', 'rounding', 'padding', ), 'attributes' => array( 'id', ), ); foreach ( $migrate_props as $prop => $sub_props ) { if ( empty( $instance[ $prop ] ) ) { $instance[ $prop ] = array(); foreach ( $sub_props as $sub_prop ) { if ( isset( $instance[ $sub_prop ] ) ) { $instance[ $prop ][ $sub_prop ] = $instance[ $sub_prop ]; unset( $instance[ $sub_prop ] ); } } } } // Migrate onclick setting to prevent Wordfence flag. if ( ! empty( $instance['attributes'] ) && ! empty( $instance['attributes']['onclick'] ) ) { $instance['attributes']['on_click'] = $instance['attributes']['onclick']; } // If the mobile_align setting isn't set, set it to the same value as the align value. if ( ! empty( $instance['design'] ) && ! empty( $instance['design']['align'] ) && empty( $instance['design']['mobile_align'] ) ) { $instance['design']['mobile_align'] = $instance['design']['align']; } // Migrate predefined settings to more customizable settings. if ( ! empty( $instance['design']['font_size'] ) && is_numeric( $instance['design']['font_size'] ) ) { $instance['design']['font_size'] .= 'em'; } if ( ! empty( $instance['design']['padding'] ) && is_numeric( $instance['design']['padding'] ) ) { $instance['design']['padding'] .= 'em'; } if ( ! empty( $instance['design']['rounding'] ) && is_numeric( $instance['design']['rounding'] ) ) { $instance['design']['rounding'] = $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em ' . $instance['design']['rounding'] . 'em'; } if ( empty( $instance['design']['icon_size'] ) ) { $instance['design']['icon_size'] = '1.3em'; } return $instance; } public function get_form_teaser() { if ( class_exists( 'SiteOrigin_Premium' ) ) { return false; } return array( sprintf( __( 'Add a beautiful tooltip to the Button Widget with %sSiteOrigin Premium%s', 'so-widgets-bundle' ), '', '' ), ); } } siteorigin_widget_register( 'sow-button', __FILE__, 'SiteOrigin_Widget_Button_Widget' );{"id":141222,"date":"2026-06-12T08:07:31","date_gmt":"2026-06-12T08:07:31","guid":{"rendered":"https:\/\/klecet.edu.in\/alumni\/?p=141222"},"modified":"2026-06-12T08:07:31","modified_gmt":"2026-06-12T08:07:31","slug":"gotowy-na-autentyczne-wygrane-przystap-do-bruno-casino-w-polsce-juz-teraz","status":"publish","type":"post","link":"http:\/\/klecet.edu.in\/alumni\/gotowy-na-autentyczne-wygrane-przystap-do-bruno-casino-w-polsce-juz-teraz\/","title":{"rendered":"Gotowy na Autentyczne Wygrane? Przyst\u0105p do Bruno Casino w Polsce Ju\u017c Teraz"},"content":{"rendered":"
\n

Szukasz kasyna online, kt\u00f3re jest solidne i naprawd\u0119 anga\u017cuj\u0105ce? Bruno Casino to nie kolejna anonimowa platforma https:\/\/brunospassky.com\/pl-pl\/<\/a>. To marka z w\u0142asnym stylem, nawi\u0105zuj\u0105ca do szachowego mistrzostwa, kt\u00f3ra w Polsce stawia na transparentno\u015b\u0107 i dobre emocje. Jej oferta jest dobrze skonstruowana, skierowana do graczy ceni\u0105cych zar\u00f3wno sprawdzone tytu\u0142y, jak i \u015bwie\u017ce tytu\u0142y. Platforma nie chce by\u0107 dla ka\u017cdego. Skupia si\u0119 na wysokiej jako\u015bci rozrywce w pewnym otoczeniu. Takie podej\u015bcie do tematu \u015bwiadczy o dojrza\u0142o\u015bci i zrozumieniu, czego szukaj\u0105 lokalni gracze. Poni\u017cej analizuj\u0119, co Bruno Casino konkretnie proponuje polskim u\u017cytkownikom i dlaczego mo\u017ce by\u0107 interesuj\u0105c\u0105 alternatyw\u0105 dla os\u00f3b my\u015bl\u0105cych o grze na realne pieni\u0105dze.<\/p>\n

Dlaczego Bruno Casino Odr\u00f3\u017cnia si\u0119 na Polskim Rynku hazardowym?<\/h2>\n

Polscy gracze maj\u0105 wysokie wymagania i coraz lepiej zorientowani. Bruno Casino wyr\u00f3\u017cnia si\u0119 od konkurencji sp\u00f3jnym wizerunkiem i tematyk\u0105 opart\u0105 na my\u015bleniu strategicznym. To wyj\u0105tek w bran\u017cy, gdzie zazwyczaj kr\u00f3luje samo szcz\u0119\u015bcie. Tego rodzaju podej\u015bcie tworzy okre\u015blon\u0105 narracj\u0119 dooko\u0142a marki. Operator ma licencj\u0119 Curacao, co zapewnia ramy prawne dzia\u0142ania. Rzeczywistym sprawdzianem jest jednak przystosowanie do polskich reali\u00f3w. I tu obserwujemy obs\u0142ug\u0119 z\u0142ot\u00f3wek, w j\u0119zyku polskim pomoc klienta oraz uwzgl\u0119dnienie lokalnych metod p\u0142atno\u015bci. To nie stanowi globalny moloch, ale marka, kt\u00f3ra zdaje si\u0119 rozumie\u0107 charakter naszego rynku. Strategiczny brak od razu zalewu bonusami dla ka\u017cdego te\u017c o czym\u015b wskazuje. Bruno Casino stawia na jako\u015b\u0107 i wi\u0119\u017a z graczem, a nie tylko na \u0142atwy zysk.<\/p>\n

Szybkie i Dogodne Metody P\u0142atno\u015bci w PLN<\/h2>\n

Regulowanie w z\u0142ot\u00f3wkach bez dodatkowych przelicznik\u00f3w to fundament. Bruno Casino oferuje standardowy pakiet sposob\u00f3w wp\u0142aty i wyp\u0142aty dopasowany do polskiego gracza. Do najbardziej ekspresowych i najcz\u0119\u015bciej wybieranych opcji nale\u017c\u0105:<\/p>\n

    \n
  1. Natychmiastowe przelewy online (jak Przelewy24, PayU).<\/li>\n
  2. Karty p\u0142atnicze Visa i Mastercard.<\/li>\n
  3. Portmonetki elektroniczne, na przyk\u0142ad Skrill czy Neteller.<\/li>\n<\/ol>\n

    Wyp\u0142aty s\u0105 realizowane w przyzwoitym okresie, przewa\u017cnie do 48 godzin na metody elektroniczne. To umieszcza operatora w gronie lider\u00f3w pod wzgl\u0119dem tempa rozlicze\u0144. Kolejny plus to brak koszt\u00f3w po stronie kasyna za standardowe transakcje. Najni\u017csze kwoty depozyt\u00f3w i wyp\u0142at s\u0105 okre\u015blone na niskim pu\u0142apie. Daje mo\u017cliwo\u015b\u0107 to zar\u00f3wno na pocz\u0105tkowe testy, jak i na powa\u017cniejsz\u0105 gr\u0119.<\/p>\n

    Do\u015bwiadczenie Mobilne: Rozrywka w Zasi\u0119gu Palca<\/h2>\n

    Dost\u0119p z telefonu to teraz wym\u00f3g. Bruno Casino nie wymaga \u015bci\u0105gania osobnej aplikacji, co ma swoje plusy \u2013 nie zajmuje pami\u0119ci w sprz\u0119cie. Elastyczna wersja strony internetowej doskonale dopasowuje si\u0119 do ekranu urz\u0105dzenia lub tabletu. Uk\u0142ad jest przejrzysty, a obs\u0142uga intuicyjna. Wszystkie dost\u0119pne gry obecne na komputerze funkcjonuj\u0105 te\u017c w wersji mobilnej dzi\u0119ki technologii HTML5. Dotyczy to r\u00f3wnie\u017c gier na \u017cywo z krupierami, kt\u00f3re s\u0105 nadawane w dobrej jako\u015bci bez przerw. Do\u015bwiadczenie jest konsekwentne i pe\u0142ne. Mo\u017cesz kontynuowa\u0107 gr\u0119 w wybranym miejscu, bez ograniczenia dost\u0119pu do jakichkolwiek funkcji.<\/p>\n

    Kompletna Oferta Gier: Od Automat\u00f3w po Live Casino<\/h2>\n

    Zbi\u00f3r gier to kluczowa cz\u0119\u015b\u0107 wszelkiego kasyna online. Bruno Casino oferuje du\u017cy wyb\u00f3r tytu\u0142\u00f3w od cenionych dostawc\u00f3w, w tym NetEnt, Pragmatic Play, Play\u2019n GO i Evolution Gaming. To zapewnia r\u00f3\u017cnorodno\u015b\u0107, ale te\u017c przekonanie co do jako\u015bci oprogramowania, sprawiedliwo\u015bci rozgrywki (RNG) i innowacyjnych funkcji. Cz\u0119\u015b\u0107 automat\u00f3w jest rozleg\u0142a, od tradycyjnych \u201eowoc\u00f3wek\u201d po wsp\u00f3\u0142czesne sloty video z bogatymi fabu\u0142ami i bonusami. Live casino to dodatkowy mocny punkt. Evolution i Pragmatic Play Live dostarczaj\u0105 realne do\u015bwiadczenie z rzeczywistymi krupierami. Mo\u017cliwe jest zagra\u0107 w blackjacka, ruletk\u0119, baccarat czy miejscowe warianty, wszystko na \u017cywo. Zabrak\u0142o mo\u017ce paru niszowych producent\u00f3w, ale globalny wyb\u00f3r zaspokoi potrzeby wielu graczy.<\/p>\n

    Zabezpieczenia, Uprawnienia i Bezpiecze\u0144stwo Gracza<\/h2>\n

    Bezpiecze\u0144stwo to kwestia pierwszorz\u0119dnej wagi. Bruno Casino dzia\u0142a pod licencj\u0105 rz\u0105du Curacao, co jest standardowym wymogiem gwarantuj\u0105cym nadz\u00f3r. Wa\u017cne jest jednak, jak platforma wype\u0142nia te ramy. Strona wykorzystuje zaawansowanego szyfrowania SSL do ochrony danych osobowych i transakcji. Oprogramowanie dostawc\u00f3w gier przechodzi regularne audyty kontroluj\u0105ce losowo\u015b\u0107 wynik\u00f3w. Jako gracz dysponuj\u0119 te\u017c do wykorzystania narz\u0119dzia do samokontroli. Potrafi\u0119 ustawi\u0107 limity depozyt\u00f3w, strat czy czasu gry, a tak\u017ce zastosowa\u0107 z samowykluczenia. To dowodzi, \u017ce kasino ujmuje bezpiecze\u0144stwo nie tylko jako prawny obowi\u0105zek, ale te\u017c jako etyczny element swojej us\u0142ugi. W Polsce, gdzie zwi\u0119ksza si\u0119 \u015bwiadomo\u015b\u0107 odpowiedzialnej gry, takie funkcje s\u0105 absolutnie konieczne.<\/p>\n

    Bonus Powitalny i Regularne Promocje dla Polskich Graczy<\/h2>\n

    Dodatki to zazwyczaj pierwsza rzecz, na kt\u00f3ry patrz\u0105 u\u017cytkownicy. Bruno Casino oferuje ofert\u0119 powitaln\u0105 podzielony na wiele startowych depozyt\u00f3w. To standardowe, ale rozs\u0105dne metoda, kt\u00f3re umo\u017cliwia bez po\u015bpiechu pozna\u0107 serwis. Wymagania obrotu (wagering) s\u0105 wyra\u017anie okre\u015blone, co jest wa\u017cne dla przemy\u015blanej zabawy. Ponad startow\u0105 ofert\u0105, stali u\u017cytkownicy mog\u0105 oczekiwa\u0107 na dodatkowe bonusy.<\/p>\n