PageSourceSearch

https://www.psafe.com/digital-security/

html psafe.com collected 2026-09-24 09:54:31 UTC 116,873 bytes, 3,398 lines download raw bytes

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&#038;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">&times;</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&#8230;
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&#8217;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&#8217;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 &#038; 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> &#8211; <a class="priv" href="https://www.psafe.com/privacy-policy/">Privacy Policy</a><a class="enterprise" href="/enterprise/privacy-policy/">Privacy Policy</a> &#8211; <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> &#8211; <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 &amp; 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.