1<!DOCTYPE html> 2<html> 3<head> 4 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover'"> 7 <title>Digital Security | PSafe</title> 8 <link rel="profile" href="http://gmpg.org/xfn/11"> 9 <link rel="pingback" href="https://www.psafe.com/xmlrpc.php"> 10 11 <!-- style for the sitewide notice area --> 12 <style> 13 .site-notice {padding:15px 0; text-align:center; display:none;} 14 .site-notice.callout {border-radius:0; margin:0; border:none;} 15 .site-notice button {padding: 0;} 16 .site-notice .close-button {top: 50%;transform: translateY(-50%);color: #ffffff;background-color: transparent;border: none;} 17 .site-notice a,.site-notice a:visited,.site-notice a:active,.site-notice a:hover,.site-notice a:focus {color: #ffffff;text-decoration: underline;} 18 </style> 19 20<meta name='robots' content='max-image-preview:large' /> 21<link rel="alternate" hreflang="en" href="https://www.psafe.com/digital-security/" /> 22<link rel="alternate" hreflang="x-default" href="https://www.psafe.com/digital-security/" /> 23<link rel='dns-prefetch' href='//kit.fontawesome.com' /> 24<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 25<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.psafe.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.psafe.com%2Fdigital-security%2F" /> 26<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.psafe.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.psafe.com%2Fdigital-security%2F&format=xml" /> 27<style id="wp-img-auto-sizes-contain-inline-css"> 28img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 29/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 30</style> 31<style id="wp-emoji-styles-inline-css"> 32 33 img.wp-smiley, img.emoji { 34 display: inline !important; 35 border: none !important; 36 box-shadow: none !important; 37 height: 1em !important; 38 width: 1em !important; 39 margin: 0 0.07em !important; 40 vertical-align: -0.1em !important; 41 background: none !important; 42 padding: 0 !important; 43 } 44/*# sourceURL=wp-emoji-styles-inline-css */ 45</style> 46<style id="wp-block-library-inline-css"> 47:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
47--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-color]){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 48 49/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 50</style> 51<style id="classic-theme-styles-inline-css"> 52/*! This file is auto-generated */ 53.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 54/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 55</style> 56 57<style id="font-awesome-svg-styles-default-inline-css"> 58.svg-inline--fa { 59 display: inline-block; 60 height: 1em; 61 overflow: visible; 62 vertical-align: -.125em; 63} 64/*# sourceURL=font-awesome-svg-styles-default-inline-css */ 65</style> 66<link rel='stylesheet' id='font-awesome-svg-styles-css' href='https://www.psafe.com/wp-content/uploads/font-awesome/v5.15.4/css/svg-with-js.css' media='all' /> 67<style id="font-awesome-svg-styles-inline-css"> 68 .wp-block-font-awesome-icon svg::before, 69 .wp-rich-text-font-awesome-icon svg::before {content: unset;} 70/*# sourceURL=font-awesome-svg-styles-inline-css */ 71</style> 72<style id="global-styles-inline-css"> 73:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
730) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
73.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 74/*# sourceURL=global-styles-inline-css */ 75</style> 76 77<link rel='stylesheet' id='cookie-law-info-css' href='https://www.psafe.com/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-public.css' media='all' /> 78<link rel='stylesheet' id='cookie-law-info-gdpr-css' href='https://www.psafe.com/wp-content/plugins/cookie-law-info/legacy/public/css/cookie-law-info-gdpr.css' media='all' /> 79<link rel='stylesheet' id='menu-image-css' href='https://www.psafe.com/wp-content/plugins/menu-image/includes/css/menu-image.css' media='all' /> 80<link rel='stylesheet' id='dashicons-css' href='https://www.psafe.com/wp-includes/css/dashicons.min.css' media='all' /> 81<link rel='stylesheet' id='bodhi-svgs-attachment-css' href='https://www.psafe.com/wp-content/plugins/svg-support/css/svgs-attachment.css' media='all' /> 82<link rel='stylesheet' id='taxonomy-image-plugin-public-css' href='https://www.psafe.com/wp-content/plugins/taxonomy-images/css/style.css' media='screen' /> 83<link rel='stylesheet' id='googlefont-montserrat-css' href='https://fonts.googleapis.com/css?family=Montserrat%3A300%2C300i%2C400%2C400i%2C600%2C600i%2C700%2C700i' media='all' /> 84<link rel='stylesheet' id='foundation-css' href='https://www.psafe.com/wp-content/themes/tonykuehn/assets/foundation/css/foundation.min.css' media='all' /> 85<link rel='stylesheet' id='fontawesome-css-css' href='https://www.psafe.com/wp-content/themes/tonykuehn/assets/fontawesome/css/fontawesome-all.min.css' media='all' /> 86<link rel='stylesheet' id='cardslider.css-css' href='https://www.psafe.com/wp-content/themes/tonykuehn/assets/card_slider/css/cardslider.css' media='all' /> 87<link rel='stylesheet' id='slick.css-css' href='https://www.psafe.com/wp-content/themes/tonykuehn/assets/slick/slick.css' media='all' /> 88<link rel='stylesheet' id='slick-theme.css-css' href='https://www.psafe.com/wp-content/themes/tonykuehn/assets/slick/slick-theme.css' media='all' /> 89<link rel='stylesheet' id='tonykuehn-style-css' href='https://www.psafe.com/wp-content/themes/tonykuehn/style.css' media='all' />
90<script defer crossorigin="anonymous" id="font-awesome-official-js" src="https://kit.fontawesome.com/e31b56ef8f.js"></script>
vendor: 1 bytes, line 90
90
91<script id="jquery-core-js" src="https://www.psafe.com/wp-includes/js/jquery/jquery.min.js"></script>
vendor: 1 bytes, line 91
91
92<script id="jquery-migrate-js" src="https://www.psafe.com/wp-includes/js/jquery/jquery-migrate.min.js"></script>
vendor: 1 bytes, line 92
92
93<script id="cookie-law-info-js-extra"> 94var Cli_Data = {"nn_cookie_ids":[],"cookielist":[],"non_necessary_cookies":[],"ccpaEnabled":"","ccpaRegionBased":"","ccpaBarEnabled":"1","strictlyEnabled":["necessary","obligatoire"],"ccpaType":"gdpr","js_blocking":"","custom_integration":"","triggerDomRefresh":"","secure_cookies":""}; 95var cli_cookiebar_settings = {"animate_speed_hide":"500","animate_speed_show":"500","background":"#FFF","border":"#b1a6a6c2","border_on":"","button_1_button_colour":"#000","button_1_button_hover":"#000000","button_1_link_colour":"#fff","button_1_as_button":"1","button_1_new_win":"","button_2_button_colour":"#333","button_2_button_hover":"#292929","button_2_link_colour":"#444","button_2_as_button":"","button_2_hidebar":"","button_3_button_colour":"#000","button_3_button_hover":"#000000","button_3_link_colour":"#fff","button_3_as_button":"1","button_3_new_win":"","button_4_button_colour":"#000","button_4_button_hover":"#000000","button_4_link_colour":"#62a329","button_4_as_button":"","button_7_button_colour":"#61a229","button_7_button_hover":"#4e8221","button_7_link_colour":"#fff","button_7_as_button":"1","button_7_new_win":"","font_family":"inherit","header_fix":"1","notify_animate_hide":"1","notify_animate_show":"","notify_div_id":"#cookie-law-info-bar","notify_position_horizontal":"left","notify_position_vertical":"bottom","scroll_close":"","scroll_close_reload":"","accept_close_reload":"","reject_close_reload":"","showagain_tab":"","showagain_background":"#fff","showagain_border":"#000","showagain_div_id":"#cookie-law-info-again","showagain_x_position":"100px","text":"#000","show_once_yn":"","show_once":"10000","logging_on":"","as_popup":"","popup_overlay":"1","bar_heading_text":"","cookie_bar_as":"banner","popup_showagain_position":"bottom-right","widget_position":"left"}; 96var log_object = {"ajax_url":"https://www.psafe.com/wp-admin/admin-ajax.php"}; 97//# sourceURL=cookie-law-info-js-extra 98</script>
vendor: 1 bytes, line 98
98
99<script id="cookie-law-info-js" src="https://www.psafe.com/wp-content/plugins/cookie-law-info/legacy/public/js/cookie-law-info-public.js"></script>
99 100<link rel="https://api.w.org/" href="https://www.psafe.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.psafe.com/wp-json/wp/v2/pages/10100" /><meta name="generator" content="WPML ver:4.9.6 stt:1,43,2;" /> 101<link rel="icon" href="https://www.psafe.com/wp-content/uploads/2018/12/cropped-psafe_thumbnail-2-32x32.png" sizes="32x32" /> 102<link rel="icon" href="https://www.psafe.com/wp-content/uploads/2018/12/cropped-psafe_thumbnail-2-192x192.png" sizes="192x192" /> 103<link rel="apple-touch-icon" href="https://www.psafe.com/wp-content/uploads/2018/12/cropped-psafe_thumbnail-2-180x180.png" /> 104<meta name="msapplication-TileImage" content="https://www.psafe.com/wp-content/uploads/2018/12/cropped-psafe_thumbnail-2-270x270.png" /> 105<style id="wp-custom-css"> 106.vertical-sub-menu ul li.right:hover > ul, .vertical-sub-menu ul li.right.open > ul { 107 right: auto; 108 left: auto; 109} 110.vertical-sub-menu ul li.right ul { 111 right: 999em; 112 left: auto; 113} 114.reference li::marker { 115 color: #440bbd; 116} 117 118article#gform_widget-2 > * { 119 display: none; 120} 121 122article#gform_widget-2:after { 123 content:url(https://www.psafe.com/wp-content/uploads/2018/12/psafe_vertical.svg); 124 width: 100px; 125 display: block; 126} 127 128.sec-form input#gform_submit_button_16, 129input[type="submit"] { 130 border-radius: 50px; 131} 132 133header .cell.auto.verticals, 134.sec-form h2.gform_title, 135.gform_title{ 136 display: none; 137} 138 139.enterprise { display: none; } 140.parent-pageid-6620 .enterprise { display:inline; } 141.parent-pageid-6620 .priv { display:none; } 142.site-badge { 143 display: flex; 144 justify-content: flex-end; 145} 146 147.cc-window { 148 display: none !important; 149} 150.page-id-6433 .news > div > .article:nth-child(1) .article-img, 151.page-id-6433 .news > div > .article:nth-child(2) .article-img{ 152 background-size: contain !important; 153} 154 155.page-id-9020 footer { 156 display: none !important; 157} 158.page-id-9035 footer { 159 display: none !important; 160} 161.page-id-9053 footer { 162 display: none !important; 163} 164.page-id-9069 footer { 165 display: none !important; 166} 167.page-id-9096 footer { 168 display: none !important; 169} 170.page-id-9113 footer { 171 display: none !important; 172} 173 174.page-id-9020 .site-footer { 175 display: none !important; 176} 177 178.page-id-9035 .site-footer { 179 display: none !important; 180} 181 182.page-id-9053 .site-footer { 183 display: none !important; 184} 185 186.page-id-9069 .site-footer { 187 display: none !important; 188} 189 190.page-id-9096 .site-footer { 191 display: none !important; 192} 193 194.page-id-9113 .site-footer { 195 display: none !important; 196} 197 198</style> 199 200 201
202<script type="text/javascript"> 203(function() { 204 var ua = navigator.userAgent; 205 // We check for "Dalvik" which is unique to the Android app environment 206 if (ua.indexOf("Dalvik") !== -1) { 207 var style = document.createElement('style'); 208 style.innerHTML = '.site-notice { display: none !important; }'; 209 document.head.appendChild(style); 210 } 211})(); 212</script>
212 213 214</head> 215 216<body class="wp-singular page-template-default page page-id-10100 page-parent wp-theme-tonykuehn group-blog"> 217 218 219 <!-- Sitewide Notice bar --> 220 <div id="20231211" class="callout site-notice" style="background-color:#6100ff;" data-toggler=".hide"><div class="grid-container"><div class="grid-x align-center"><div class="cell small-11 large-12"><span style="color:#ffffff;"><strong>ð¡ dfndr security keeps your phone 100% clean!</strong> <a href="https://play.google.com/store/apps/details?id=com.psafe.msuite"> Download it for free</a>.</span></div></div></div><button class="close-button" aria-label="Dismiss alert" type="button"><span aria-hidden="true">×</span></button></div> 221 <div id="page" class="hfeed site"> 222 <a class="skip-link screen-reader-text" href="#content">Skip to content</a> 223 224 <div class="header-wrapper" data-sticky-container> 225 <header class="site-header" role="banner" data-sticky data-sticky-on="small" data-options="marginTop:0;" style="width:100%;"> 226 <div class="header-bkgnd"></div> 227 <div class="grid-container"> 228 <div id="masthead" class="grid-x small-padding-collapse medium-padding-x align-middle"> 229 230 <div class="cell shrink header-branding"> 231 <div class="site-branding standard-logo"> 232 <a href="https://www.psafe.com/" title="PSafe" rel="home"> 233 <img class="style-svg header-main-logo" loading="eager" src="https://www.psafe.com/wp-content/uploads/2018/08/psafe_hoizontal_shield.svg" alt="" /> 234 </a> 235 </div><!-- .site-branding --> 236 </div> 237 238 239 <div class="cell auto site-menu"> 240 <div class="menu-main-container"><ul id="menu-main" class="main-menu"><li id="menu-item-10621" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-10621 active"><a href="https://www.psafe.com/digital-security/" aria-current="page">Digital Security</a></li> 241<li id="menu-item-1321" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-1321"><a href="https://www.psafe.com/dfndr/">Products and Services</a> 242<ul class="sub-menu"> 243 <li id="menu-item-9255" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9255"><a href="https://www.psafe.com/dfndr-security/"><strong>dfndr</strong> security</a></li> 244 <li id="menu-item-9412" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9412"><a href="https://www.psafe.com/dfndr-lab"><strong>dfndr</strong> lab</a></li> 245</ul> 246</li> 247<li id="menu-item-9274" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9274"><a href="https://cyberlabs.ai/en">CyberLabs Group</a></li> 248<li id="menu-item-1331" class="right menu-item menu-item-type-custom menu-item-object-custom menu-item-1331"><a href="/en/blog/">Blog</a></li> 249</ul></div> </div> 250 251 <div class="cell shrink menu-toggle"> 252 <i class="fas fa-bars" style="font-size: 22px;"></i> 253 <i class="far fa-times hide" style="font-size: 22px;"></i> 254 </div> 255 256 <div class="cell shrink lang-switcher main"> 257 <div class="lang-switcher"></div> </div> 258 </div> 259 </div> 260 <div class="cell auto site-menu-dropdown"> 261 <div class="menu-main-mobile-container"><ul id="menu-main-mobile" class="dropdown-menu"><li id="menu-item-10622" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-10622 active"><a href="https://www.psafe.com/digital-security/" aria-current="page">Digital Security</a></li> 262<li id="menu-item-8043" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-8043"><a href="https://www.psafe.com/dfndr/">Products and Services</a> 263<ul class="sub-menu"> 264 <li id="menu-item-9264" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9264"><a href="https://www.psafe.com/dfndr-security/"><strong>dfndr</strong> security</a></li> 265 <li id="menu-item-9413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9413"><a href="https://www.psafe.com/dfndr-lab"><strong>dfndr</strong> lab</a></li> 266</ul> 267</li> 268<li id="menu-item-9285" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9285"><a href="https://cyberlabs.ai">CyberLabs Group</a></li> 269<li id="menu-item-8055" class="right menu-item menu-item-type-custom menu-item-object-custom menu-item-8055"><a href="https://www.psafe.com/blog">Blog</a></li> 270</ul></div><div class="lang-switcher drop"></div>
270 </div> 271 </header><!-- #masthead --> 272 </div> 273 274 <div id="content" class="site-content"> 275 276 <div id="primary" class="content-area"> 277 <main id="main" class="site-main" role="main"> 278 279 280 281 282<article id="post-10100" class="post-10100 page type-page status-publish hentry"> 283 <div class="grid-container"> 284 <div class="grid-x"> 285 <div class="cell small-12"> 286 <div class="page-header"> 287 <h1 class="entry-title">Digital Security</h1> </div><!-- .entry-header --> 288 </div> 289 </div> 290 </div> 291 292 <div class="entry-content"> 293 294<p><style> 295/* Hides the pageâs automatic title in case it appears twice */ 296.entry-title, 297.wp-block-post-title { 298 display: none !important; 299} 300 301.psafe-hero-section { 302max-width: 1180px; 303margin: -80px auto 0; 304padding: 0 24px 10px; 305font-family: inherit; 306} 307 308.psafe-hero-grid { 309display: grid; 310grid-template-columns: 1fr 1fr; 311align-items: center; 312gap: 50px; 313} 314 315.psafe-hero-content h1 { 316font-size: clamp(42px, 5vw, 64px); 317line-height: 1; 318margin: 0 0 18px; 319color: #4b13d1; 320font-weight: 800; 321letter-spacing: -1.5px; 322} 323 324.psafe-hero-content p { 325font-size: 16px; 326line-height: 1.55; 327color: #3f3448; 328max-width: 520px; 329margin: 0 0 24px; 330} 331 332.psafe-hero-buttons { 333display: flex; 334gap: 16px; 335flex-wrap: wrap; 336} 337 338.psafe-btn { 339display: inline-flex; 340align-items: center; 341justify-content: center; 342padding: 13px 24px; 343border-radius: 8px; 344font-size: 14px; 345font-weight: 700; 346text-decoration: none; 347transition: all 0.2s ease; 348} 349 350.psafe-btn-primary { 351background: #4b13d1; 352color: #ffffff !important; 353box-shadow: 0 10px 24px rgba(75, 19, 209, 0.22); 354} 355 356.psafe-btn-primary:hover { 357background: #3508a8; 358transform: translateY(-2px); 359} 360 361.psafe-btn-secondary { 362background: #ffffff; 363color: #4b13d1 !important; 364border: 2px solid #4b13d1; 365} 366 367.psafe-btn-secondary:hover { 368background: #f4efff; 369transform: translateY(-2px); 370} 371 372.psafe-hero-image { 373display: flex; 374justify-content: center; 375align-items: center; 376} 377 378.psafe-hero-image img { 379width: 100%; 380max-width: 470px; 381height: auto; 382display: block; 383} 384 385@media (max-width: 768px) { 386.psafe-hero-section { 387padding: 35px 20px 45px; 388} 389 390.psafe-hero-grid { 391grid-template-columns: 1fr; 392gap: 30px; 393} 394 395.psafe-hero-content h1 { 396font-size: 42px; 397} 398 399.psafe-hero-image { 400justify-content: flex-start; 401} 402 403.psafe-hero-image img { 404max-width: 360px; 405} 406} </style></p> 407 408<section class="psafe-hero-section"> 409<div class="psafe-hero-grid"> 410<div class="psafe-hero-content"> 411<h1>Digital Security</h1> 412<p>Guides, tips, and tools to protect your phone, personal data, and accounts from online scams, suspicious links, data breaches, and other digital threats.</p> 413<div class="psafe-hero-buttons"><a class="psafe-btn psafe-btn-primary" href="https://utm-psafe.vercel.app/r/ue0Ut8"> Download dfndr Security </a> <a class="psafe-btn psafe-btn-secondary" href="#guias"> Explore Guides </a></div> 414</div> 415<div class="psafe-hero-image"><img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/07/ChatGPT-Image-8-de-jul.-de-2026-15_27_16.png" alt="Phone protected by dfndr Security"></div> 416</div> 417</section> 418 419 420 421<style> 422.psafe-topics-section { 423 max-width: 1180px; 424 margin: 0 auto; 425 padding: 10px 24px 45px; 426 font-family: inherit; 427} 428 429.psafe-topics-title { 430 font-size: 22px; 431 line-height: 1.25; 432 margin: 0 0 18px; 433 color: #21152f; 434 font-weight: 800; 435 letter-spacing: -0.3px; 436} 437 438.psafe-topics-grid { 439 display: grid; 440 grid-template-columns: repeat(8, 1fr); 441 gap: 12px; 442} 443 444.psafe-topic-card { 445 min-height: 150px; 446 padding: 22px 12px 18px; 447 border: 1px solid #ece7f7; 448 border-radius: 12px; 449 background: #ffffff; 450 text-align: center; 451 text-decoration: none; 452 color: #21152f; 453 box-shadow: 0 8px 22px rgba(42, 22, 80, 0.035); 454 transition: all 0.22s ease; 455 display: flex; 456 flex-direction: column; 457 align-items: center; 458 justify-content: flex-start; 459} 460 461.psafe-topic-card:hover { 462 transform: translateY(-4px); 463 border-color: #d8c8ff; 464 box-shadow: 0 16px 34px rgba(75, 19, 209, 0.10); 465} 466 467.psafe-topic-icon { 468 width: 38px; 469 height: 38px; 470 margin-bottom: 12px; 471 color: #4b13d1; 472 display: flex; 473 align-items: center; 474 justify-content: center; 475} 476 477.psafe-topic-icon svg { 478 width: 34px; 479 height: 34px; 480 stroke: #4b13d1; 481 fill: none; 482 stroke-width: 2.3; 483 stroke-linecap: round; 484 stroke-linejoin: round; 485} 486 487.psafe-topic-icon .filled { 488 fill: #4b13d1; 489 stroke: none; 490} 491 492.psafe-topic-card h3 { 493 font-size: 13.5px; 494 line-height: 1.2; 495 margin: 0 0 8px; 496 color: #21152f; 497 font-weight: 800; 498} 499 500.psafe-topic-card p { 501 font-size: 12px; 502 line-height: 1.35; 503 margin: 0; 504 color: #4d4557; 505 max-width: 118px; 506} 507 508.psafe-topic-arrow { 509 margin-top: auto; 510 padding-top: 12px; 511 font-size: 18px; 512 line-height: 1; 513 color: #4b13d1; 514 font-weight: 800; 515 transition: transform 0.22s ease; 516} 517 518.psafe-topic-card:hover .psafe-topic-arrow { 519 transform: translateX(3px); 520} 521 522@media (max-width: 1100px) { 523 .psafe-topics-grid { 524 grid-template-columns: repeat(4, 1fr); 525 } 526 527 .psafe-topic-card { 528 min-height: 155px; 529 } 530} 531 532@media (max-width: 680px) { 533 .psafe-topics-section { 534 padding: 5px 20px 38px; 535 } 536 537 .psafe-topics-grid { 538 grid-template-columns: repeat(2, 1fr); 539 gap: 12px; 540 } 541 542 .psafe-topic-card { 543 min-height: 155px; 544 } 545} 546</style> 547 548<section class="psafe-topics-section"> 549 550 <h2 class="psafe-topics-title">Explore by topic</h2> 551 552 <div class="psafe-topics-grid"> 553 554 555 <!-- ONLINE SCAMS --> 556 <a class="psafe-topic-card" href="/digital-security/scams/"> 557 <div class="psafe-topic-icon" aria-hidden="true"> 558 <svg viewBox="0 0 24 24"> 559 <path d="M4 11h16"></path> 560 <path d="M6 11c.4-4 2.8-6 6-6s5.6 2 6 6"></path> 561 <path d="M7 11v4c0 2.8 2 5 5 5s5-2.2 5-5v-4"></path> 562 <path d="M9 15h2"></path> 563 <path d="M13 15h2"></path> 564 <path d="M10 18c1.2.8 2.8.8 4 0"></path> 565 </svg> 566 </div> 567 568 <h3>Online scams</h3> 569 570 <p> 571 Learn how to identify and avoid online scams. 572 </p> 573
574 <span class="psafe-topic-arrow">â</span> 575 </a> 576 577 578 <!-- SUSPICIOUS LINKS --> 579 <a class="psafe-topic-card" href="/digital-security/suspicious-links/"> 580 <div class="psafe-topic-icon" aria-hidden="true"> 581 <svg viewBox="0 0 24 24"> 582 <path d="M10 13a5 5 0 0 0 7.1 0l2-2a5 5 0 0 0-7.1-7.1l-1.1 1.1"></path> 583 <path d="M14 11a5 5 0 0 0-7.1 0l-2 2a5 5 0 0 0 7.1 7.1l1.1-1.1"></path> 584 </svg> 585 </div> 586 587 <h3>Suspicious links</h3> 588 589 <p> 590 Learn how to recognize suspicious and dangerous links. 591 </p> 592 593 <span class="psafe-topic-arrow">â</span> 594 </a> 595 596 597 <!-- PEER-TO-PEER PAYMENT SECURITY --> 598 <a class="psafe-topic-card" href="/digital-security/peer-to-peer-payments/"> 599 <div class="psafe-topic-icon" aria-hidden="true"> 600 <svg viewBox="0 0 24 24"> 601 <rect x="4" y="6" width="16" height="12" rx="2"></rect> 602 <path d="M4 10h16"></path> 603 <path d="M8 15h4"></path> 604 </svg> 605 </div> 606 607 <h3>Peer-to-peer payment security</h3> 608 609 <p> 610 Protect payment apps and reduce transfer scam risks. 611 </p> 612 613 <span class="psafe-topic-arrow">â</span> 614 </a> 615 616 617 <!-- DATA BREACHES --> 618 <a class="psafe-topic-card" href="/digital-security/data-breaches/"> 619 <div class="psafe-topic-icon" aria-hidden="true"> 620 <svg viewBox="0 0 24 24"> 621 <ellipse cx="12" cy="6" rx="7" ry="3"></ellipse> 622 <path d="M5 6v6c0 1.7 3.1 3 7 3s7-1.3 7-3V6"></path> 623 <path d="M5 12v6c0 1.7 3.1 3 7 3s7-1.3 7-3v-6"></path> 624 </svg> 625 </div> 626 627 <h3>Data breaches</h3> 628 629 <p> 630 Learn what to do if your personal data is exposed. 631 </p> 632 633 <span class="psafe-topic-arrow">â</span> 634 </a> 635 636 637 <!-- PUBLIC WI-FI --> 638 <a class="psafe-topic-card" href="/digital-security/public-wifi/"> 639 <div class="psafe-topic-icon" aria-hidden="true"> 640 <svg viewBox="0 0 24 24"> 641 <path d="M5 10.5a10 10 0 0 1 14 0"></path> 642 <path d="M8.5 14a5 5 0 0 1 7 0"></path> 643 <path d="M12 18h.01"></path> 644 <circle cx="12" cy="18" r="1.2" class="filled"></circle> 645 </svg> 646 </div> 647 648 <h3>Public Wi-Fi</h3> 649 650 <p> 651 Use public Wi-Fi networks more safely. 652 </p> 653 654 <span class="psafe-topic-arrow">â</span> 655 </a> 656 657 658 <!-- MALICIOUS APPS AND APK FILES --> 659 <a class="psafe-topic-card" href="/digital-security/apks/"> 660 <div class="psafe-topic-icon" aria-hidden="true"> 661 <svg viewBox="0 0 24 24"> 662 <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path> 663 <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path> 664 </svg> 665 </div> 666 667 <h3>Malicious apps and APK files</h3> 668 669 <p> 670 Learn how to identify risky apps and APK files. 671 </p> 672 673 <span class="psafe-topic-arrow">â</span> 674 </a> 675 676 677 <!-- ANTIVIRUS FOR ANDROID --> 678 <a class="psafe-topic-card" href="/digital-security/android-antivirus/"> 679 <div class="psafe-topic-icon" aria-hidden="true"> 680 <svg viewBox="0 0 24 24"> 681 <path d="M12 3l7 3v5c0 5-3 8.5-7 10-4-1.5-7-5-7-10V6l7-3z"></path> 682 <path d="M12 8v6"></path> 683 <path d="M9.5 11h5"></path> 684 </svg> 685 </div> 686 687 <h3>Antivirus for Android</h3> 688 689 <p> 690 Protect your Android phone from malware and other threats. 691 </p> 692 693 <span class="psafe-topic-arrow">â</span> 694 </a> 695 696 697 <!-- ANDROID PRIVACY --> 698 <a class="psafe-topic-card" href="/digital-security/privacy/"> 699 <div class="psafe-topic-icon" aria-hidden="true"> 700 <svg viewBox="0 0 24 24"> 701 <rect x="6" y="10" width="12" height="10" rx="2"></rect> 702 <path d="M8.5 10V7.5a3.5 3.5 0 0 1 7 0V10"></path> 703 <path d="M12 14v2"></path> 704 </svg> 705 </div> 706 707 <h3>Android privacy</h3> 708 709 <p> 710 Protect your personal data and privacy on Android. 711 </p> 712 713 <span class="psafe-topic-arrow">â</span> 714 </a> 715 716 717 </div> 718</section> 719 720 721 722<style> 723.psafe-guides-section { 724 max-width: 1180px; 725 margin: 0 auto; 726 padding: 8px 24px 45px; 727 font-family: inherit; 728 overflow: hidden; 729} 730 731.psafe-guides-header { 732 display: flex; 733 align-items: center; 734 justify-content: space-between; 735 gap: 16px; 736 margin-bottom: 18px; 737} 738 739.psafe-guides-title { 740 font-size: 22px; 741 line-height: 1.25; 742 margin: 0; 743 color: #21152f; 744 font-weight: 800; 745 letter-spacing: -0.3px; 746} 747 748 749/* ========================= 750 CAROUSEL 751========================= */ 752 753.psafe-guides-carousel { 754 position: relative; 755 width: 100%; 756 overflow: hidden; 757 padding: 5px 0 14px; 758} 759 760.psafe-guides-track { 761 display: flex; 762 width: max-content; 763 will-change: transform; 764 animation: psafeGuidesScroll 50s linear infinite; 765} 766 767.psafe-guides-group { 768 display: flex; 769 flex-shrink: 0; 770 gap: 20px; 771 padding-right: 20px; 772} 773 774@keyframes psafeGuidesScroll { 775 from { 776 transform: translateX(0); 777 } 778 779 to { 780 transform: translateX(-50%); 781 } 782} 783 784/* Pauses the carousel when the mouse hovers over it */ 785.psafe-guides-carousel:hover .psafe-guides-track, 786.psafe-guides-carousel:focus-within .psafe-guides-track { 787 animation-play-state: paused; 788} 789 790 791/* ========================= 792 CARDS 793========================= */ 794 795.psafe-guide-card { 796 width: 330px; 797 flex: 0 0 330px; 798 text-decoration: none; 799 color: #21152f; 800 display: block; 801 transition: 802 transform 0.22s ease, 803 opacity 0.22s ease; 804} 805 806.psafe-guide-card:hover { 807 transform: translateY(-4px); 808} 809 810.psafe-guide-image-placeholder { 811 width: 100%; 812 aspect-ratio: 16 / 9; 813 border-radius: 14px; 814 background: #f6f2ff; 815 border: 1px solid rgba(75, 19, 209, 0.14); 816 display: flex; 817 align-items: center; 818 justify-content: center; 819 color: #4b13d1; 820 font-size: 13px; 821 font-weight: 700; 822 margin-bottom: 12px; 823 overflow: hidden; 824 transition: 825 border-color 0.22s ease, 826 box-shadow 0.22s ease; 827} 828 829.psafe-guide-image-placeholder img { 830 width: 100%; 831 height: 100%; 832 display: block; 833 834 /* Displays the entire image without cropping */ 835 object-fit: contain; 836 object-position: center; 837 838 background: #f6f2ff; 839} 840 841.psafe-guide-card:hover .psafe-guide-image-placeholder { 842 border-color: rgba(75, 19, 209, 0.45); 843 box-shadow: 0 8px 22px rgba(75, 19, 209, 0.12); 844} 845 846.psafe-guide-card h3 { 847 font-size: 17px; 848 line-height: 1.2; 849 margin: 0 0 7px; 850 color: #21152f; 851 font-weight: 800; 852 letter-spacing: -0.2px; 853} 854 855.psafe-guide-card p { 856 font-size: 13.5px; 857 line-height: 1.45; 858 margin: 0; 859 color: #5d5367; 860} 861 862 863/* ========================= 864 FOOTER 865========================= */ 866 867.psafe-guides-footer { 868 text-align: center; 869 margin-top: 22px; 870} 871 872.psafe-guides-link { 873 color: #4b13d1; 874 font-size: 14px; 875 font-weight: 800; 876 text-decoration: underline; 877 text-underline-offset: 3px; 878} 879 880 881/* ========================= 882 RESPONSIVE 883========================= */ 884 885@media (max-width: 1100px) { 886 .psafe-guide-card { 887 width: 300px; 888 flex-basis: 300px; 889 } 890} 891 892@media (max-width: 680px) { 893 .psafe-guides-section { 894 padding: 5px 20px 38px; 895 } 896 897 .psafe-guides-group { 898 gap: 14px; 899 padding-right: 14px; 900 } 901 902 .psafe-guide-card { 903 width: 82vw; 904 max-width: 320px; 905 flex-basis: 82vw; 906 } 907 908 .psafe-guide-card h3 { 909 font-size: 16px; 910 } 911 912 .psafe-guide-card p { 913 font-size: 13px; 914 } 915 916 /* Slightly slower on mobile */ 917 .psafe-guides-track { 918 animation-duration: 50s; 919 } 920} 921 922 923/* Accessibility for users who disable animations */ 924@media (prefers-reduced-motion: reduce) { 925 .psafe-guides-carousel { 926 overflow-x: auto; 927 } 928 929 .psafe-guides-track { 930 animation: none; 931 } 932 933 .psafe-guides-group[aria-hidden="true"] { 934 display: none; 935 } 936} 937</style> 938 939 940<section class="psafe-guides-section" id="guides"> 941 942 <div class="psafe-guides-header"> 943 <h2 class="psafe-guides-title">Most Popular Guides</h2> 944 </div> 945 946 947 <div class="psafe-guides-carousel" aria-label="Most popular guides carousel"> 948 949 <div class="psafe-guides-track"> 950 951 <div class="psafe-guides-group"> 952 953 954 <!-- GUIDE 1 --> 955 <a class="psafe-guide-card" href="/digital-security/suspicious-links/how-to-tell-if-a-link-is-safe/"> 956 <div class="psafe-guide-image-placeholder"> 957 <img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/07/Banner-Img-1.png" alt="How to tell if a link is safe" loading="lazy"> 958 </div> 959 960 <h3>How can you tell if a link is safe?</h3> 961 962 <p> 963 Learn the warning signs before clicking a suspicious URL. 964 </p> 965 </a> 966 967 968 <!-- GUIDE 2 --> 969 <a class="psafe-guide-card" href="/digital-security/suspicious-links/how-to-identify-a-fake-website/"> 970 <div class="psafe-guide-image-placeholder"> 971 <img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/07/Banners-Blog-3.png" alt="How to identify a fake website" loading="lazy"> 972 </div> 973 974 <h3>How can you identify a fake website?</h3> 975 976 <p> 977 Learn how to recognize fake websites before entering your personal information. 978 </p> 979 </a> 980 981 982 <!-- GUIDE 3 --> 983 <a class="psafe-guide-card" href="/digital-security/android-antivirus/how-to-tell-if-your-phone-has-a-virus/"> 984 <div class="psafe-guide-image-placeholder"> 985 <img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/07/Como-saber-se-meu-celular-tem-virus-3.png" alt="How to tell if your phone has a virus" loading="lazy"> 986 </div> 987 988 <h3>How can you tell if your phone has a virus?</h3> 989 990 <p> 991 Learn the signs of suspicious apps, malware, and unusual phone behavior. 992 </p> 993 </a> 994 995 996 <!-- GUIDE 4 --> 997 <a class="psafe-guide-card" href="https://www.psafe.com/en/blog/can-tap-to-pay-cards-be-cloned/"> 998 <div class="psafe-guide-image-placeholder"> 999 <img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/09/img-peer-to-peer.png" alt="Can tap-to-pay cards be cloned?" loading="lazy"> 1000 </div> 1001 1002 <h3>Can tap-to-pay cards be cloned?</h3> 1003 1004 <p> 1005 Understand the real risks behind contactless payments and what to check before tapping your card. 1006 </p> 1007 </a> 1008 1009 1010 <!-- GUIDE 5 --> 1011 <a class="psafe-guide-card" href="/digital-security/public-wifi/how-to-stay-safe-on-
1011public-networks/"> 1012 <div class="psafe-guide-image-placeholder"> 1013 <img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/07/Wi-Fi-publico-e-seguro.png" alt="Is public Wi-Fi safe?" loading="lazy"> 1014 </div> 1015 1016 <h3>Is public Wi-Fi safe?</h3> 1017 1018 <p> 1019 Understand the risks of open networks and how to browse more safely. 1020 </p> 1021 </a> 1022 1023 1024 <!-- GUIDE 6 --> 1025 <a class="psafe-guide-card" href="/digital-security/privacy/how-to-lock-apps-with-a-password/"> 1026 <div class="psafe-guide-image-placeholder"> 1027 <img decoding="async" src="https://www.psafe.com/wp-content/uploads/2026/07/Como-proteger-seus-apps-com-senha.png" alt="How to protect your apps with a password" loading="lazy"> 1028 </div> 1029 1030 <h3>How can you protect your apps with a password?</h3> 1031 1032 <p> 1033 Protect WhatsApp, banking apps, your photo gallery, social media, and other important apps. 1034 </p> 1035 </a> 1036 1037 1038 </div> 1039 1040 </div> 1041 1042 </div> 1043 1044 1045 <div class="psafe-guides-footer"> 1046 <a class="psafe-guides-link" href="/digital-security/"> 1047 View all guides â 1048 </a> 1049 </div> 1050 1051</section> 1052 1053
1054<script> 1055document.addEventListener("DOMContentLoaded", function () { 1056 const carousels = document.querySelectorAll(".psafe-guides-carousel"); 1057 1058 carousels.forEach(function (carousel) { 1059 if (carousel.dataset.carouselReady === "true") { 1060 return; 1061 } 1062 1063 const track = carousel.querySelector(".psafe-guides-track"); 1064 const originalGroup = carousel.querySelector(".psafe-guides-group"); 1065 1066 if (!track || !originalGroup) { 1067 return; 1068 } 1069 1070 const clonedGroup = originalGroup.cloneNode(true); 1071 1072 clonedGroup.setAttribute("aria-hidden", "true"); 1073 1074 clonedGroup.querySelectorAll("a").forEach(function (link) { 1075 link.setAttribute("tabindex", "-1"); 1076 }); 1077 1078 track.appendChild(clonedGroup); 1079 1080 carousel.dataset.carouselReady = "true"; 1081 }); 1082}); 1083</script>
1083 1084 1085 1086 1087<!-- ===================================================== 1088 LATEST NEWS CAROUSEL â PSAFE 1089 Paste everything into a "Custom HTML" block 1090====================================================== --> 1091 1092<style> 1093 #psafe-latest-news, 1094 #psafe-latest-news * { 1095 box-sizing: border-box; 1096 } 1097 1098 #psafe-latest-news { 1099 --psafe-purple: #672d91; 1100 --psafe-purple-dark: #482064; 1101 --psafe-purple-light: #f5eff9; 1102 --psafe-text: #251b2b; 1103 --psafe-muted: #6f6873; 1104 --psafe-border: rgba(103, 45, 145, 0.14); 1105 --psafe-gap: 18px; 1106 --psafe-card-width: 280px; 1107 1108 position: relative; 1109 width: 100%; 1110 padding: 64px 20px; 1111 overflow: hidden; 1112 background: 1113 radial-gradient( 1114 circle at 10% 20%, 1115 rgba(103, 45, 145, 0.08), 1116 transparent 28% 1117 ), 1118 linear-gradient( 1119 180deg, 1120 #ffffff 0%, 1121 #fbf9fc 100% 1122 ); 1123 1124 font-family: inherit; 1125 } 1126 1127 #psafe-latest-news .psafe-news-container { 1128 width: 100%; 1129 max-width: 1080px; 1130 margin: 0 auto; 1131 } 1132 1133 #psafe-latest-news .psafe-news-heading { 1134 max-width: 760px; 1135 margin: 0 auto 34px; 1136 text-align: center; 1137 } 1138 1139 #psafe-latest-news .psafe-news-eyebrow { 1140 display: inline-flex; 1141 align-items: center; 1142 gap: 8px; 1143 margin-bottom: 13px; 1144 padding: 8px 14px; 1145 1146 color: var(--psafe-purple); 1147 background: var(--psafe-purple-light); 1148 border: 1px solid rgba(103, 45, 145, 0.12); 1149 border-radius: 999px; 1150 1151 font-size: 13px; 1152 font-weight: 700; 1153 line-height: 1; 1154 letter-spacing: 0.04em; 1155 text-transform: uppercase; 1156 } 1157 1158 #psafe-latest-news .psafe-news-eyebrow::before { 1159 width: 7px; 1160 height: 7px; 1161 background: var(--psafe-purple); 1162 border-radius: 50%; 1163 content: ""; 1164 } 1165 1166 #psafe-latest-news .psafe-news-title { 1167 margin: 0 0 14px; 1168 color: var(--psafe-text); 1169 font-size: clamp(32px, 4.2vw, 48px); 1170 font-weight: 750; 1171 line-height: 1.08; 1172 letter-spacing: -0.035em; 1173 } 1174 1175 #psafe-latest-news .psafe-news-description { 1176 max-width: 650px; 1177 margin: 0 auto; 1178 color: var(--psafe-muted); 1179 font-size: 17px; 1180 line-height: 1.65; 1181 } 1182 1183 #psafe-latest-news .psafe-carousel-wrapper { 1184 position: relative; 1185 width: 100%; 1186 padding-top: 50px; 1187 } 1188 1189 #psafe-latest-news .psafe-news-viewport { 1190 position: relative; 1191 width: 100%; 1192 padding: 8px 2px 30px; 1193 1194 overflow-x: auto; 1195 overflow-y: hidden; 1196 1197 scrollbar-width: none; 1198 -ms-overflow-style: none; 1199 overscroll-behavior-x: contain; 1200 1201 /* Allows users to drag the carousel and scroll the page vertically */ 1202 touch-action: pan-x pan-y pinch-zoom; 1203 } 1204 1205 #psafe-latest-news .psafe-news-viewport::-webkit-scrollbar {
1206 display: none; 1207 } 1208 1209 #psafe-latest-news .psafe-news-track { 1210 display: flex; 1211 align-items: stretch; 1212 gap: var(--psafe-gap); 1213 width: max-content; 1214 will-change: transform; 1215 } 1216 1217 #psafe-latest-news .psafe-news-track.is-loading { 1218 display: block; 1219 width: 100%; 1220 min-width: 100%; 1221 min-height: 340px; 1222 } 1223 1224 #psafe-latest-news .psafe-news-track.is-loading 1225 .psafe-news-status { 1226 position: absolute; 1227 top: 0; 1228 right: 0; 1229 bottom: 0; 1230 left: 0; 1231 width: 100%; 1232 min-width: 100%; 1233 } 1234 1235 #psafe-latest-news .psafe-news-group { 1236 display: flex; 1237 align-items: stretch; 1238 gap: var(--psafe-gap); 1239 flex: none; 1240 } 1241 1242 #psafe-latest-news .psafe-news-card { 1243 display: flex; 1244 flex: 0 0 var(--psafe-card-width); 1245 flex-direction: column; 1246 width: var(--psafe-card-width); 1247 min-width: 0; 1248 1249 overflow: hidden; 1250 background: #ffffff; 1251 border: 1px solid var(--psafe-border); 1252 border-radius: 16px; 1253 box-shadow: 1254 0 8px 24px rgba(39, 21, 50, 0.06), 1255 0 2px 6px rgba(39, 21, 50, 0.03); 1256 1257 transform: translateY(0); 1258 transition: 1259 transform 0.3s ease, 1260 box-shadow 0.3s ease, 1261 border-color 0.3s ease; 1262 1263 cursor: pointer; 1264 } 1265 1266 #psafe-latest-news .psafe-news-card:hover { 1267 border-color: rgba(103, 45, 145, 0.3); 1268 box-shadow: 1269 0 18px 42px rgba(60, 25, 79, 0.13), 1270 0 5px 12px rgba(60, 25, 79, 0.06); 1271 1272 transform: translateY(-6px); 1273 } 1274 1275 #psafe-latest-news .psafe-news-card:focus-visible { 1276 outline: 3px solid rgba(103, 45, 145, 0.28); 1277 outline-offset: 4px; 1278 } 1279 1280 #psafe-latest-news .psafe-news-image-link { 1281 position: relative; 1282 display: block; 1283 width: 100%; 1284 aspect-ratio: 16 / 9; 1285 overflow: hidden; 1286 background: 1287 linear-gradient( 1288 135deg, 1289 #eee5f3, 1290 #d9c4e5 1291 ); 1292 } 1293 1294 #psafe-latest-news .psafe-news-image { 1295 display: block; 1296 width: 100%; 1297 height: 100%; 1298 object-fit: cover; 1299 transition: transform 0.5s ease; 1300 } 1301 1302 #psafe-latest-news .psafe-news-card:hover 1303 .psafe-news-image { 1304 transform: scale(1.045); 1305 } 1306 1307 #psafe-latest-news .psafe-news-image-placeholder { 1308 display: flex; 1309 align-items: center; 1310 justify-content: center; 1311 width: 100%; 1312 height: 100%; 1313 1314 color: rgba(103, 45, 145, 0.7); 1315 background: 1316 radial-gradient( 1317 circle at 25% 30%, 1318 rgba(255, 255, 255, 0.65), 1319 transparent 27% 1320 ), 1321 linear-gradient( 1322 135deg, 1323 #f1e9f5, 1324 #d8c1e4 1325 ); 1326 } 1327 1328 #psafe-latest-news .psafe-news-image-placeholder svg { 1329 width: 50px; 1330 height: 50px; 1331 } 1332 1333 #psafe-latest-news .psafe-news-content { 1334 display: flex; 1335 flex: 1; 1336 flex-direction: column; 1337 padding: 16px 16px 18px; 1338 } 1339 1340 #psafe-latest-news .psafe-news-meta { 1341 display: flex; 1342 align-items: center; 1343 justify-content: flex-start; 1344 gap: 10px; 1345 margin-bottom: 10px; 1346 } 1347 1348 #psafe-latest-news .psafe-news-category { 1349 display: inline-flex; 1350 max-width: 60%; 1351 padding: 6px 10px; 1352 1353 overflow: hidden; 1354 color: var(--psafe-purple); 1355 background: var(--psafe-purple-light); 1356 border-radius: 999px; 1357 1358 font-size: 11px; 1359 font-weight: 750; 1360 line-height: 1; 1361 letter-spacing: 0.025em; 1362 text-overflow: ellipsis; 1363 text-transform: uppercase; 1364 white-space: nowrap; 1365 } 1366 1367 #psafe-latest-news .psafe-news-date { 1368 flex: none; 1369 color: #8b838f; 1370 font-size: 12px; 1371 font-weight: 500; 1372 white-space: nowrap; 1373 } 1374 1375 #psafe-latest-news .psafe-news-card-title { 1376 margin: 0 0 9px; 1377 font-size: 17px; 1378 font-weight: 720; 1379 line-height: 1.32; 1380 letter-spacing: -0.015em; 1381 } 1382 1383 #psafe-latest-news .psafe-news-card-title a { 1384 display: -webkit-box; 1385 overflow: hidden; 1386 color: var(--psafe-text); 1387 text-decoration: none; 1388 -webkit-box-orient: vertical; 1389 -webkit-line-clamp: 3; 1390 } 1391 1392 #psafe-latest-news .psafe-news-card-title a:hover { 1393 color: var(--psafe-purple); 1394 } 1395 1396 #psafe-latest-news .psafe-news-excerpt { 1397 display: -webkit-box; 1398 margin: 0 0 15px; 1399 overflow: hidden; 1400 color: var(--psafe-muted); 1401 font-size: 13px; 1402 line-height: 1.5; 1403 -webkit-box-orient: vertical; 1404 -webkit-line-clamp: 2; 1405 } 1406 1407 #psafe-latest-news .psafe-news-read-more { 1408 display: inline-flex; 1409 align-items: center; 1410 gap: 7px; 1411 width: fit-content; 1412 margin-top: auto; 1413 1414 color: var(--psafe-purple); 1415 font-size: 13px; 1416 font-weight: 700; 1417 text-decoration: none; 1418 } 1419 1420 #psafe-latest-news .psafe-news-read-more svg { 1421 width: 17px; 1422 height: 17px; 1423 transition: transform 0.25s ease; 1424 } 1425 1426 #psafe-latest-news .psafe-news-read-more:hover svg { 1427 transform: translateX(4px); 1428 } 1429 1430 #psafe-latest-news .psafe-carousel-arrow { 1431 position: absolute; 1432 z-index: 10; 1433 top: 0; 1434 1435 display: flex; 1436 align-items: center; 1437 justify-content: center; 1438 1439 width: 46px; 1440 height: 46px; 1441 padding: 0; 1442 1443 color: #ffffff; 1444 background: var(--psafe-purple); 1445 border: 0; 1446 border-radius: 50%; 1447 box-shadow: 0 10px 25px rgba(72, 32, 100, 0.25); 1448 1449 cursor: pointer; 1450 transform: none; 1451 transition: 1452 background 0.2s ease, 1453 transform 0.2s ease, 1454 box-shadow 0.2s ease; 1455 } 1456 1457 #psafe-latest-news .psafe-carousel-arrow:hover { 1458 background: var(--psafe-purple-dark); 1459 box-shadow: 0 13px 29px rgba(72, 32, 100, 0.34); 1460 transform: scale(1.06); 1461 } 1462 1463 #psafe-latest-news .psafe-carousel-arrow:focus-visible { 1464 outline: 3px solid rgba(103, 45, 145, 0.28); 1465 outline-offset: 4px; 1466 } 1467 1468 #psafe-latest-news .psafe-carousel-arrow svg { 1469 width: 23px; 1470 height: 23px; 1471 } 1472 1473 #psafe-latest-news .psafe-carousel-prev { 1474 right: 56px; 1475 left: auto; 1476 } 1477 1478 #psafe-latest-news .psafe-carousel-next { 1479 right: 4px; 1480 } 1481 1482 #psafe-latest-news .psafe-news-footer { 1483 display: flex; 1484 justify-content: center; 1485 margin-top: 14px; 1486 } 1487 1488 #psafe-latest-news .psafe-news-all-link { 1489 display: inline-flex; 1490 align-items: center; 1491 justify-content: center; 1492 gap: 9px; 1493 1494 min-height: 50px; 1495 padding: 13px 25px; 1496 1497 color: #ffffff; 1498 background: var(--psafe-purple); 1499 border: 2px solid var(--psafe-purple); 1500 border-radius: 999px; 1501 box-shadow: 0 9px 22px rgba(103, 45, 145, 0.19); 1502 1503 font-size: 15px; 1504 font-weight: 700; 1505 line-height: 1; 1506 text-decoration: none; 1507 1508 transition: 1509 background 0.25s ease, 1510 border-color 0.25s ease, 1511 transform 0.25s ease, 1512 box-shadow 0.25s ease; 1513 } 1514 1515 #psafe-latest-news .psafe-news-all-link:hover { 1516 color: #ffffff; 1517 background: var(--psafe-purple-dark); 1518 border-color: var(--psafe-purple-dark); 1519 box-shadow: 0 13px 28px rgba(103, 45, 145, 0.28); 1520 transform: translateY(-2px); 1521 } 1522 1523 #psafe-latest-news .psafe-news-status { 1524 display: flex; 1525 align-items: center; 1526 justify-content: center; 1527 min-height: 340px; 1528 width: 100%; 1529 flex: 1 0 100%; 1530 color: var(--psafe-muted); 1531 text-align: center; 1532 } 1533 1534 #psafe-latest-news .psafe-loading-content { 1535 display: flex; 1536 align-items: center; 1537 flex-direction: column; 1538 gap: 14px; 1539 } 1540 1541 #psafe-latest-news .psafe-loading-spinner { 1542 width: 38px; 1543 height: 38px; 1544 border: 4px solid rgba(103, 45, 145, 0.14); 1545 border-top-color: var(--psafe-purple); 1546 border-radius: 50%; 1547 animation: psafeSpinner 0.9s linear infinite; 1548 } 1549 1550 #psafe-latest-news .psafe-news-error { 1551 display: none; 1552 padding: 35px 20px; 1553 color: var(--psafe-muted); 1554 background: #ffffff; 1555 border: 1px solid var(--psafe-border); 1556 border-radius: 18px; 1557 text-align: center; 1558 } 1559 1560 #psafe-latest-news .psafe-news-error.is-visible { 1561 display: block; 1562 } 1563 1564 #psafe-latest-news .psafe-news-error a { 1565 color: var(--psafe-purple); 1566 font-weight: 700; 1567 } 1568
1569 @keyframes psafeSpinner { 1570 to { 1571 transform: rotate(360deg); 1572 } 1573 } 1574 1575 @media (max-width: 1280px) { 1576 #psafe-latest-news .psafe-carousel-prev { 1577 right: 56px; 1578 left: auto; 1579 } 1580 1581 #psafe-latest-news .psafe-carousel-next { 1582 right: 4px; 1583 } 1584 } 1585 1586 @media (max-width: 768px) { 1587 #psafe-latest-news { 1588 --psafe-gap: 14px; 1589 padding: 62px 16px; 1590 } 1591 1592 #psafe-latest-news .psafe-news-heading { 1593 margin-bottom: 32px; 1594 } 1595 1596 #psafe-latest-news .psafe-news-description { 1597 font-size: 15px; 1598 } 1599 1600 #psafe-latest-news .psafe-carousel-arrow { 1601 top: 3px; 1602 width: 39px; 1603 height: 39px; 1604 } 1605 1606 #psafe-latest-news .psafe-carousel-prev { 1607 right: 50px; 1608 left: auto; 1609 } 1610 1611 #psafe-latest-news .psafe-carousel-next { 1612 right: 4px; 1613 } 1614 1615 #psafe-latest-news .psafe-news-content { 1616 padding: 16px 15px 18px; 1617 } 1618 } 1619 1620 @media (prefers-reduced-motion: reduce) { 1621 #psafe-latest-news *, 1622 #psafe-latest-news *::before, 1623 #psafe-latest-news *::after { 1624 scroll-behavior: auto !important; 1625 animation-duration: 0.01ms !important; 1626 animation-iteration-count: 1 !important; 1627 transition-duration: 0.01ms !important; 1628 } 1629 } 1630</style> 1631 1632<section id="psafe-latest-news" aria-labelledby="psafe-latest-news-title"> 1633 <div class="psafe-news-container"> 1634 1635 <header class="psafe-news-heading"> 1636 <span class="psafe-news-eyebrow"> 1637 Fresh content 1638 </span> 1639 1640 <h2 id="psafe-latest-news-title" class="psafe-news-title"> 1641 Latest news 1642 </h2> 1643 1644 <p class="psafe-news-description"> 1645 Practical information to protect your phone, 1646 your data, and your digital life. 1647 </p> 1648 </header> 1649 1650 <div class="psafe-carousel-wrapper"> 1651 1652 <button class="psafe-carousel-arrow psafe-carousel-prev" type="button" aria-label="View previous article"> 1653 <svg viewBox="0 0 24 24" fill="none" aria-hidden="true"> 1654 <path d="M15 18L9 12L15 6" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"></path> 1655 </svg> 1656 </button> 1657 1658 <div class="psafe-news-viewport" tabindex="0" aria-label="Latest news carousel"> 1659 <div class="psafe-news-track is-loading"> 1660 <div class="psafe-news-status" role="status" aria-live="polite"> 1661 <div class="psafe-loading-content"> 1662 <span class="psafe-loading-spinner" aria-hidden="true"></span> 1663 1664 <span> 1665 Loading the latest news… 1666 </span> 1667 </div> 1668 </div> 1669 </div> 1670 </div> 1671 1672 <button class="psafe-carousel-arrow psafe-carousel-next" type="button" aria-label="View next article"> 1673 <svg viewBox="0 0 24 24" fill="none" aria-hidden="true"> 1674 <path d="M9 6L15 12L9 18" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"></path> 1675 </svg> 1676 </button> 1677 1678 </div> 1679 1680 <div class="psafe-news-error" role="status"> 1681 We couldn’t load the latest news right now. 1682 <a href="https://www.psafe.com/en/blog/"> 1683 Visit the PSafe blog directly. 1684 </a> 1685 </div> 1686 1687 <div class="psafe-news-footer"> 1688 <a class="psafe-news-all-link" href="https://www.psafe.com/en/blog/"> 1689 View all news 1690 1691 <svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true"> 1692 <path d="M5 12H19M13 6L19 12L13 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> 1693 </svg> 1694 </a> 1695 </div> 1696 1697 </div> 1698</section> 1699
1700<script> 1701(function () { 1702 "use strict"; 1703 1704 const root = document.getElementById("psafe-latest-news"); 1705 1706 if (!root || root.dataset.carouselInitialized === "true") { 1707 return; 1708 } 1709 1710 root.dataset.carouselInitialized = "true"; 1711 1712 const viewport = root.querySelector(".psafe-news-viewport"); 1713 const track = root.querySelector(".psafe-news-track"); 1714 const previousButton = root.querySelector( 1715 ".psafe-carousel-prev" 1716 ); 1717 const nextButton = root.querySelector( 1718 ".psafe-carousel-next" 1719 ); 1720 const errorBox = root.querySelector(".psafe-news-error"); 1721 1722 /* 1723 * CAROUSEL SPEED 1724 * 1725 * 14 = very slow movement 1726 * 20 = moderate movement 1727 * 30 = faster movement 1728 */ 1729 const VELOCIDADE = 14; 1730 1731 /* 9 articles = 3 full pages of 3 cards on desktop. */ 1732 const QUANTIDADE_DE_NOTICIAS = 9; 1733 1734 const BLOG_URL = "https://www.psafe.com/en/blog/"; 1735 const FEED_URL = BLOG_URL + "feed/"; 1736 const SEPARADOR_QUERY = String.fromCharCode(38); 1737 1738 /* 1739 * WordPress REST endpoint for the blog. 1740 * orderby=date + order=desc forces results from newest to oldest. 1741 * The final parameter prevents outdated cached results. 1742 */ 1743 const API_ENDPOINTS = [ 1744 BLOG_URL + 1745 "?rest_route=/wp/v2/posts" + 1746 SEPARADOR_QUERY + 1747 "per_page=" + QUANTIDADE_DE_NOTICIAS + 1748 SEPARADOR_QUERY + 1749 "orderby=date" + 1750 SEPARADOR_QUERY + 1751 "order=desc" + 1752 SEPARADOR_QUERY + 1753 "status=publish" + 1754 SEPARADOR_QUERY + 1755 "_embed=1" 1756 ]; 1757 1758 let larguraDoCiclo = 0; 1759 let ultimoTempo = performance.now(); 1760 let animacaoId = null; 1761 let temporizadorManual = null; 1762 1763 const motivosDePausa = new Set(); 1764 1765 /* 1766 * Fixes text that may occasionally arrive with broken encoding. 1767 * The conversion uses only ASCII codes in the script so it does not 1768 * depend on the encoding configured in the editor or WordPress. 1769 */ 1770 function corrigirCodificacao(texto) { 1771 const valor = String(texto || ""); 1772 1773 if (!/[\u00C2\u00C3\u00E2]/.test(valor)) { 1774 return valor; 1775 } 1776 1777 const mapaWindows1252 = { 1778 8364: 128, 1779 8218: 130, 1780 402: 131, 1781 8222: 132, 1782 8230: 133, 1783 8224: 134, 1784 8225: 135, 1785 710: 136, 1786 8240: 137, 1787 352: 138, 1788 8249: 139, 1789 338: 140, 1790 381: 142, 1791 8216: 145, 1792 8217: 146, 1793 8220: 147, 1794 8221: 148, 1795 8226: 149, 1796 8211: 150, 1797 8212: 151, 1798 732: 152, 1799 8482: 153, 1800 353: 154, 1801 8250: 155, 1802 339: 156, 1803 382: 158, 1804 376: 159 1805 }; 1806 1807 const bytes = []; 1808 1809 for (const caractere of valor) { 1810 const codigo = caractere.codePointAt(0); 1811 1812 if (codigo <= 255) { 1813 bytes.push(codigo); 1814 } else if (mapaWindows1252[codigo] !== undefined) { 1815 bytes.push(mapaWindows1252[codigo]); 1816 } else { 1817 return valor; 1818 } 1819 } 1820 1821 try { 1822 return new TextDecoder("utf-8", { 1823 fatal: true 1824 }).decode(new Uint8Array(bytes)); 1825 } catch (erro) { 1826 return valor; 1827 } 1828 } 1829 1830 function converterHtmlParaTexto(html) { 1831 const elemento = document.createElement("div"); 1832 elemento.innerHTML = html || ""; 1833 1834 const texto = ( 1835 elemento.textContent || 1836 elemento.innerText || 1837 "" 1838 ) 1839 .replace(/\s+/g, " ") 1840 .trim(); 1841 1842 return corrigirCodificacao(texto); 1843 } 1844 1845 function limitarTexto(texto, limite) { 1846 const valor = (texto || "").trim(); 1847 1848 if (valor.length <= limite) { 1849 return valor; 1850 } 1851 1852 return valor.slice(0, limite).trimEnd() + "\u2026"; 1853 } 1854 1855 function formatarData(dataOriginal) { 1856 if (!dataOriginal) { 1857 return ""; 1858 } 1859 1860 const data = new Date(dataOriginal); 1861 1862 if (Number.isNaN(data.getTime())) { 1863 return ""; 1864 } 1865 1866 return new Intl.DateTimeFormat("en-US", { 1867 day: "2-digit", 1868 month: "short", 1869 year: "numeric" 1870 }) 1871 .format(data) 1872 .replace(".", ""); 1873 } 1874 1875 function obterImagemDoPost(post) { 1876 const midia = post 1877 ? post._embedded 1878 ? post._embedded["wp:featuredmedia"] 1879 ? post._embedded["wp:featuredmedia"][0] 1880 : null 1881 : null 1882 : null; 1883 1884 if (!midia) { 1885 return { 1886 url: "", 1887 alt: "" 1888 }; 1889 } 1890 1891 const tamanhos = midia.media_details 1892 ? midia.media_details.sizes || {} 1893 : {}; 1894 1895 const imagem = 1896 tamanhos.medium_large || 1897 tamanhos.large || 1898 tamanhos.medium || 1899 tamanhos.full; 1900 1901 return { 1902 url: 1903 (imagem ? imagem.source_url : "") || 1904 midia.source_url || 1905 "", 1906 alt: midia.alt_text || "" 1907 }; 1908 } 1909 1910 function obterCategoriaDoPost(post) { 1911 const grupos = post 1912 ? post._embedded 1913 ? post._embedded["wp:term"] 1914 : null 1915 : null; 1916 1917 if (!Array.isArray(grupos)) { 1918 return "Digital security"; 1919 } 1920 1921 const termos = grupos.flat(); 1922 1923 const categoria = termos.find(function (termo) { 1924 return termo.taxonomy === "category"; 1925 }); 1926 1927 return categoria 1928 ? categoria.name 1929 ? corrigirCodificacao(categoria.name) 1930 : "Digital security" 1931 : "Digital security"; 1932 } 1933 1934 function transformarPostsDaApi(posts) { 1935 return posts 1936 .slice() 1937 .sort(function (postA, postB) { 1938 const dataA = new Date( 1939 postA.date_gmt || postA.date || 0 1940 ).getTime(); 1941 const dataB = new Date( 1942 postB.date_gmt || postB.date || 0 1943 ).getTime(); 1944 1945 return dataB - dataA; 1946 }) 1947 .slice(0, QUANTIDADE_DE_NOTICIAS) 1948 .map(function (post) { 1949 const imagem = obterImagemDoPost(post); 1950 1951 return { 1952 titulo: converterHtmlParaTexto( 1953 post.title 1954 ? post.title.rendered 1955 : "" 1956 ), 1957 1958 resumo: limitarTexto( 1959 converterHtmlParaTexto( 1960 post.excerpt 1961 ? post.excerpt.rendered 1962 : "" 1963 ), 1964 165 1965 ), 1966 1967 link: post.link, 1968 imagem: imagem.url, 1969 imagemAlt: imagem.alt, 1970 categoria: obterCategoriaDoPost(post), 1971 data: formatarData(post.date), 1972 dataOriginal: post.date || "" 1973 }; 1974 }) 1975 .filter(function (post) { 1976 return [post.titulo, post.link].every(Boolean); 1977 }); 1978 } 1979 1980 async function buscarPelaApi() { 1981 let ultimoErro; 1982 1983 for (const endpoint of API_ENDPOINTS) { 1984 try { 1985 const resposta = await fetch(endpoint, { 1986 method: "GET", 1987 credentials: "same-origin", 1988 cache: "no-store", 1989 headers: { 1990 Accept: "application/json" 1991 } 1992 }); 1993 1994 if (!resposta.ok) { 1995 throw new Error( 1996 "HTTP error " + resposta.status 1997 ); 1998 } 1999 2000 const dados = await resposta.json(); 2001 2002 if (!Array.isArray(dados) || !dados.length) { 2003 throw new Error( 2004 "The API did not return any posts." 2005 ); 2006 } 2007 2008 const posts = transformarPostsDaApi(dados); 2009 2010 if (posts.length) { 2011 return posts; 2012 } 2013 } catch (erro) { 2014 ultimoErro = erro; 2015 } 2016 } 2017 2018 throw ultimoErro || new Error( 2019 "The API could not be reached." 2020 ); 2021 } 2022 2023 /* 2024 * The feed provides the title, excerpt, image, and category in a file 2025 * much smaller than the full WordPress API response. 2026 */ 2027 async function buscarPeloFeed() { 2028 const resposta = await fetch(FEED_URL, { 2029 method: "GET", 2030 credentials: "same-origin", 2031 cache: "no-cache", 2032 headers: { 2033 Accept: "application/rss+xml, application/xml, text/xml" 2034 } 2035 }); 2036 2037 if (!resposta.ok) { 2038 throw new Error("The blog feed did not respond."); 2039 } 2040 2041 const xml = await resposta.text(); 2042 const documento = new DOMParser().parseFromString( 2043 xml, 2044 "application/xml" 2045 ); 2046 2047 if (documento.querySelector("parsererror")) {
2048 throw new Error("The feed returned invalid XML."); 2049 } 2050 2051 const itens = [ 2052 ...documento.getElementsByTagName("item") 2053 ]; 2054 2055 const posts = itens 2056 .map(function (item) { 2057 function textoDaTag(nome) { 2058 const elemento = item.getElementsByTagName( 2059 nome 2060 )[0]; 2061 2062 return elemento 2063 ? converterHtmlParaTexto( 2064 elemento.textContent 2065 ) 2066 : ""; 2067 } 2068 2069 const categorias = [ 2070 ...item.getElementsByTagName("category") 2071 ]; 2072 2073 const categoriaPrincipal = categorias.find( 2074 function (categoria) { 2075 return ( 2076 categoria.getAttribute("domain") || "" 2077 ).includes("/category/"); 2078 } 2079 ); 2080 2081 const midia = item.getElementsByTagName( 2082 "media:content" 2083 )[0]; 2084 2085 const dataOriginal = textoDaTag("pubDate"); 2086 2087 return { 2088 titulo: textoDaTag("title"), 2089 resumo: limitarTexto( 2090 textoDaTag("description"), 2091 165 2092 ), 2093 link: textoDaTag("link"), 2094 imagem: midia 2095 ? midia.getAttribute("url") || "" 2096 : "", 2097 imagemAlt: textoDaTag("title"), 2098 categoria: categoriaPrincipal 2099 ? converterHtmlParaTexto( 2100 categoriaPrincipal.textContent 2101 ) 2102 : "Digital security", 2103 data: "", 2104 dataOriginal: dataOriginal 2105 }; 2106 }) 2107 .filter(function (post) { 2108 return [post.titulo, post.link].every(Boolean); 2109 }) 2110 .sort(function (postA, postB) { 2111 return ( 2112 new Date(postB.dataOriginal).getTime() - 2113 new Date(postA.dataOriginal).getTime() 2114 ); 2115 }) 2116 .slice(0, QUANTIDADE_DE_NOTICIAS); 2117 2118 if (!posts.length) { 2119 throw new Error("No posts appeared in the feed."); 2120 } 2121 2122 return posts; 2123 } 2124 2125 function imagemDoElemento(elemento) { 2126 const imagem = elemento 2127 ? elemento.querySelector("img") 2128 : null; 2129 2130 if (!imagem) { 2131 return { 2132 url: "", 2133 alt: "" 2134 }; 2135 } 2136 2137 return { 2138 url: 2139 imagem.currentSrc || 2140 imagem.getAttribute("data-lazy-src") || 2141 imagem.getAttribute("data-src") || 2142 imagem.getAttribute("src") || 2143 "", 2144 alt: imagem.getAttribute("alt") || "" 2145 }; 2146 } 2147 2148 function linkValidoDePost(link) { 2149 try { 2150 const url = new URL(link, BLOG_URL); 2151 const caminho = url.pathname.replace(/\/+$/, "/"); 2152 2153 if ( 2154 !url.hostname.endsWith("psafe.com") || 2155 !caminho.startsWith("/en/blog/") || 2156 caminho === "/en/blog/" 2157 ) { 2158 return false; 2159 } 2160 2161 if ( 2162 caminho.includes("/category/") || 2163 caminho.includes("/tag/") || 2164 caminho.includes("/author/") || 2165 caminho.includes("/page/") 2166 ) { 2167 return false; 2168 } 2169 2170 return true; 2171 } catch (erro) { 2172 return false; 2173 } 2174 } 2175 2176 function transformarElementoDoBlog(link) { 2177 const container = 2178 link.closest("article") || 2179 link.closest("li") || 2180 link.parentElement; 2181 2182 const titulo = converterHtmlParaTexto(link.innerHTML); 2183 2184 const imagem = imagemDoElemento(container); 2185 2186 const paragrafo = container 2187 ? container.querySelector("p") 2188 : null; 2189 2190 const categoria = container 2191 ? container.querySelector( 2192 '[rel="category tag"],' + 2193 ".category a," + 2194 ".cat-links a," + 2195 ".post-category a" 2196 ) 2197 : null; 2198 2199 const data = container 2200 ? container.querySelector("time") 2201 : null; 2202 2203 return { 2204 titulo: titulo, 2205 resumo: limitarTexto( 2206 paragrafo 2207 ? converterHtmlParaTexto( 2208 paragrafo.innerHTML 2209 ) 2210 : "", 2211 165 2212 ), 2213 link: new URL( 2214 link.getAttribute("href"), 2215 BLOG_URL 2216 ).href, 2217 imagem: imagem.url, 2218 imagemAlt: imagem.alt, 2219 categoria: categoria 2220 ? converterHtmlParaTexto( 2221 categoria.innerHTML 2222 ) 2223 : "Digital security", 2224 data: data 2225 ? ( 2226 converterHtmlParaTexto( 2227 data.innerHTML 2228 ) || 2229 formatarData( 2230 data.getAttribute("datetime") 2231 ) 2232 ) 2233 : "", 2234 dataOriginal: data 2235 ? data.getAttribute("datetime") || "" 2236 : "" 2237 }; 2238 } 2239 2240 async function buscarDiretamenteNoBlog() { 2241 const resposta = await fetch(BLOG_URL, { 2242 method: "GET", 2243 credentials: "same-origin", 2244 cache: "no-store", 2245 headers: { 2246 Accept: "text/html" 2247 } 2248 }); 2249 2250 if (!resposta.ok) { 2251 throw new Error( 2252 "The blog page could not be opened." 2253 ); 2254 } 2255 2256 const html = await resposta.text(); 2257 const documento = new DOMParser().parseFromString( 2258 html, 2259 "text/html" 2260 ); 2261 2262 const areaPrincipal = 2263 documento.querySelector("main") || 2264 documento.body; 2265 2266 const linksEncontrados = [ 2267 ...areaPrincipal.querySelectorAll( 2268 "article h2 a[href]," + 2269 "article h3 a[href]," + 2270 "article h4 a[href]," + 2271 "h2 a[href*='/en/blog/']," + 2272 "h3 a[href*='/en/blog/']" 2273 ) 2274 ]; 2275 2276 const linksUnicos = []; 2277 const enderecosEncontrados = new Set(); 2278 2279 for (const link of linksEncontrados) { 2280 const endereco = link.getAttribute("href"); 2281 2282 if (!linkValidoDePost(endereco)) { 2283 continue; 2284 } 2285 2286 const enderecoCompleto = new URL( 2287 endereco, 2288 BLOG_URL 2289 ).href; 2290 2291 if (enderecosEncontrados.has(enderecoCompleto)) { 2292 continue; 2293 } 2294 2295 enderecosEncontrados.add(enderecoCompleto); 2296 linksUnicos.push(link); 2297 2298 if ( 2299 linksUnicos.length >= 2300 QUANTIDADE_DE_NOTICIAS 2301 ) { 2302 break; 2303 } 2304 } 2305 2306 const posts = linksUnicos.map( 2307 transformarElementoDoBlog 2308 ); 2309 2310 if (!posts.length) { 2311 throw new Error( 2312 "No posts were found." 2313 ); 2314 } 2315 2316 return posts; 2317 } 2318 2319 function normalizarLinkDaPublicacao(link) { 2320 try { 2321 const url = new URL(link, BLOG_URL); 2322 2323 return ( 2324 url.hostname.toLowerCase() + 2325 url.pathname.replace(/\/+$/, "/") 2326 ); 2327 } catch (erro) { 2328 return String(link || ""); 2329 } 2330 } 2331 2332 async function buscarImagemNaPublicacao(post) { 2333 const resposta = await fetch(post.link, { 2334 method: "GET", 2335 credentials: "same-origin", 2336 cache: "no-store", 2337 headers: { 2338 Accept: "text/html" 2339 } 2340 }); 2341 2342 if (!resposta.ok) { 2343 return { 2344 url: "", 2345 alt: "" 2346 }; 2347 } 2348 2349 const html = await resposta.text(); 2350 const documento = new DOMParser().parseFromString( 2351 html, 2352 "text/html" 2353 ); 2354 2355 const metaImagem = documento.querySelector( 2356 'meta[property="og:image:secure_url"],' + 2357 'meta[property="og:image"],' + 2358 'meta[name="twitter:image"]' 2359 ); 2360 2361 const metaAlt = documento.querySelector( 2362 'meta[property="og:image:alt"],' + 2363 'meta[name="twitter:image:alt"]' 2364 ); 2365 2366 const imagemDoArtigo = imagemDoElemento( 2367 documento.querySelector("article") || 2368 documento.querySelector("main") 2369 ); 2370 2371 const endereco = 2372 (metaImagem 2373 ? metaImagem.getAttribute("content") 2374 : "") || 2375 imagemDoArtigo.url; 2376 2377 if (!endereco) { 2378 return { 2379 url: "", 2380 alt: "" 2381 }; 2382 } 2383 2384 return { 2385 url: new URL(endereco, BLOG_URL).href, 2386 alt: 2387 (metaAlt 2388 ? metaAlt.getAttribute("content") 2389 : "") || 2390 imagemDoArtigo.alt || 2391 post.titulo 2392 }; 2393 } 2394 2395 async function completarImagensDosPosts(posts) { 2396 const imagensDoBlog = new Map(); 2397 2398 try { 2399 const postsDaPagina = 2400 await buscarDiretamenteNoBlog(); 2401
2402 postsDaPagina.forEach(function (post) { 2403 if (post.imagem) { 2404 imagensDoBlog.set( 2405 normalizarLinkDaPublicacao(post.link), 2406 { 2407 url: post.imagem, 2408 alt: post.imagemAlt 2409 } 2410 ); 2411 } 2412 }); 2413 } catch (erro) { 2414 /* The individual article fallback below remains available. */ 2415 } 2416 2417 return Promise.all( 2418 posts.map(async function (post) { 2419 if (post.imagem) { 2420 return post; 2421 } 2422 2423 const imagemDaPaginaDoBlog = imagensDoBlog.get( 2424 normalizarLinkDaPublicacao(post.link) 2425 ); 2426 2427 if (imagemDaPaginaDoBlog) { 2428 return Object.assign({}, post, { 2429 imagem: imagemDaPaginaDoBlog.url, 2430 imagemAlt: 2431 imagemDaPaginaDoBlog.alt || 2432 post.titulo 2433 }); 2434 } 2435 2436 try { 2437 const imagem = 2438 await buscarImagemNaPublicacao(post); 2439 2440 if (imagem.url) { 2441 return Object.assign({}, post, { 2442 imagem: imagem.url, 2443 imagemAlt: 2444 imagem.alt || post.titulo 2445 }); 2446 } 2447 } catch (erro) { 2448 /* Keeps the original placeholder if no image is found. */ 2449 } 2450 2451 return post; 2452 }) 2453 ); 2454 } 2455 2456 function criarPlaceholderDeImagem() { 2457 const placeholder = document.createElement("div"); 2458 placeholder.className = 2459 "psafe-news-image-placeholder"; 2460 2461 placeholder.innerHTML = 2462 '<svg viewBox="0 0 24 24" fill="none">' + 2463 '<path d="M12 3L20 7.5V12.5C20 17.2 16.8 21 12 22C7.2 21 4 17.2 4 12.5V7.5L12 3Z"' + 2464 ' stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/>' + 2465 '<path d="M9 12L11 14L15.5 9.5"' + 2466 ' stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/>' + 2467 "</svg>"; 2468 2469 return placeholder; 2470 } 2471 2472 function criarCard(post, indice) { 2473 const article = document.createElement("article"); 2474 article.className = "psafe-news-card"; 2475 article.dataset.link = post.link; 2476 article.tabIndex = 0; 2477 article.setAttribute("role", "link"); 2478 article.setAttribute( 2479 "aria-label", 2480 "Open article: " + post.titulo 2481 ); 2482 2483 const imageLink = document.createElement("a"); 2484 imageLink.className = "psafe-news-image-link"; 2485 imageLink.href = post.link; 2486 imageLink.setAttribute( 2487 "aria-label", 2488 "Open article: " + post.titulo 2489 ); 2490 2491 if (post.imagem) { 2492 const image = document.createElement("img"); 2493 image.className = "psafe-news-image"; 2494 image.src = post.imagem; 2495 image.alt = post.imagemAlt || post.titulo; 2496 image.loading = indice < 3 ? "eager" : "lazy"; 2497 image.fetchPriority = indice < 3 ? "high" : "auto"; 2498 image.decoding = "async"; 2499 image.width = 640; 2500 image.height = 360; 2501 2502 image.addEventListener("error", function () { 2503 image.remove(); 2504 imageLink.appendChild( 2505 criarPlaceholderDeImagem() 2506 ); 2507 }); 2508 2509 imageLink.appendChild(image); 2510 } else { 2511 imageLink.appendChild( 2512 criarPlaceholderDeImagem() 2513 ); 2514 } 2515 2516 const content = document.createElement("div"); 2517 content.className = "psafe-news-content"; 2518 2519 const meta = document.createElement("div"); 2520 meta.className = "psafe-news-meta"; 2521 2522 const category = document.createElement("span"); 2523 category.className = "psafe-news-category"; 2524 category.textContent = 2525 post.categoria || "Digital security"; 2526 2527 meta.appendChild(category); 2528 2529 const title = document.createElement("h3"); 2530 title.className = "psafe-news-card-title"; 2531 2532 const titleLink = document.createElement("a"); 2533 titleLink.href = post.link;
2534 titleLink.textContent = post.titulo; 2535 2536 title.appendChild(titleLink); 2537 2538 const excerpt = document.createElement("p"); 2539 excerpt.className = "psafe-news-excerpt"; 2540 excerpt.textContent = 2541 post.resumo || 2542 "Read the full article for more information."; 2543 2544 const readMore = document.createElement("a"); 2545 readMore.className = "psafe-news-read-more"; 2546 readMore.href = post.link; 2547 readMore.innerHTML = 2548 "<span>Read article</span>" + 2549 '<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">' + 2550 '<path d="M5 12H19M13 6L19 12L13 18"' + 2551 ' stroke="currentColor" stroke-width="2"' + 2552 ' stroke-linecap="round" stroke-linejoin="round"/>' + 2553 "</svg>"; 2554 2555 content.appendChild(meta); 2556 content.appendChild(title); 2557 content.appendChild(excerpt); 2558 content.appendChild(readMore); 2559 2560 article.appendChild(imageLink); 2561 article.appendChild(content); 2562 2563 return article; 2564 } 2565 2566 function montarCarrossel(posts) { 2567 track.innerHTML = ""; 2568 track.classList.remove("is-loading"); 2569 2570 const grupoOriginal = document.createElement("div"); 2571 grupoOriginal.className = "psafe-news-group"; 2572 2573 posts 2574 .slice(0, QUANTIDADE_DE_NOTICIAS) 2575 .forEach(function (post, indice) { 2576 grupoOriginal.appendChild( 2577 criarCard(post, indice) 2578 ); 2579 }); 2580 2581 const grupoDuplicado = 2582 grupoOriginal.cloneNode(true); 2583 2584 grupoDuplicado.setAttribute("aria-hidden", "true"); 2585 2586 grupoDuplicado 2587 .querySelectorAll("a, button, input, [tabindex]") 2588 .forEach(function (elemento) { 2589 elemento.tabIndex = -1; 2590 }); 2591 2592 track.appendChild(grupoOriginal); 2593 track.appendChild(grupoDuplicado); 2594 2595 atualizarMedidas(); 2596 2597 if ("ResizeObserver" in window) { 2598 const observador = new ResizeObserver(function () { 2599 atualizarMedidas(); 2600 }); 2601 2602 observador.observe(viewport); 2603 } else { 2604 window.addEventListener( 2605 "resize", 2606 atualizarMedidas 2607 ); 2608 } 2609 } 2610 2611 function quantidadeVisivel() { 2612 const largura = viewport.clientWidth; 2613 2614 if (largura >= 680) { 2615 return 3; 2616 } 2617 2618 if (largura >= 520) { 2619 return 2; 2620 } 2621 2622 return 1; 2623 } 2624 2625 function obterEspacamento() { 2626 const valor = getComputedStyle(root) 2627 .getPropertyValue("--psafe-gap"); 2628 2629 return parseFloat(valor) || 24; 2630 } 2631 2632 function atualizarMedidas() { 2633 const posicaoAnterior = 2634 larguraDoCiclo > 0 2635 ? viewport.scrollLeft / larguraDoCiclo 2636 : 0; 2637 2638 const visiveis = quantidadeVisivel(); 2639 const espacamento = obterEspacamento(); 2640 2641 const larguraDoCard = 2642 ( 2643 viewport.clientWidth - 2644 espacamento * (visiveis - 1) 2645 ) / visiveis; 2646 2647 root.style.setProperty( 2648 "--psafe-card-width", 2649 Math.max(larguraDoCard, 210) + "px" 2650 ); 2651 2652 const grupos = 2653 track.querySelectorAll(".psafe-news-group"); 2654 2655 if (grupos.length > 1) { 2656 larguraDoCiclo = grupos[1].offsetLeft; 2657 2658 viewport.scrollLeft = 2659 Math.min(posicaoAnterior, 0.999) * 2660 larguraDoCiclo; 2661 } 2662 } 2663 2664 function pausar(motivo) { 2665 motivosDePausa.add(motivo); 2666 } 2667 2668 function continuar(motivo) { 2669 motivosDePausa.delete(motivo); 2670 } 2671 2672 function pausarTemporariamente() { 2673 pausar("manual"); 2674 2675 window.clearTimeout(temporizadorManual); 2676 2677 temporizadorManual = window.setTimeout( 2678 function () { 2679 continuar("manual"); 2680 }, 2681 3200 2682 ); 2683 } 2684 2685 function larguraDoPasso() { 2686 const card = track.querySelector( 2687 ".psafe-news-card" 2688 ); 2689 2690 if (!card) { 2691 return viewport.clientWidth; 2692 } 2693 2694 return ( 2695 card.getBoundingClientRect().width + 2696 obterEspacamento() 2697 ); 2698 } 2699 2700 function moverManualmente(direcao) { 2701 pausarTemporariamente(); 2702 2703 const passo = 2704 larguraDoPasso() * quantidadeVisivel(); 2705 2706 if (direcao < 0) { 2707 if (viewport.scrollLeft < passo) { 2708 viewport.scrollLeft += larguraDoCiclo; 2709 } 2710 } 2711 2712 viewport.scrollBy({ 2713 left: direcao * passo, 2714 behavior: "smooth" 2715 }); 2716 } 2717 2718 function animarCarrossel(tempoAtual) { 2719 const diferenca = Math.min( 2720 tempoAtual - ultimoTempo, 2721 60 2722 ); 2723 2724 ultimoTempo = tempoAtual; 2725 2726 const reduzirMovimento = window.matchMedia( 2727 "(prefers-reduced-motion: reduce)" 2728 ).matches; 2729 2730 const podeAnimar = [ 2731 !reduzirMovimento, 2732 motivosDePausa.size === 0, 2733 !document.hidden, 2734 larguraDoCiclo > 0 2735 ].every(Boolean); 2736 2737 if (podeAnimar) { 2738 viewport.scrollLeft += 2739 VELOCIDADE * (diferenca / 1000); 2740 2741 if ( 2742 viewport.scrollLeft >= 2743 larguraDoCiclo 2744 ) { 2745 viewport.scrollLeft -= larguraDoCiclo; 2746 } 2747 } 2748 2749 animacaoId = window.requestAnimationFrame( 2750 animarCarrossel 2751 ); 2752 } 2753 2754 previousButton.addEventListener( 2755 "click", 2756 function () { 2757 moverManualmente(-1); 2758 } 2759 ); 2760 2761 nextButton.addEventListener( 2762 "click", 2763 function () { 2764 moverManualmente(1); 2765 } 2766 ); 2767 2768 /* Makes the entire card clickable, not only the image and title. */ 2769 track.addEventListener("click", function (evento) { 2770 if (evento.target.closest("a")) { 2771 return; 2772 } 2773 2774 const card = evento.target.closest( 2775 ".psafe-news-card" 2776 ); 2777 2778 if (card ? card.dataset.link : false) { 2779 window.location.href = card.dataset.link; 2780 } 2781 }); 2782 2783 track.addEventListener("keydown", function (evento) { 2784 if (!["Enter", " "].includes(evento.key)) { 2785 return; 2786 } 2787 2788 const card = evento.target.closest( 2789 ".psafe-news-card" 2790 ); 2791 2792 if (card ? card.dataset.link : false) { 2793 if (evento.target === card) { 2794 evento.preventDefault(); 2795 window.location.href = card.dataset.link; 2796 } 2797 } 2798 }); 2799 2800 root.addEventListener("mouseenter", function () { 2801 pausar("mouse"); 2802 }); 2803 2804 root.addEventListener("mouseleave", function () { 2805 continuar("mouse"); 2806 }); 2807 2808 root.addEventListener("focusin", function () { 2809 pausar("foco"); 2810 }); 2811 2812 root.addEventListener("focusout", function (evento) { 2813 if (!root.contains(evento.relatedTarget)) { 2814 continuar("foco"); 2815 } 2816 }); 2817 2818 /* 2819 * On mobile, pauses the animation only when the movement is truly 2820 * horizontal. Vertical page scrolling continues to work normally 2821 * over the carousel. 2822 */ 2823 let toqueInicialX = 0; 2824 let toqueInicialY = 0; 2825 let arrastoHorizontal = false;
2826 2827 viewport.addEventListener( 2828 "pointerdown", 2829 function (evento) { 2830 toqueInicialX = evento.clientX; 2831 toqueInicialY = evento.clientY; 2832 arrastoHorizontal = false; 2833 }, 2834 { 2835 passive: true 2836 } 2837 ); 2838 2839 viewport.addEventListener( 2840 "pointermove", 2841 function (evento) { 2842 const movimentoX = Math.abs( 2843 evento.clientX - toqueInicialX 2844 ); 2845 2846 const movimentoY = Math.abs( 2847 evento.clientY - toqueInicialY 2848 ); 2849 2850 if ( 2851 movimentoX > 8 && 2852 movimentoX > movimentoY 2853 ) { 2854 arrastoHorizontal = true; 2855 pausar("arrasto"); 2856 } 2857 }, 2858 { 2859 passive: true 2860 } 2861 ); 2862 2863 function finalizarArrasto() { 2864 if (!arrastoHorizontal) { 2865 return; 2866 } 2867 2868 window.setTimeout(function () { 2869 continuar("arrasto"); 2870 }, 1000); 2871 2872 arrastoHorizontal = false; 2873 } 2874 2875 viewport.addEventListener( 2876 "pointerup", 2877 finalizarArrasto, 2878 { 2879 passive: true 2880 } 2881 ); 2882 2883 viewport.addEventListener( 2884 "pointercancel", 2885 finalizarArrasto, 2886 { 2887 passive: true 2888 } 2889 ); 2890 2891 async function iniciar() { 2892 try { 2893 let posts; 2894 2895 try { 2896 posts = await Promise.any([ 2897 buscarPeloFeed(), 2898 buscarPelaApi() 2899 ]); 2900 } catch (errosDasFontes) { 2901 posts = await buscarDiretamenteNoBlog(); 2902 } 2903 2904 posts = await completarImagensDosPosts(posts); 2905 2906 montarCarrossel(posts); 2907 2908 ultimoTempo = performance.now(); 2909 2910 animacaoId = window.requestAnimationFrame( 2911 animarCarrossel 2912 ); 2913 } catch (erro) { 2914 console.error( 2915 "PSafe carousel error:", 2916 erro 2917 ); 2918 2919 track.innerHTML = ""; 2920 viewport.style.display = "none"; 2921 previousButton.style.display = "none"; 2922 nextButton.style.display = "none"; 2923 errorBox.classList.add("is-visible"); 2924 } 2925 } 2926 2927 iniciar(); 2928})(); 2929</script>
2929 2930 2931 2932 2933<style> 2934.psafe-cta-band-section, 2935.psafe-cta-band-section * { 2936 box-sizing: border-box; 2937} 2938 2939.psafe-cta-band-section { 2940 max-width: 1180px; 2941 margin: 0 auto; 2942 padding: 8px 24px 50px; 2943 font-family: inherit; 2944} 2945 2946.psafe-cta-band { 2947 position: relative; 2948 display: grid; 2949 grid-template-columns: 1.15fr 0.75fr 1fr; 2950 align-items: center; 2951 gap: 28px; 2952 width: 100%; 2953 padding: 28px 34px; 2954 overflow: hidden; 2955 color: #ffffff; 2956 background: linear-gradient( 2957 135deg, 2958 #6814ff 0%, 2959 #4b13d1 42%, 2960 #2b057f 100% 2961 ); 2962 border-radius: 14px; 2963 box-shadow: 0 18px 42px rgba(75, 19, 209, 0.18); 2964} 2965 2966/* Completely removes the light background effect */ 2967.psafe-cta-band::before { 2968 display: none; 2969 content: none; 2970} 2971 2972.psafe-cta-left { 2973 position: relative; 2974 z-index: 1; 2975 display: grid; 2976 grid-template-columns: 105px minmax(0, 1fr); 2977 align-items: center; 2978 gap: 22px; 2979} 2980 2981/* Rectangle around the logo */ 2982.psafe-cta-phone { 2983 display: flex; 2984 align-items: center; 2985 justify-content: center; 2986 width: 105px; 2987 height: 105px; 2988 padding: 13px; 2989 overflow: hidden; 2990 background: linear-gradient( 2991 135deg, 2992 rgba(49, 4, 150, 0.82), 2993 rgba(112, 29, 255, 0.92) 2994 ); 2995 border: 1px solid rgba(255, 255, 255, 0.08); 2996 border-radius: 20px; 2997 box-shadow: 2998 inset 0 0 18px rgba(255, 255, 255, 0.08), 2999 0 10px 24px rgba(20, 0, 70, 0.18); 3000} 3001 3002.psafe-cta-phone-shield { 3003 display: flex; 3004 align-items: center; 3005 justify-content: center; 3006 width: 79px; 3007 height: 79px; 3008 overflow: visible; 3009 background: transparent; 3010 border: 0; 3011 border-radius: 0; 3012 box-shadow: none; 3013} 3014 3015.psafe-cta-phone-shield img { 3016 display: block; 3017 width: 78px; 3018 height: 78px; 3019 object-fit: contain; 3020 object-position: center; 3021 background: transparent; 3022 border: 0; 3023 border-radius: 0; 3024 box-shadow: none; 3025} 3026 3027.psafe-cta-content { 3028 min-width: 0; 3029} 3030 3031.psafe-cta-title { 3032 margin: 0 0 8px; 3033 color: #ffffff; 3034 font-size: 22px; 3035 font-weight: 800; 3036 line-height: 1.15; 3037 letter-spacing: -0.3px; 3038} 3039 3040.psafe-cta-text { 3041 max-width: 430px; 3042 margin: 0; 3043 color: rgba(255, 255, 255, 0.88); 3044 font-size: 14.5px; 3045 line-height: 1.45; 3046} 3047 3048.psafe-cta-center { 3049 position: relative; 3050 z-index: 1; 3051 text-align: center; 3052} 3053 3054.psafe-cta-button { 3055 display: inline-flex; 3056 align-items: center; 3057 justify-content: center; 3058 padding: 14px 26px; 3059 color: #4b13d1 !important; 3060 font-size: 14px; 3061 font-weight: 800; 3062 text-decoration: none !important; 3063 background: #ffffff; 3064 border-radius: 9px; 3065 box-shadow: 0 12px 26px rgba(20, 0, 70, 0.18); 3066 transition: 3067 transform 0.2s ease, 3068 box-shadow 0.2s ease; 3069} 3070 3071.psafe-cta-button:hover { 3072 transform: translateY(-2px); 3073 box-shadow: 0 16px 32px rgba(20, 0, 70, 0.24); 3074} 3075 3076.psafe-cta-link { 3077 display: inline-block; 3078 margin-top: 12px; 3079 color: #ffffff !important; 3080 font-size: 13.5px; 3081 font-weight: 800; 3082 text-decoration: underline !important; 3083 text-underline-offset: 3px; 3084} 3085 3086.psafe-cta-right { 3087 position: relative; 3088 z-index: 1; 3089 padding-left: 32px; 3090 border-left: 1px dashed rgba(255, 255, 255, 0.32); 3091} 3092 3093.psafe-cta-right h3 { 3094 margin: 0 0 8px; 3095 color: #ffffff; 3096 font-size: 21px; 3097 font-weight: 800; 3098 line-height: 1.15; 3099 letter-spacing: -0.3px; 3100} 3101 3102.psafe-cta-right p { 3103 margin: 0 0 10px; 3104 color: rgba(255, 255, 255, 0.88); 3105 font-size: 14.5px; 3106 line-height: 1.45; 3107} 3108 3109.psafe-cta-right a { 3110 color: #ffffff !important; 3111 font-size: 13.5px; 3112 font-weight: 800; 3113 text-decoration: underline !important; 3114 text-underline-offset: 3px; 3115} 3116 3117@media (max-width: 920px) { 3118 .psafe-cta-band { 3119 grid-template-columns: 1fr; 3120 gap: 24px; 3121 padding: 28px; 3122 } 3123 3124 .psafe-cta-center { 3125 text-align: left; 3126 } 3127 3128 .psafe-cta-right { 3129 padding-top: 22px; 3130 padding-left: 0; 3131 border-top: 1px dashed rgba(255, 255, 255, 0.32); 3132 border-left: 0; 3133 } 3134} 3135 3136@media (max-width: 560px) { 3137 .psafe-cta-band-section { 3138 padding: 5px 20px 42px; 3139 } 3140 3141 .psafe-cta-band { 3142 padding: 24px 20px; 3143 } 3144 3145 .psafe-cta-left { 3146 grid-template-columns: 1fr; 3147 gap: 18px; 3148 } 3149 3150 .psafe-cta-phone { 3151 width: 96px; 3152 height: 96px; 3153 padding: 12px; 3154 border-radius: 18px; 3155 } 3156 3157 .psafe-cta-phone-shield { 3158 width: 72px; 3159 height: 72px; 3160 } 3161 3162 .psafe-cta-phone-shield img { 3163 width: 72px; 3164 height: 72px; 3165 } 3166 3167 .psafe-cta-title { 3168 font-size: 20px; 3169 } 3170 3171 .psafe-cta-button { 3172 width: 100%; 3173 } 3174} 3175</style> 3176 3177<section class="psafe-cta-band-section"> 3178 <div class="psafe-cta-band"> 3179 3180 <div class="psafe-cta-left"> 3181 3182 <div class="psafe-cta-phone"> 3183 <div class="psafe-cta-phone-shield"> 3184 <img decoding="async" 3185 src="https://www.psafe.com/wp-content/uploads/2026/07/DFNDR-PNG-LOGO.png" 3186 alt="dfndr Security app icon" 3187 > 3188 </div> 3189 </div> 3190 3191 <div class="psafe-cta-content"> 3192 <h2 class="psafe-cta-title"> 3193 Discover dfndr Security 3194 </h2> 3195 3196 <p class="psafe-cta-text"> 3197 PSafe’s security app helps Android users protect their phones 3198 against online scams, suspicious links, and other digital threats. 3199 </p> 3200 </div> 3201 3202 </div> 3203 3204 <div class="psafe-cta-center"> 3205 3206 <a 3207 class="psafe-cta-button" 3208 href="https://utm-psafe.vercel.app/r/ue0Ut8" 3209 target="_blank" 3210 rel="noopener" 3211 > 3212 Download for free 3213 </a> 3214 3215 <br> 3216 3217 <a class="psafe-cta-link" href="/dfndr-security/"> 3218 Learn more about the app â 3219 </a> 3220 3221 </div> 3222 3223 <div class="psafe-cta-right"> 3224 3225 <h3>Developed by PSafe</h3> 3226 3227 <p> 3228 A specialist in digital security and mobile protection. 3229 </p> 3230 3231 <a href="/about-psafe/"> 3232 Learn more about PSafe â 3233 </a> 3234 3235 </div> 3236 3237 </div> 3238</section> 3239 </div><!-- .entry-content --> 3240</article><!-- #post-## --> 3241 3242 3243 3244 </main><!-- #main --> 3245 </div><!-- #primary --> 3246 3247 3248 </div><!-- #content --> 3249 3250 <footer id="colophon" class="site-footer" role="contentinfo"> 3251 <div class="grid-container"> 3252 <div class="grid-x grid-padding-x"> 3253 <div class="cell small-12 show-for-large"> 3254 <div class="menu-footer-container"><ul id="menu-footer" class="footer-menu"><li id="menu-item-1420" class="f-purple menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-1420"><a href="#">Products and Services</a> 3255<ul class="sub-menu"> 3256 <li id="menu-item-1547" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1547"><a href="https://www.psafe.com/dfndr-security/">dfndr security</a></li> 3257 <li id="menu-item-9466" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9466"><a href="https://www.psafe.com/dfndr-lab">dfndr lab</a></li> 3258</ul> 3259</li> 3260<li id="menu-item-1421" class="f-purple menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-1421"><a href="#">Company</a> 3261<ul class="sub-menu"> 3262 <li id="menu-item-9287" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-9287"><a href="https://cyberlabs.ai/">CyberLabs Group</a></li> 3263</ul> 3264</li> 3265<li id="menu-item-1423" class="f-purple menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-1423"><a href="/en/blog/">Blog</a> 3266<ul class="sub-menu"> 3267 <li id="menu-item-1438" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1438"><a href="/en/blog/category/security/">Mobile Security</a></li> 3268 <li id="menu-item-1439" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1439"><a href="/en/blog/category/tips-tutoriais/">Tips & Tutorials</a></li> 3269</ul> 3270</li> 3271<li id="menu-item-1424" class="f-purple menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-1424"><a href="/help/">Help</a> 3272<ul class="sub-menu"> 3273 <li id="menu-item-4694" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4694"><a href="https://www.psafe.com/report-fake-virus-alerts/">
3273Report Fake Virus Alerts</a></li> 3274 <li id="menu-item-9703" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-9703"><a href="https://www.psafe.com/privacy-portal/">Privacy Portal</a></li> 3275 <li id="menu-item-6352" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-6352"><a href="/help/">FAQ</a></li> 3276</ul> 3277</li> 3278</ul></div> </div> 3279 <div class="site-badge cell small-12 medium-12 small-order-2 medium-order-1"> 3280 <div id="cyberlabs-security-badge" lang=en></div> 3281 </div> 3282 <div class="site-meta cell small-12 medium-8 small-order-2 medium-order-1"> 3283 <p>© 2026 PSafe<br /> 3284<span style="font-size: 14px;"><a class="priv" href="https://www.psafe.com/terms-of-use/">Terms of Use</a><a class="enterprise" href="/enterprise/terms-of-use/">Terms of Use</a> – <a class="priv" href="https://www.psafe.com/privacy-policy/">Privacy Policy</a><a class="enterprise" href="/enterprise/privacy-policy/">Privacy Policy</a> – <a class="priv" href="https://www.psafe.com/license-agreement/">License Agreement</a><a class="enterprise" href="/enterprise/license-and-services-agreement/">License Agreement</a> – <a href="https://www.psafe.com/promotion-policy/">Promotion Policy</a></span></p> 3285 </div> 3286 <div class="site-social cell small-12 medium-4 small-order-1 medium-order-2"> 3287 <div class="social-icons">Follow us:<a href="https://www.facebook.com/PSafeTechnology" target="_blank"><div class="social-icon"><i class="fab fa-facebook-f"></i></div></a><a href="https://www.linkedin.com/company/psafe/" target="_blank"><div class="social-icon"><i class="fab fa-linkedin-in"></i></div></a><a href="https://www.youtube.com/c/dfndr" target="_blank"><div class="social-icon"><i class="fab fa-youtube"></i></div></a><a href="https://twitter.com/dfndr" target="_blank"><div class="social-icon"><i class="fab fa-twitter"></i></div></a></div> </div> 3288 </footer><!-- #colophon --> 3289 3290 3291 </div><!-- #page --> 3292
3293<script type="speculationrules"> 3294{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/tonykuehn/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 3295</script>
3295 3296<!--googleoff: all--><div id="cookie-law-info-bar" data-nosnippet="true"><span>This site may use cookies to support specific features and improve the user experience. By using this website with cookies enabled on your browser, you are agreeing to our use of cookies. <a href="https://www.psafe.com/privacy-policy/" id="CONSTANT_OPEN_URL" target="_blank" class="cli-plugin-main-link" style="display:inline-block;margin:5px 20px 5px 20px">Find out more in our Privacy Policy.</a><a role="button" data-cli_action="accept" id="cookie_action_close_header" class="medium cli-plugin-button cli-plugin-main-button cookie_action_close_header cli_action_button wt-cli-accept-btn" style="display:inline-block;margin:5px">ACCEPT</a></span></div><div id="cookie-law-info-again" style="display:none" data-nosnippet="true"><span id="cookie_hdr_showagain">Cookies Policy</span></div><div class="cli-modal" data-nosnippet="true" id="cliSettingsPopup" tabindex="-1" role="dialog" aria-labelledby="cliSettingsPopup" aria-hidden="true"> 3297 <div class="cli-modal-dialog" role="document"> 3298 <div class="cli-modal-content cli-bar-popup"> 3299 <button type="button" class="cli-modal-close" id="cliModalClose"> 3300 <svg class="" viewBox="0 0 24 24"><path d="M19 6.41l-1.41-1.41-5.59 5.59-5.59-5.59-1.41 1.41 5.59 5.59-5.59 5.59 1.41 1.41 5.59-5.59 5.59 5.59 1.41-1.41-5.59-5.59z"></path><path d="M0 0h24v24h-24z" fill="none"></path></svg> 3301 <span class="wt-cli-sr-only">Close</span> 3302 </button> 3303 <div class="cli-modal-body"> 3304 <div class="cli-container-fluid cli-tab-container"> 3305 <div class="cli-row"> 3306 <div class="cli-col-12 cli-align-items-stretch cli-px-0"> 3307 <div class="cli-privacy-overview"> 3308 <h4>PolÃtica de Privacidade</h4> <div class="cli-privacy-content"> 3309 <div class="cli-privacy-content-text"><em>Cookies</em> são pequenos arquivos de dados que um site envia e são armazenados em seu Dispositivo enquanto você está vendo um site. Os cookies podem ser utilizados para muitas finalidades, inclusive para monitorar o uso de sites, personalizar um conteúdo especÃfico aos seus interesses, garantir que você não veja o mesmo anúncio repetidamente, acelerar suas pesquisas e compras, reconhecê-lo quando você voltar aos sites, e/ou armazenar seu nome de usuário e senha para que você não precise reinseri-lo cada vez que você visitar algum site. Você pode se recusar a aceitar cookies através das configurações do seu navegador. No entanto, ao desativar os cookies no seu Dispositivo, alguns recursos dos nossos Websites e/ou Serviços podem não funcionar corretamente. <a href="https://www.psafe.com/pt-br/politica-de-privacidade/#V" target="_blank" rel="noopener"><strong>Veja nossa PolÃtica de Privacidade.</strong></a></div> 3310 </div> 3311 <a class="cli-privacy-readmore" aria-label="Show more" role="button" data-readmore-text="Show more" data-readless-text="Show less"></a> </div> 3312 </div> 3313 <div class="cli-col-12 cli-align-items-stretch cli-px-0 cli-tab-section-container"> 3314 <div class="cli-tab-section"> 3315 <div class="cli-tab-header"> 3316 <a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="necessary" data-toggle="cli-toggle-tab"> 3317 Necessary </a> 3318 <div class="wt-cli-necessary-checkbox"> 3319 <input type="checkbox" class="cli-user-preference-checkbox" id="wt-cli-checkbox-necessary" data-id="checkbox-necessary" checked="checked" /> 3320 <label class="form-check-label" for="wt-cli-checkbox-necessary">Necessary</label> 3321 </div> 3322 <span class="cli-necessary-caption">Always Enabled</span> 3323 </div> 3324 <div class="cli-tab-content"> 3325 <div class="cli-tab-pane cli-fade" data-id="necessary"> 3326 <div class="wt-cli-cookie-description"> 3327 </div> 3328 </div> 3329 </div> 3330 </div> 3331 </div> 3332 </div> 3333</div> 3334 </div> 3335 <div class="cli-modal-footer"> 3336 <div class="wt-cli-element cli-container-fluid cli-tab-container"> 3337 <div class="cli-row"> 3338 <div class="cli-col-12 cli-align-items-stretch cli-px-0"> 3339 <div class="cli-tab-footer wt-cli-privacy-overview-actions"> 3340 3341 <a id="wt-cli-privacy-save-btn" role="button" tabindex="0" data-cli-action="accept" class="wt-cli-privacy-btn cli_setting_save_button wt-cli-privacy-accept-btn cli-btn">SAVE & ACCEPT</a> 3342 </div> 3343 3344 </div>
3345 </div> 3346 </div> 3347 </div> 3348 </div> 3349 </div> 3350</div> 3351<div class="cli-modal-backdrop cli-fade cli-settings-overlay"></div> 3352<div class="cli-modal-backdrop cli-fade cli-popupbar-overlay"></div> 3353<!--googleon: all-->
3353<script id="bodhi-dompurify-library-js" src="https://www.psafe.com/wp-content/plugins/svg-support/vendor/DOMPurify/DOMPurify.min.js"></script>
vendor: 1 bytes, line 3353
3353
3354<script id="bodhi_svg_inline-js-extra"> 3355var svgSettings = {"skipNested":""}; 3356//# sourceURL=bodhi_svg_inline-js-extra 3357</script>
vendor: 1 bytes, line 3357
3357
3358<script id="bodhi_svg_inline-js" src="https://www.psafe.com/wp-content/plugins/svg-support/js/min/svgs-inline-min.js"></script>
vendor: 1 bytes, line 3358
3358
3359<script id="bodhi_svg_inline-js-after"> 3360cssTarget={"Bodhi":"img.style-svg","ForceInlineSVG":"style-svg"};ForceInlineSVGActive="false";frontSanitizationEnabled="on"; 3361//# sourceURL=bodhi_svg_inline-js-after 3362</script>
vendor: 1 bytes, line 3362
3362
3363<script id="tonykuehn-skip-link-focus-fix-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/js/skip-link-focus-fix.js"></script>
vendor: 1 bytes, line 3363
3363
3364<script id="foundationjs-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/foundation/js/vendor/foundation.min.js"></script>
vendor: 1 bytes, line 3364
3364
3365<script id="slick-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/slick/slick.min.js"></script>
vendor: 1 bytes, line 3365
3365
3366<script id="slick-init-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/slick/slick-init.js"></script>
vendor: 1 bytes, line 3366
3366
3367<script id="jquery.event.move.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/card_slider/js/jquery.event.move.js"></script>
vendor: 1 bytes, line 3367
3367
3368<script id="jquery.event.swipe.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/card_slider/js/jquery.event.swipe.js"></script>
vendor: 1 bytes, line 3368
3368
3369<script id="jquery.cardslider.min.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/card_slider/js/jquery.cardslider.min.js"></script>
vendor: 1 bytes, line 3369
3369
3370<script id="card_init.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/card_slider/js/card_init.js"></script>
vendor: 1 bytes, line 3370
3370
3371<script id="menu.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/js/menu.js"></script>
vendor: 1 bytes, line 3371
3371
3372<script id="fontawesome-all.min.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/fontawesome/js/fontawesome-all.min.js"></script>
vendor: 1 bytes, line 3372
3372
3373<script id="site_notice.js-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/js/site_notice.js"></script>
vendor: 1 bytes, line 3373
3373
3374<script id="my_loadmore-js-extra"> 3375var tk_loadmore_params = {"ajaxurl":"https://www.psafe.com/wp-admin/admin-ajax.php"}; 3376//# sourceURL=my_loadmore-js-extra 3377</script>
vendor: 1 bytes, line 3377
3377
3378<script id="my_loadmore-js" src="https://www.psafe.com/wp-content/themes/tonykuehn/assets/js/myloadmore.js"></script>
vendor: 1 bytes, line 3378
3378
3379<script id="wp-emoji-settings" type="application/json"> 3380{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.psafe.com/wp-includes/js/wp-emoji-release.min.js"}} 3381</script>
vendor: 1 bytes, line 3381
3381
3382<script type="module"> 3383/*! This file is auto-generated */ 3384var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 3385//# sourceURL=https://www.psafe.com/wp-includes/js/wp-emoji-loader.min.js 3386</script>
3386 3387
3388<script>jQuery(document).foundation();</script>
3388 3389</body> 3390</html> 3391 3392<!-- 3393Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin 3394 3395Page Caching using Disk: Enhanced 3396 3397Served from: www.psafe.com @ 2026-09-21 16:40:11 by W3 Total Cache 3398-->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.