1 2<!DOCTYPE HTML> 3<html lang="en"> 4<head> 5 <meta charset="utf-8"> 6 <title id="title">PTMSC News & Events</title> <meta name="description" content="Stay updated with Portimão Surf Clube! Get competition results, training news, event details, and club announcements. Connect with the athletes and surf spirit." /> 7 <meta property="og:url" content="https://www.portimaosurfclube.pt/news-and-events" /> 8 <meta property="og:type" content="website" /> 9 <meta property="og:title" content="PTMSC News & Events" /> 10 <meta property="og:description" content="Stay updated with Portimão Surf Clube! Get competition results, training news, event details, and club announcements. Connect with the athletes and surf spirit." /> 11 <meta property="fb:app_id" content="1885501691506569"> 12 <meta property="fb:admins" content="682149650"> 13 14 <link rel="preconnect" href="https://use.typekit.net" crossorigin> 15 <link rel="preconnect" href="https://cloudflarestream.com" crossorigin> 16 17 <meta property="og:image" content="https://www.portimaosurfclube.pt/_design/PTMSC-open-graph.jpg" /> 18<meta name="twitter:card" content="summary_large_image"> 19<meta name="twitter:site" content="@portimaosurfclube"> 20<meta name="twitter:creator" content="@codeshore"> 21<meta name="twitter:title" content="PTMSC News & Events"> 22<meta name="twitter:description" content="Stay updated with Portimão Surf Clube! Get competition results, training news, event details, and club announcements. Connect with the athletes and surf spirit."> 23<meta name="twitter:image" content="https://www.portimaosurfclube.pt/_design/PTMSC-open-graph.jpg"> 24 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no"> 25 26
26<script src="https://www.portimaosurfclube.pt/_jquery/jquery-3.5.1.min.js"></script>
26 27 28
28<script src="https://algarve.media/_scroll-reveal/scroll-reveal.js"></script>
28 29 <link href="https://algarve.media/_scroll-reveal/scroll-reveal.css" rel="stylesheet"> 30 31 <link href="//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"> 32 <link href="https://www.portimaosurfclube.pt/_font-awesome/css/all.css" rel="stylesheet"> 33 <!-- 34 <link href="https://www.portimaosurfclube.pt/_bootstrap/bootstrap.min.css" rel="stylesheet"> 35
35<script src="https://www.portimaosurfclube.pt/_bootstrap/bootstrap.bundle.min.js"></script>
35 36 --> 37 <link 38 href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" 39 rel="stylesheet" 40 integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" 41 crossorigin="anonymous"> 42
42<script 43 src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" 44 integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" 45 crossorigin="anonymous"></script>
45 46 47 <meta name="apple-mobile-web-app-title" content="PTMSC - Portimão Surf Clube" /> 48 <link rel="shortcut icon" href="https://www.portimaosurfclube.pt/_design/favicon/favicon.ico" /> 49 <link rel="icon" href="https://www.portimaosurfclube.pt/_design/favicon/majak.svg" type="image/svg+xml" /> 50 <link rel="apple-touch-icon" sizes="57x57" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-57x57.png"> 51 <link rel="apple-touch-icon" sizes="60x60" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-60x60.png"> 52 <link rel="apple-touch-icon" sizes="72x72" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-72x72.png"> 53 <link rel="apple-touch-icon" sizes="76x76" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-76x76.png"> 54 <link rel="apple-touch-icon" sizes="114x114" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-114x114.png"> 55 <link rel="apple-touch-icon" sizes="120x120" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-120x120.png"> 56 <link rel="apple-touch-icon" sizes="144x144" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-144x144.png"> 57 <link rel="apple-touch-icon" sizes="152x152" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-152x152.png"> 58 <link rel="apple-touch-icon" sizes="180x180" href="https://www.portimaosurfclube.pt/_design/favicon/apple-icon-180x180.png"> 59 <link rel="icon" type="image/png" sizes="192x192" href="https://www.portimaosurfclube.pt/_design/favicon/android-icon-192x192.png"> 60 <link rel="icon" type="image/png" sizes="32x32" href="https://www.portimaosurfclube.pt/_design/favicon/favicon-32x32.png"> 61 <link rel="icon" type="image/png" sizes="96x96" href="https://www.portimaosurfclube.pt/_design/favicon/favicon-96x96.png"> 62 <link rel="icon" type="image/png" sizes="16x16" href="https://www.portimaosurfclube.pt/_design/favicon/favicon-16x16.png"> 63 <link rel="manifest" href="https://www.portimaosurfclube.pt/_design/favicon/manifest.json"> 64 <meta name="msapplication-TileColor" content="#ffffff"> 65 <meta name="msapplication-TileImage" content="https://www.portimaosurfclube.pt/_design/favicon/ms-icon-144x144.png"> 66 <meta name="theme-color" content="#ffffff"> 67 68 <style> 69 </style> 70 71 72
72<script type="text/javascript"> 73 var waitForFinalEvent = (function () { 74 var timers = {}; 75 return function (callback, ms, uniqueId) { 76 if (!uniqueId) { 77 uniqueId = "rockandroll_17914506481843935172"; 78 } 79 if (timers[uniqueId]) { 80 clearTimeout (timers[uniqueId]); 81 } 82 timers[uniqueId] = setTimeout(callback, ms); 83 }; 84 })(); 85 86 87 var isMobile = false; 88 $(function () { 89 isMobile = /iPhone|iPad|iPod|Android|BlackBerry|IEMobile|Opera Mini/i 90 .test(navigator.userAgent); 91 92 if (isMobile || $(window).width() < 992) { 93 $("body").addClass("mobile"); 94 } else { 95 $("body").addClass("desktop"); 96 } 97 }); 98 99 //alert("Device Type Detected: " + navigator.maxTouchPoints); 100 101 102 103 // device detection 104 /* 105 if() { 106 isMobile = true; 107 $("body").addClass("mobile"); 108 } else { 109 $("body").addClass("desktop"); 110 } 111 */ 112 113 114 $(function(){ 115 116 $('[data-remove-class]').each(function(){ 117 118 //$(this).parents('div').removeClass($(this).data("remove-class")); 119 //$(this).removeClass($(this).data("remove-class")); 120 121 }); 122 123 124 $('[data-parent-href]').each(function(){ 125 126 $(this).parent('div').mouseover(function(){ 127 $(this).css("cursor","pointer"); 128 }); 129 130 $(this).click(function(){ 131 window.location=$(this).data("parent-href"); 132 }); 133 134 }); 135 136 $('[data-href]').each(function(){ 137 138 $(this).mouseover(function(){ 139 $(this).css("cursor","pointer"); 140 }); 141 142 $(this).click(function(){ 143 window.location=$(this).data("href"); 144 }); 145 146 }); 147 148 // Every time a modal is shown, if it has an autofocus element, focus on it. 149 $('.modal').on('shown.bs.modal', function() { 150 $(this).find('[autofocus]').focus(); 151 }); 152 }); 153 </script>
153 154
154<script type="text/javascript"> 155 var Latinise={};Latinise.latin_map={"Ã":"A","Ä":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ç":"A","Ã":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ã":"A","Ç":"A","Ȧ":"A","Ç ":"A","Ạ":"A","È":"A","Ã":"A","Ả":"A","È":"A","Ä":"A","Ä":"A","à ":"A","Ǻ":"A","á¸":"A","Ⱥ":"A","Ã":"A","ê²":"AA","Ã":"AE","Ǽ":"AE","Ç¢":"AE","ê´":"AO","ê¶":"AU","ê¸":"AV","êº":"AV","ê¼":"AY","á¸":"B","á¸":"B","Æ":"B","á¸":"B","É":"B","Æ":"B","Ä":"C","Ä":"C","Ã":"C","á¸":"C","Ä":"C","Ä":"C","Æ":"C","È»":"C","Ä":"D","á¸":"D","á¸":"D","á¸":"D","á¸":"D","Æ":"D","á¸":"D","Dz":"D","Ç ":"D","Ä":"D","Æ":"D","DZ":"DZ","Ç":"DZ","Ã":"E","Ä":"E","Ä":"E","Ȩ":"E","á¸":"E","Ã":"E","Ế":"E","á»":"E","á»":"E","á»":"E","á»":"E","á¸":"E","Ã":"E","Ä":"E","Ẹ":"E","È":"E","Ã":"E","Ẻ":"E","È":"E","Ä":"E","á¸":"E","á¸":"E","Ä":"E","É":"E","Ẽ":"E","á¸":"E","êª":"ET","á¸":"F","Æ":"F","Ç´":"G","Ä":"G","Ǧ":"G","Ä¢":"G","Ä":"G","Ä ":"G","Æ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","È":"H","Ḩ":"H","Ĥ":"H","â±§":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Ã":"I","Ĭ":"I","Ç":"I","Ã":"I","Ã":"I","Ḯ":"I","İ":"I","á»":"I","È":"I","Ã":"I","á»":"I","È":"I","Ī":"I","Ä®":"I","Æ":"I","Ĩ":"I","Ḭ":"I","ê¹":"D","ê»":"F","ê½":"G","ê":"R","ê":"S","ê":"T","ê¬":"IS","Ä´":"J","É":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","ê":"K","Ḳ":"K","Æ":"K","Ḵ":"K","ê":"K","ê":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ä»":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","â± ":"L","ê":"L","Ḻ":"L","Ä¿":"L","â±¢":"L","Ç":"L","Å":"L","Ç":"LJ","Ḿ":"M","á¹":"M","á¹":"M","â±®":"M","Å":"N","Å":"N","Å ":"N","á¹":"N","á¹":"N","á¹":"N","Ǹ":"N","Æ":"N","á¹":"N","È ":"N","Ç":"N","Ã":"N","Ç":"NJ","Ã":"O","Å":"O","Ç":"O","Ã":"O","á»":"O","á»":"O","á»":"O","á»":"O","á»":"O","Ã":"O","Ȫ":"O","È®":"O","Ȱ":"O","á»":"O","Å":"O","È":"O","Ã":"O","á»":"O","Æ ":"O","á»":"O","Ợ":"O","á»":"O","á»":"O","á» ":"O","È":"O","ê":"O","ê":"O","Å":"O","á¹":"O","á¹":"O","Æ":"O","Ǫ":"O","Ǭ":"O","Ã":"O","Ǿ":"O","Ã":"O","á¹":"O","á¹":"O","Ȭ":"O","Æ¢":"OI","ê":"OO","Æ":"E","Æ":"O","È¢":"OU","á¹":"P","á¹":"P","ê":"P","Ƥ":"P","ê":"P","â±£":"P","ê":"P","ê":"Q","ê":"Q","Å":"R","Å":"R","Å":"R","á¹":"R","á¹":"R","á¹":"R","È":"R","È":"R","á¹":"R","É":"R","Ɽ":"R","ê¾":"C","Æ":"E","Å":"S","Ṥ":"S","Å ":"S","Ṧ":"S","Å":"S","Å":"S","È":"S","á¹ ":"S","á¹¢":"S","Ṩ":"S","Ť":"T","Å¢":"T","á¹°":"T","È":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","á¹®":"T","Æ®":"T","Ŧ":"T","Ɐ":"A","ê":"L","Æ":"M","É ":"V","ê¨":"TZ","Ã":"U","Ŭ":"U","Ç":"U","Ã":"U","á¹¶":"U","Ã":"U","Ç":"U","Ç":"U","Ç":"U","Ç":"U","á¹²":"U","Ụ":"U","Ű":"U","È":"U","Ã":"U","Ủ":"U","Ư":"U","Ứ":"U","á»°":"U","Ừ":"U","Ử":"U","á»®":"U","È":"U","Ū":"U","Ṻ":"U","Ų":"U","Å®":"U","Ũ":"U","Ṹ":"U","á¹´":"U","ê":"V","á¹¾":"V","Ʋ":"V","á¹¼":"V","ê ":"VY","áº":"W","Å´":"W","áº":"W","áº":"W","áº":"W","áº":"W","â±²":"W","áº":"X","áº":"X","Ã":"Y","Ŷ":"Y","Ÿ":"Y","áº":"Y","á»´":"Y","Ỳ":"Y","Ƴ":"Y","á»¶":"Y","Ỿ":"Y","Ȳ":"Y","É":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","áº":"Z","Ⱬ":"Z","Å»":"Z","áº":"Z","Ȥ":"Z","áº":"Z","Ƶ":"Z","IJ":"IJ","Å":"OE","á´":"A","á´":"AE","Ê":"B","á´":"B","á´":"C","á´ ":"D","á´":"E","ê°":"F","É¢":"G","Ê":"G","Ê":"H","ɪ":"I","Ê":"R","á´":"J","á´":"K","Ê":"L","á´":"L","á´":"M","É´":"N","á´":"O","ɶ":"OE","á´":"O","á´":"OU","á´":"P","Ê":"R","á´":"N","á´":"R","ê±":"S","á´":"T","â±»":"E","á´":"R","á´":"U","á´ ":"V","á´¡":"W","Ê":"Y","á´¢":"Z","á":"a","Ä":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","Ç":"a","â":"a","ấ":"a","áº":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","Ç":"a","ȧ":"a","Ç¡":"a","ạ":"a","È":"a","à ":"a","ả":"a","È":"a","Ä":"a","Ä ":"a","á¶":"a","áº":"a","Ã¥":"a","Ç»":"a","á¸":"a","â±¥":"a","ã":"a","ê³":"aa","æ":"ae","ǽ":"ae","Ç£":"ae","êµ":"ao","ê·":"au","ê¹":"av","ê»":"av","ê½":"ay","á¸":"b","Ḡ":"b","É":"b","á¸":"b","ᵬ":"b","á¶":"b","Æ":"b","Æ":"b","ɵ":"o","Ä":"
155c","Ä":"c","ç":"c","á¸":"c","Ä":"c","É":"c","Ä":"c","Æ":"c","ȼ":"c","Ä":"d","á¸":"d","á¸":"d","È¡":"d","á¸":"d","á¸":"d","É":"d","á¶":"d","á¸":"d","áµ":"d","á¶":"d","Ä":"d","É":"d","Æ":"d","ı":"i","È·":"j","É":"j","Ê":"j","dz":"dz","Ç":"dz","é":"e","Ä":"e","Ä":"e","È©":"e","á¸":"e","ê":"e","ế":"e","á»":"e","á»":"e","á»":"e","á» ":"e","á¸":"e","ë":"e","Ä":"e","ẹ":"e","È ":"e","è":"e","ẻ":"e","È":"e","Ä":"e","á¸":"e","á¸":"e","ⱸ":"e","Ä":"e","á¶":"e","É":"e","ẽ":"e","á¸":"e","ê«":"et","á¸":"f","Æ":"f","áµ®":"f","á¶":"f","ǵ":"g","Ä":"g","ǧ":"g","Ä£":"g","Ä":"g","Ä¡":"g","É ":"g","ḡ":"g","á¶":"g","Ç¥":"g","ḫ":"h","È":"h","ḩ":"h","Ä¥":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","áº":"h","ħ":"h","Æ":"hv","Ã":"i","Ä":"i","Ç":"i","î":"i","ï":"i","ḯ":"i","á»":"i","È":"i","ì":"i","á»":"i","È":"i","Ä«":"i","į":"i","á¶":"i","ɨ":"i","Ä©":"i","á¸":"i","êº":"d","ê¼":"f","áµ¹":"g","ê":"r","ê ":"s","ê":"t","ê":"is","ǰ":"j","ĵ":"j","Ê":"j","É":"j","ḱ":"k","Ç©":"k","Ä·":"k","ⱪ":"k","ê":"k","ḳ":"k","Æ":"k","ḵ":"k","á¶":"k","ê":"k","ê ":"k","ĺ":"l","Æ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","È´":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ê":"l","ḻ":"l","Å":"l","É«":"l","á¶ ":"l","É":"l","Å":"l","Ç":"lj","Å¿":"s","áº":"s","áº":"s","áº":"s","ḿ":"m","á¹":"m","á¹":"m","ɱ":"m","ᵯ":"m","á¶":"m","Å":"n","Å":"n","Å":"n","á¹":"n","ȵ":"n","á¹ ":"n","á¹":"n","ǹ":"n","ɲ":"n","á¹":"n","Æ":"n","áµ°":"n","á¶":"n","ɳ":"n","ñ":"n","Ç":"nj","ó":"o","Å":"o","Ç":"o","ô":"o","á»":"o","á»":"o","á»":"o","á»":"o","á»":"o","ö":"o","È«":"o","ȯ":"o","ȱ":"o","á»":"o","Å":"o","È":"o","ò":"o","á»":"o","Æ¡":"o","á»":"o","ợ":"o","á»":"o","á»":"o","ỡ":"o","È":"o","ê":"o","ê":"o","ⱺ":"o","Å":"o","á¹":"o","á¹":"o","Ç«":"o","Ç":"o","ø":"o","Ç¿":"o","õ":"o","á¹":"o","á¹":"o","È":"o","Æ£":"oi","ê":"oo","É":"e","á¶":"e","É":"o","á¶":"o","È£":"ou","á¹":"p","á¹":"p","ê":"p","Æ¥":"p","áµ±":"p","á¶":"p","ê":"p","áµ½":"p","ê":"p","ê":"q","Ê ":"q","É":"q","ê":"q","Å":"r","Å":"r","Å":"r","á¹":"r","á¹":"r","á¹":"r","È":"r","ɾ":"r","áµ³":"r","È":"r","á¹":"r","ɼ":"r","áµ²":"r","á¶":"r","É":"r","ɽ":"r","â":"c","ê¿":"c","É":"e","É¿":"r","Å":"s","á¹¥":"s","Å¡":"s","á¹§":"s","Å":"s","Å":"s","È":"s","ṡ":"s","á¹£":"s","ṩ":"s","Ê":"s","áµ´":"s","á¶":"s","È¿":"s","É¡":"g","á´":"o","á´":"o","á´":"u","Å¥":"t","Å£":"t","á¹±":"t","È":"t","ȶ":"t","áº":"t","ⱦ":"t","ṫ":"t","á¹":"t","Æ":"t","ṯ":"t","áµµ":"t","Æ«":"t","Ê":"t","ŧ":"t","ᵺ":"th","É":"a","á´":"ae","Ç":"e","áµ·":"g","É¥":"h","Ê®":"h","ʯ":"h","á´":"i","Ê":"k","ê":"l","ɯ":"m","ɰ":"m","á´":"oe","ɹ":"r","É»":"r","ɺ":"r","â±¹":"r","Ê":"t","Ê":"v","Ê":"w","Ê":"y","ê©":"tz","ú":"u","Å":"u","Ç":"u","û":"u","á¹·":"u","ü":"u","Ç":"u","Ç":"u","Ç":"u","Ç":"u","á¹³":"u","ụ":"u","ű":"u","È":"u","ù":"u","á»§":"u","ư":"u","ứ":"u","á»±":"u","ừ":"u","á»":"u","ữ":"u","È":"u","Å«":"u","á¹»":"u","ų":"u","á¶":"u","ů":"u","Å©":"u","á¹¹":"u","á¹µ":"u","ᵫ":"ue","ê¸":"um","â±´":"v","ê":"v","ṿ":"v","Ê":"v","á¶":"v","â±±":"v","á¹½":"v","ê¡":"vy","áº":"w","ŵ":"w","Ạ":"w","áº":"w","áº":"w","áº":"w","â±³":"w","áº":"w","áº":"x","áº":"x","á¶":"x","ý":"y","Å·":"y","ÿ":"y","áº":"y","ỵ":"y","ỳ":"y","Æ´":"y","á»·":"y","ỿ":"y","ȳ":"y","áº":"y","É":"y","ỹ":"y","ź":"z","ž":"z","áº":"z","Ê":"z","ⱬ":"z","ż":"z","áº":"z","È¥":"z","áº":"z","áµ¶":"z","á¶":"z","Ê":"z","ƶ":"z","É":"z","ï¬":"ff","ï¬":"ffi","ï¬":"ffl","ï¬":"fi","ï¬":"fl","ij":"ij","Å":"oe","ï¬":"st","â":"a","â":"e","áµ¢":"i","â±¼":"j","â":"o","áµ£":"r","ᵤ":"u","áµ¥":"v","â":"x"}; 156 157String.prototype.latinise=function(){return this.replace(/[^A-Za-z0-9\[\] ]/g,function(a){return Latinise.latin_map[a]||a})}; 158String.prototype.latinize=String.prototype.latinise; 159String.prototype.isLatin=function(){return this==this.latinise()} 160 161</script>
161<link href="https://www.portimaosurfclube.pt/_css/style.css?v=1.0.1.3.4.1791450648" rel="stylesheet"><link href="https://www.portimaosurfclube.pt/_css/custom.css?v=1.0.4" rel="stylesheet"> 162
162<script type="text/javascript"> 163 164 function darken_screen(yesno){ 165 if( yesno == true ){ 166 document.querySelector('.screen-darken').classList.add('active'); 167 } 168 else if(yesno == false){ 169 document.querySelector('.screen-darken').classList.remove('active'); 170 } 171 } 172 173 function close_offcanvas(){ 174 darken_screen(false); 175 document.querySelector('.mobile-offcanvas.show').classList.remove('show'); 176 document.body.classList.remove('offcanvas-active'); 177 } 178 179 function show_offcanvas(offcanvas_id){ 180 darken_screen(true); 181 document.getElementById(offcanvas_id).classList.add('show'); 182 document.body.classList.add('offcanvas-active'); 183 } 184 185 document.addEventListener("DOMContentLoaded", function(){ 186 document.querySelectorAll('[data-trigger]').forEach(function(everyelement){ 187 188 let offcanvas_id = everyelement.getAttribute('data-trigger'); 189 190 everyelement.addEventListener('click', function (e) { 191 e.preventDefault(); 192 show_offcanvas(offcanvas_id); 193 $('#whatsapp-chat-widget').fadeOut(); 194 }); 195 }); 196 197 document.querySelectorAll('.btn-close').forEach(function(everybutton){ 198 199 everybutton.addEventListener('click', function (e) { 200 e.preventDefault(); 201 close_offcanvas(); 202 $('#whatsapp-chat-widget').fadeIn(); 203 }); 204 }); 205 206 document.querySelector('.screen-darken').addEventListener('click', function(event){ 207 close_offcanvas(); 208 }); 209 210 }); 211 // DOMContentLoaded end 212 213 $(document).ready(function(){ 214 $('[data-bs-toggle="tooltip"]').tooltip(); 215 }); 216 217 function blinkValidation(input_selector,alert_value) { 218 var input_selector = $(input_selector); 219 var input_selector_label = $(input_selector).next("label"); 220 221 clearInterval(blinkInterval); 222 input_selector_label.removeClass("text-danger"); 223 224 alert(alert_value); 225 226 input_selector.focus(); 227 228 var blinkInterval = setInterval(function(){ 229 input_selector_label.toggleClass("text-danger"); 230 },500); 231 232 input_selector.on("keyup change",function() { 233 clearInterval(blinkInterval); 234 input_selector_label.removeClass("text-danger"); 235 }); 236 } 237 238 239 </script>
239 240
240<script src="https://www.portimaosurfclube.pt/_jquery/modernizr-custom.js"></script>
240 241 242
242<script> 243 244 $(function(){ 245 246 $('footer a').addClass('thing'); 247 //$('.btn').addClass('fade_in_zoom'); 248 //$('.btn').addClass('fade_in_zoom'); 249 $('.btn').addClass('thing'); 250 251 252 $('footer .fade_in a').removeClass('thing'); 253 $('footer .fade_in').addClass('thing-madmax'); 254 255 }); 256 257 258 function getRandomAB() { 259 const array = new Uint8Array(1); 260 window.crypto.getRandomValues(array); 261 return (array[0] % 2 === 0) ? "_plus" : "_minus"; 262 //return Math.random() < 0.5 ? "_plus" : "_minus"; 263 } 264 265 function isInViewport(elem) { 266 const rect = elem.get(0).getBoundingClientRect(); 267 return ( 268 rect.top >= 0 && 269 rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) 270 ); 271 } 272 273 $(window).on('scroll resize', function () { 274 275 $('.anime').each(function () { 276 const $el = $(this); 277 278 // If no class_postfix stored yet, assign one randomly 279 if (!$el.data('classPostfix')) { 280 const class_postfix = getRandomAB(); 281 $el.data('classPostfix', class_postfix); 282 } 283 284 const postfix = $el.data('classPostfix'); 285 const fullClass = 'in-view' + postfix; 286 287 if (isInViewport($el)) { 288 $el.addClass(fullClass); 289 } else { 290 $el.removeClass(fullClass); 291 } 292 }); 293 294 }); 295 296 // Trigger once on page load 297 $(window).trigger('scroll'); 298 299 300 $(window).resize(function() { 301 console.log($(window).width() + ' x ' + $(window).height()); 302 }); 303 304 $(document).ready(function() { 305 306 console.log($(window).width() + ' x ' + $(window).height()); 307 308 var scrollHere = ''; 309 310 function scrollToClass(scrollHere) { 311 //alert($("#navbar_main").height()); 312 313 314 var bleed = $("#navbar_main").height(); 315 //if (Modernizr.touchevents) { 316 if(isMobile == true){ 317 // supported 318 bleed = 70; 319 } else { 320 // not-supported 321 if(bleed >= 120) bleed = 70; 322 } 323 324 325 var stop = $(scrollHere).offset().top - bleed; 326 var delay = 600; 327 $('body,html').animate({scrollTop: stop}, delay); 328 return false; 329 } 330 331 $("a.start").on("click", function(){ 332 scrollToClass(".section-content"); 333 }); 334 335 $("*[data-scrollto]").each(function(){ 336 $(this).click(function(){ 337 //alert($(this).attr('data-scrollto')); 338 scrollToClass($(this).attr('data-scrollto')); 339 }); 340 //return false; 341 }); 342 343 $("[data-copy]").on("click", function () { 344 let value = $(this).data("copy"); 345 navigator.clipboard.writeText(value).then(() => { 346 showQueuedAlert('<i class="fal fa-check fa-3x"></i><br><strong>Copied.</strong>','info',4000); 347 }); 348 return true; 349 }); 350 351 $("[data-copy-calendar]").on("click", function () { 352 let value = $(this).data("copy-calendar"); 353 navigator.clipboard.writeText(value).then(() => { 354 showQueuedAlert('<i class="fal fa-check fa-3x"></i><br><strong>Copied.</strong><br><br>Ready to paste into your favorite calendar app.<br><br><em>Note:</em> For automatic updates, <strong>subscribe to this calendar</strong> instead of <strong>importing the file</strong>.','info',4000); 355 }); 356 return true; 357 }); 358 359 360 }); 361 362 $(document).ready(function() { 363 364 function fadeOnAppear(element) { 365 var indx = $(element).index(); 366 $(element).animate({ 367 opacity: 1 368 }, 500); 369 370 } 371 372 let observer_fade = new IntersectionObserver((entries) => {
373 entries.forEach(entry => { 374 if (entry.isIntersecting) { 375 fadeOnAppear(entry.target); 376 observer_fade.unobserve(entry.target); 377 } 378 }); 379 }, { 380 threshold: 0.1 381 }); 382 383 var delayator_fade = 0; 384 $('.fade_in').each(function() { 385 delayator_fade += 100; 386 var target = this; 387 setTimeout( function() { 388 observer_fade.observe(target); 389 }, delayator_fade); 390 }); 391 392 var delayator_fade = 0; 393 $('.fade_in_nav').each(function() { 394 delayator_fade += 100; 395 var target = this; 396 setTimeout( function() { 397 observer_fade.observe(target); 398 }, delayator_fade); 399 }); 400 401 }); 402 403 404 // progress_circle START 405 $(function () { 406 const observer = new IntersectionObserver( 407 function (entries) { 408 entries.forEach(entry => { 409 if (entry.isIntersecting) { 410 // trigger animation when in view 411 animateCircle($(entry.target)); 412 } else { 413 // reset when out of view 414 resetCircle($(entry.target)); 415 } 416 }); 417 }, 418 { threshold: 0.5 } // 50% visible 419 ); 420 421 $(".circle").each(function () { 422 observer.observe(this); 423 }); 424 425 function animateCircle($circle) { 426 var $progress = $circle.find(".progress"); 427 var $number = $circle.find(".number"); 428 var percent = +$circle.data("percent"); 429 var circumference = 2 * Math.PI * 105; // r=105 430 var duration = 1500; 431 432 // Animate stroke 433 $progress.stop(true).animate({ dash: percent }, { 434 step: function (now) { 435 var offset = circumference - (circumference * now / 100); 436 $progress.css("stroke-dasharray", circumference) 437 .css("stroke-dashoffset", offset); 438 }, 439 duration: duration 440 }); 441 442 // Animate number 443 $({ val: 0 }).stop(true).animate({ val: percent }, { 444 duration: duration, 445 step: function (now) { 446 $number.text(Math.floor(now) + "%"); 447 }, 448 complete: function () { 449 $number.text(percent + "%"); 450 } 451 }); 452 } 453 454 function resetCircle($circle) { 455 var $progress = $circle.find(".progress"); 456 var $number = $circle.find(".number"); 457 var circumference = 2 * Math.PI * 105; 458 459 // Reset stroke and number 460 $progress.css("stroke-dasharray", circumference) 461 .css("stroke-dashoffset", circumference); 462 $number.text("0%"); 463 } 464 }); 465 // progress_circle END 466 467 </script>
467 468 469
469<script> 470 $(function () { 471 const STORAGE_KEY = 'bootstrap-tabs-state'; 472 const ONE_HOUR = 60 * 60 * 1000; // â 1 hour in milliseconds 473 474 // ==================== SAVE (with 1-hour expiration) ==================== 475 $(document).on('shown.bs.tab', '[data-bs-toggle="tab"], [data-bs-toggle="pill"]', function () { 476 let tabsState = localStorage.getItem(STORAGE_KEY); 477 let json = tabsState ? JSON.parse(tabsState) : {}; 478 479 // Support both old and new stored format 480 const currentTabs = (json && json.tabs) ? json.tabs : json; 481 482 const navId = $(this).closest('[role="tablist"]').attr('id'); 483 const target = $(this).attr('data-bs-target') || $(this).attr('href'); 484 485 if (navId && target) { 486 currentTabs[navId] = target; 487 488 // Save with fresh timestamp (resets the 1-hour timer on every change) 489 localStorage.setItem(STORAGE_KEY, JSON.stringify({ 490 tabs: currentTabs, 491 timestamp: Date.now() 492 })); 493 } 494 }); 495 496 // ==================== RESTORE on page load (with expiration check) ==================== 497 let tabsState = localStorage.getItem(STORAGE_KEY); 498 let json = {}; // final tabs to restore 499 let timestamp = 0; 500 501 if (tabsState) { 502 try { 503 const parsed = JSON.parse(tabsState); 504 505 if (parsed && parsed.tabs !== undefined) { 506 // New format (with timestamp) 507 json = parsed.tabs || {}; 508 timestamp = parsed.timestamp || 0; 509 } else { 510 // Old format (backward compatibility) â give it 1 hour from now 511 json = parsed || {}; 512 timestamp = Date.now(); 513 } 514 515 // Check if expired 516 if (Date.now() - timestamp > ONE_HOUR) { 517 localStorage.removeItem(STORAGE_KEY); // clear expired cache 518 json = {}; // reset to defaults 519 } 520 } catch (e) { 521 localStorage.removeItem(STORAGE_KEY); 522 json = {}; 523 } 524 } 525 526 // Restore saved tabs (works for any depth) 527 Object.keys(json).forEach(navId => { 528 const target = json[navId]; 529 const tabEl = document.querySelector( 530 `#${navId} button[data-bs-target="${target}"], #${navId} a[href="${target}"]` 531 ); 532 533 if (tabEl) { 534 const tab = new bootstrap.Tab(tabEl); 535 tab.show(); 536 } 537 }); 538 539 // Fallback: activate first button if nothing valid is saved 540 $('[role="tablist"]').each(function () { 541 const $nav = $(this); 542 const navId = $nav.attr('id'); 543 if (navId && !json[navId]) { 544 const firstBtn = $nav.find('[data-bs-toggle="tab"], [data-bs-toggle="pill"]').first()[0]; 545 if (firstBtn) { 546 new bootstrap.Tab(firstBtn).show(); 547 } 548 } 549 }); 550 }); 551 </script>
551 552 553 <!-- Matomo --> 554
554<script> 555 var _paq = window._paq = window._paq || []; 556 _paq.push(['trackPageView']); 557 _paq.push(['enableLinkTracking']); 558 (function() { 559 var u = "https://matomo.ptmsc.link/"; 560 _paq.push(['setTrackerUrl', u + 'matomo.php']); 561 _paq.push(['setSiteId', '1']); 562 var d = document, 563 g = d.createElement('script'), 564 s = d.getElementsByTagName('script')[0]; 565 g.async = true; 566 g.src = u + 'matomo.js'; 567 s.parentNode.insertBefore(g, s); 568 })(); 569 </script>
569 570 <!-- End Matomo Code --> 571 572 <link rel="alternate" hreflang="en" href="https://www.portimaosurfclube.pt/news-and-events"> 573<link rel="alternate" hreflang="x-default" href="https://www.portimaosurfclube.pt/news-and-events"> 574
575<script type="application/ld+json"> 576{"@context":"https://schema.org","@graph":[{"@type":["SportsOrganization","EducationalOrganization"],"@id":"https://www.portimaosurfclube.pt/#organization","name":"PTMSC - Portim\u00e3o Surf Clube","alternateName":["Portim\u00e3o Surf Clube","PTMSC"],"legalName":"PTMSC - Portim\u00e3o Surf Clube","url":"https://www.portimaosurfclube.pt/","logo":{"@id":"https://www.portimaosurfclube.pt/#logo"},"image":{"@id":"https://www.portimaosurfclube.pt/#logo"},"description":"Surf, bodyboard, skateboarding and stand up paddle club and academy in Portim\u00e3o, Algarve, founded in 2014 by national surfing champion Francisco Canelas. Inclusive coaching for all ages and abilities, including a Para Surfing programme.","foundingDate":"2014","foundingLocation":{"@id":"https://www.portimaosurfclube.pt/#place"},"founder":{"@id":"https://www.portimaosurfclube.pt/#person-francisco-canelas"},"sport":["Surfing","Bodyboarding","Skateboarding","Stand up paddleboarding","Para surfing"],"location":{"@id":"https://www.portimaosurfclube.pt/#place"},"address":{"@type":"PostalAddress","streetAddress":"Estrada Marina 280","addressLocality":"Portim\u00e3o","addressRegion":"Faro","postalCode":"8500-311","addressCountry":"PT"},"telephone":"+351966559739","email":"[email protected]","sameAs":["https://www.instagram.com/portimaosurfclube/","https://www.facebook.com/portimaosurfclube/","https://www.tripadvisor.com/Attraction_Review-g652081-d19327882-Reviews-Portimao_Surf_Clube-Praia_da_Rocha_Portimao_Faro_District_Algarve.html","https://g.page/r/CeqaZZxMKqUKEBM/"],"knowsAbout":["Surfing","Surf coaching","Bodyboarding","Skateboarding","Stand up paddleboarding","Adaptive surfing","Para surfing","Ocean safety","Surf forecasting"],"knowsLanguage":[{"@type":"Language","name":"English","alternateName":"en"},{"@type":"Language","name":"Portuguese","alternateName":"pt"}],"areaServed":[{"@type":"City","name":"Portim\u00e3o"},{"@type":"Place","name":"Praia da Rocha"},{"@type":"Place","name":"Alvor"},{"@type":"Place","name":"Costa Vicentina"},{"@type":"AdministrativeArea","name":"Algarve"}],"employee":[{"@id":"https://www.portimaosurfclube.pt/#person-francisco-canelas"},{"@id":"https://www.portimaosurfclube.pt/#person-filipe-costa"},{"@id":"https://www.portimaosurfclube.pt/#person-sandro-nobrega"},{"@id":"https://www.portimaosurfclube.pt/#person-emanuel-silva"}],"contactPoint":[{"@type":"ContactPoint","@id":"https://www.portimaosurfclube.pt/#contact-office","contactType":"customer service","telephone":"+351966559739","email":"[email protected]","areaServed":["PT","GB","DE","NL","FR","ES"],"availableLanguage":["English","Portuguese"],"url":"https://www.portimaosurfclube.pt/contacts"},{"@type":"ContactPoint","@id":"https://www.portimaosurfclube.pt/#contact-bookings","contactType":"reservations","telephone":"+351966559739","email":"[email protected]","availableLanguage":["English","Portuguese"],"url":"https://www.portimaosurfclube.pt/book-now"}],"identifier":[{"@type":"PropertyValue","name":"RNAAT - Registo Nacional dos Agentes de Anima\u00e7\u00e3o Tur\u00edstica","value":"158/2021","description":"Tourist activity operator licence issued by Turismo de Portugal."}]},{"@type":["SportsActivityLocation","TouristAttraction"],"@id":"https://www.portimaosurfclube.pt/#place","name":"PTMSC - Portim\u00e3o Surf Clube","url":"https://www.portimaosurfclube.pt/","description":"Surf club and academy at Praia da Rocha, Portim\u00e3o. Club secretariat inside the Santa Catarina fortress on the road to Portim\u00e3o Marina; clubhouse, changing rooms and deck beside the jetty in the Praia da Rocha sports area.","parentOrganization":{"@id":"https://www.portimaosurfclube.pt/#organization"},"image":{"@id":"https://www.portimaosurfclube.pt/#logo"},"address":{"@type":"PostalAddress","streetAddress":"Estrada Marina 280","addressLocality":"Portim\u00e3o","addressRegion":"Faro","postalCode":"8500-311","addressCountry":"PT"},"geo":{"@type":"GeoCoordinates","latitude":37.11663220006592,"longitude":-8.529049578956748},"hasMap":"https://g.page/r/CeqaZZxMKqUKEBM/","telephone":"+351966559739","currenciesAccepted":"EUR","priceRange":"\u20ac20-\u20ac800","openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["https://schema.org/Tuesday","https://schema.org/Wednesday","https://schema.org/Thursday","https://schema.org/Friday","https://schema.org/Saturday","https://schema.org/Sunday"],"opens":"09:00","closes":"17:00"}],"isAccessibleForFree":false,"publicAccess":true,"availableLanguage":["English","Portuguese"],"amenityFeature":[{"@type":"LocationFeatureSpecification","name":"Changing rooms","value":true},{"@type":"LocationFeatureSpecification","name":"Equipment storage","value":true},{"@type":"LocationFeatureSpecification","name":"Beach deck","value":true},{"@type":"LocationFeatureSpecification","name":"Adaptive surfing equipment","value":true}],"potentialAction":{"@type":"ReserveAction","name":"Book a lesson","target":{"@type":"EntryPoint","urlTemplate":"https://www.portimaosurfclube.pt/book-now","actionPlatform":["https://schema.org/DesktopWebPlatform","https://schema.org/MobileWebPlatform","https://schema.org/IOSPlatform","https://schema.org/AndroidPlatform"]},"result":{"@type":"Reservation","name":"Lesson booking"}}},{"@type":"WebSite","@id":"https://www.portimaosurfclube.pt/#website","url":"https://www.portimaosurfclube.pt/","name":"PTMSC - Portim\u00e3o Surf Clube","publisher":{"@id":"https://www.portimaosurfclube.pt/#organization"},"inLanguage":["en","pt-PT"]},{"@type":"ImageObject","@id":"https://www.portimaosurfclube.pt/#logo","url":"https://www.portimaosurfclube.pt/img/ptmsc-logo.png","contentUrl":"https://www.portimaosurfclube.pt/img/ptmsc-logo.png","width":512,"height":512},{"@type":"Person","@id":"https://www.portimaosurfclube.pt/#person-francisco-canelas","name":"Francisco Canelas","jobTitle":["Founder","Sports Director","Surf Coach"],"description":"Multi-title Portuguese national surfing champion; founder and sports director of PTMSC - Portim\u00e3o Surf Clube.","worksFor":{"@id":"https://www.portimaosurfclube.pt/#organization"},"affiliation":{"@id":"https://www.portimaosurfclube.pt/#organization"},"knowsAbout":["Surfing","Surf coaching","Competitive surfing"]},{"@type":"Person","@id":"https://www.portimaosurfclube.pt/#person-filipe-costa","name":"Filipe Costa","jobTitle":["Physiotherapist","Bodyboard Coach"],"description":"Physiotherapist behind FisioRider, providing body mechanics, balance, injury prevention and functional training to PTMSC athletes; co-leads the Bodyboard Academy.","worksFor":{"@id":"https://www.portimaosurfclube.pt/#organization"},"affiliation":{"@id":"https://www.portimaosurfclube.pt/#organization"},"knowsAbout":["Sports physiotherapy","Bodyboarding","Adaptive surfing"]},{"@type":"Person","@id":"https://www.portimaosurfclube.pt/#person-sandro-nobrega","name":"Sandro N\u00f3brega","jobTitle":["Bodyboard Coach"],"description":"Coach of the PTMSC Bodyboard Academy.","worksFor":{"@id":"https://www.portimaosurfclube.pt/#organization"},"affiliation":{"@id":"https://www.portimaosurfclube.pt/#organization"},"knowsAbout":["Bodyboarding"]},{"@type":"Person","@id":"https://www.portimaosurfclube.pt/#person-emanuel-silva","name":"Emanuel Silva","jobTitle":["Skateboarding Coach"],"description":"Coach of the PTMSC skateboarding classes, open to students aged 5 and up.","worksFor":{"@id":"https://www.portimaosurfclube.pt/#organization"},"affiliation":{"@id":"https://www.portimaosurfclube.pt/#organization"},"knowsAbout":["Skateboarding"]},{"@type":["WebPage","CollectionPage"],"@id":"https://www.portimaosurfclube.pt/news-and-events#webpage","url":"https://www.portimaosurfclube.pt/news-and-events","name":"News and Events - PTMSC","isPartOf":{"@id":"https://www.portimaosurfclube.pt/#website"},"about":{"@id":"https://www.portimaosurfclube.pt/#organization"}
576,"inLanguage":"en","description":"Competitions, workshops and club news from Portimao Surf Clube.","breadcrumb":{"@id":"https://www.portimaosurfclube.pt/news-and-events#breadcrumb"}},{"@type":"BreadcrumbList","@id":"https://www.portimaosurfclube.pt/news-and-events#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.portimaosurfclube.pt/"},{"@type":"ListItem","position":2,"name":"News","item":"https://www.portimaosurfclube.pt/news-and-events"}]}]} 577</script>
577 578 579</head> 580 581 582<body class="page cms_off "> 583 584<span class="screen-darken"></span> 585<header class="section-header mobile-header d-lg-none hide_in_gallery"> 586 587 <button data-trigger="navbar_main" class="btn btn-cta text-white p-3 pt-2 pb-2 m-3 float-end shadow" type="button"> <i class="fas fa-bars"></i> </button> 588 589 <a class="mobile-logo" href="https://www.portimaosurfclube.pt"> 590 <img src="https://www.portimaosurfclube.pt/_design/PTMSC_rgb.svg" class="logo_rgb m-3 mt-3 mb-0" width="250" alt="PTMSC - Portimao Surf Clube" fetchpriority="high" decoding="async" loading="eager" /> 591 </a> 592</header><!-- section-header.// --> 593 594<!-- ============= COMPONENT ============== --> 595<nav id="navbar_main" class="mobile-offcanvas navbar navbar_ navbar-expand-lg navbar-dark fixed-top "> 596 <div class="container-fluid"> 597 <div class="offcanvas-header"> 598 <button class="btn btn-close mt-3 text-danger float-end"></button> 599 </div> 600 <a class="fade_in_nav navbar-brand ms-lg-5" href="https://www.portimaosurfclube.pt"> 601 <img src="https://www.portimaosurfclube.pt/_design/PTMSC_white.svg" class="logo_white" alt="Portimão Surf Clube" fetchpriority="high" decoding="async" loading="eager" /> 602 <img src="https://www.portimaosurfclube.pt/_design/PTMSC_rgb.svg" class="logo_rgb" alt="Portimão Surf Clube" fetchpriority="high" decoding="async" loading="eager" /> 603 </a> 604 605 <ul class="navbar-nav ms-auto"> 606 <li class=" nav-item fade_in_nav item_id_964 dropdown "><a data-bs-toggle="dropdown" class="thing nav-link item_id_964 dropdown-toggle dropdown-toggle-main-nav " href="https://www.portimaosurfclube.pt/about-ptmsc"><span>About</span></a><ul class="dropdown-menu"><li class="d-md-none item_id_1028"><a class="thing dropdown-item item_id_1028 " href="https://www.portimaosurfclube.pt/about-ptmsc/about-ptmsc">About PTMSC</a></li><li class=" item_id_995"><a class="thing dropdown-item item_id_995 " href="https://www.portimaosurfclube.pt/about-ptmsc/where-are-we">Where are we?</a></li><li class=" item_id_996"><a class="thing dropdown-item item_id_996 " href="https://www.portimaosurfclube.pt/about-ptmsc/documents">Documents</a></li><li class=" item_id_1026"><a class="thing dropdown-item item_id_1026 " href="https://www.portimaosurfclube.pt/about-ptmsc/member-registration">Member Registration</a></li><li class=" item_id_1058"><a class="thing dropdown-item item_id_1058 " href="https://www.portimaosurfclube.pt/about-ptmsc/prices-2026">Prices 2026</a></li></ul></li><li class=" nav-item fade_in_nav item_id_1015 active "><a class="thing nav-link item_id_1015 active " href="https://www.portimaosurfclube.pt/news-and-events"><span>News</span></a></li><li class=" nav-item fade_in_nav item_id_982 "><a class="thing nav-link item_id_982 " href="https://www.portimaosurfclube.pt/surf"><span>Surf</span></a></li><li class=" nav-item fade_in_nav item_id_984 "><a class="thing nav-link item_id_984 " href="https://www.portimaosurfclube.pt/bodyboard"><span>Bodyboard</span></a></li><li class=" nav-item fade_in_nav item_id_985 "><a class="thing nav-link item_id_985 " href="https://www.portimaosurfclube.pt/skate"><span>Skate</span></a></li><li class=" nav-item fade_in_nav item_id_983 "><a class="thing nav-link item_id_983 " href="https://www.portimaosurfclube.pt/paddle"><span>SUP</span></a></li><li class=" nav-item fade_in_nav item_id_1112 dropdown "><a data-bs-toggle="dropdown" class="thing nav-link item_id_1112 dropdown-toggle dropdown-toggle-main-nav " href="https://www.portimaosurfclube.pt/book-now"><span>BOOK NOW</span></a><ul class="dropdown-menu"><li class=" item_id_1113"><a class="thing dropdown-item item_id_1113 " href="https://www.portimaosurfclube.pt/book-now/surf">SURF</a></li><li class=" item_id_1114"><a class="thing dropdown-item item_id_1114 " href="https://www.portimaosurfclube.pt/book-now/sup-stand-up-paddle">SUP - Stand up Paddle</a></li><li class=" item_id_1115"><a class="thing dropdown-item item_id_1115 " href="https://www.portimaosurfclube.pt/book-now/rentals">Rentals</a></li></ul></li><li class="nav-item front_only" ><a href="#" class="fh-trigger book_now rounded-5 nav-link bg-cta ms-md-2 text-center shadow fade_in_nav ps-3 pe-3 pt-4 pb-4 pt-md-2 pb-md-1 btn-chatbot" data-size="half" style="font-size:14px; line-height: 15px; color: #fff !important; font-weight: 600;">BOOK NOW<span style="font-size:8px; letter-spacing: 0.5px; font-weight:300; display:block;">Virtual Assistant</span></a></li><li class="nav-item mt-3 d-table d-md-none"><a class=" rounded-5 nav-link bg-light ms-md-3 text-center shadow fade_in_nav pt-4 pb-4 pt-md-2 pb-md-2" href="https://www.portimaosurfclube.pt/my-account"><i class="fad fa-user-circle me-2"></i>My Account</a></li> 607 <li class="nav-item dropdown fade_in_nav ps-2 pe-2"> 608 <a class="nav-link dropdown-toggle" href="#" id="navbarLang" role="button" data-bs-toggle="dropdown" aria-expanded="false"><i class="fal fa-globe"></i></a> 609 <ul class="dropdown-menu" aria-labelledby="navbarLang"> 610 <li><a class="dropdown-item" href="https://www.portimaosurfclube.pt" style="background: none; "><img src="https://www.portimaosurfclube.pt/_design/flag_uk.png" alt="English" class="flag me-2" /><small>English</small></a></li> 611 <li><a class="dropdown-item" href="https://www.portimaosurfclube.pt/pt" style="background: none; filter: grayscale(90%); opacity:.5;"><img src="https://www.portimaosurfclube.pt/_design/flag_pt.png" alt="Português" class="flag me-2" /><small>Português</small></a></li> 612 </ul> 613 </li> 614 <!-- 615 <li class="d-table d-lg-none w-100"> 616 <div class="mt-3 social_links_mobile_nav"> 617 <span class="row text-center">
618 <a href="https://www.facebook.com/..." target="_blank" class="col"><i class="fab fa-facebook fa-2x"></i></a> 619 <a href="https://www.instagram.com/..." target="_blank" class=" col"><i class="fab fa-instagram fa-2x"></i></a> 620 </span> 621 622 </div> 623 </li> 624 --> 625 </ul> 626 627 <div class="btn-group flex-wrap" role="group" aria-label="Button group"><a class="d-none d-md-table btn p-4 mt-2 ms-4 me-1 fade_in_nav " href="https://www.portimaosurfclube.pt/my-account"><i class="fal fa-user-circle fa-2x"></i><span class="d-block" style="font-size:10px;">MY ACCOUNT</span></a></div> 628 </div> <!-- container-fluid.// --> 629</nav> 630<style> 631/* ============ desktop view ============ */ 632@media all and (min-width: 992px) { 633 .navbar .nav-item .dropdown-menu { display: none; } 634 .navbar .nav-item:hover .nav-link{ } 635 .navbar .nav-item:hover .dropdown-menu{ display: block; } 636 .navbar .nav-item .dropdown-menu{ margin-top:0; } 637} 638/* ============ desktop view .end// ============ */ 639 @media (min-width: 992px) { 640 .flag {margin: 3px; margin-top: -3px;} 641 } 642</style> 643<!-- ============= COMPONENT END// ============== -->
644<script> 645 $(function(){ 646 647 //alert('mobile: ' + isMobile); 648 649 if(isMobile !== true) { 650 $('#navbar_main').addClass('navbar-desktop'); 651 } 652 653 if(isMobile == true){ 654 //$page->navbar_style = 'light'; 655 //$page->logo_style = 'white'; 656 $('#navbar_main .navbar-brand img').css('display','none'); 657 $('#navbar_main .navbar-brand img.logo_rgb').css('display','table'); 658 659 //$('.logo_white').css('display','none'); 660 //$('.logo_black').css('display','none'); 661 //$('.logo_rgb').css('display','table'); 662 //alert('mobile: ' + isMobile); 663 } 664 665 $(function(){ 666 $('.dropdown-toggle-main-nav').click(function(){ 667 668 if (Modernizr.touchevents) { 669 // supported 670 var that = this; 671 //setTimeout(function() { 672 // 673 //}, 2000); 674 } else { 675 // not-supported 676 window.location=$(this).attr("href"); 677 } 678 679 680 }); 681 }); 682 }); 683</script>
vendor: 1 bytes, line 683
683
684<script> 685 $(window).scroll(function(){ 686 //$('.scroll_padding_fix').css('padding-top','0px'); 687 688 689 //rotate: -2.5deg; 690 691 692 if($(window).width() > 991) { 693 694 if($(document).scrollTop() > 5) { 695 $("body").addClass("scrolled"); 696 $('body.home .fade_in_nav').removeClass("text-white"); 697 } else { 698 $("body").removeClass("scrolled"); 699 $('body.home .fade_in_nav').addClass("text-white"); 700 } 701 702 if($(document).scrollTop() > 5) { 703 704 $("#navbar_main").addClass("liquid-glass"); 705 $("#navbar_main").addClass("m-md-3"); 706 $("#navbar_main").addClass("m-lg-4"); 707 $("#navbar_main").addClass("m-xxl-5"); 708 $("#navbar_main").addClass("rounded-5"); 709 } else { 710 $("#navbar_main").removeClass("liquid-glass"); 711 $("#navbar_main").removeClass("m-md-3"); 712 $("#navbar_main").removeClass("m-lg-4"); 713 $("#navbar_main").removeClass("m-xxl-5"); 714 $("#navbar_main").removeClass("rounded-5"); 715 } 716 717 718 719 } else { 720 721 if($(document).scrollTop() > 5) { 722 $("body").addClass("scrolled"); 723 $("body.page .mobile-logo").fadeOut(); 724 } else { 725 $("body").removeClass("scrolled"); 726 $("body.page .mobile-logo").fadeIn(); 727 } 728 729 if($(document).scrollTop() > 50) { 730 $("body.home .mobile-header").addClass('bg-white'); 731 } else { 732 $("body.home .mobile-header").removeClass('bg-white'); 733 } 734 735 736 737 } 738 739 740 741 }); 742</script>
742 743 744 <section class="section-content"> 745 746 <div class="row g-0 justify-content-center"> </div><div class="container-fluid px-0"><div class="row g-0 justify-content-center"><div class="object_parent wireframe "><div id="objectID_1828" class="" style=""><div id="editorID_1828" data-label="Intro" data-encoded="4d7a6b304d7a67774f545535514835415957526b615852706232356862463970626e42316445422b514445774e544d794d7a45304e6a6441666b41784f444934" class="" ><div class="container pt-5 pt-md-0 mt-5 mt-md-0"> 747<div class="row"> 748<div class="col-lg-10 offset-lg-1"> 749<div class="p-3 p-lg-5 fade_in"> 750<!-- load_objects --><div class="container"><div class="row g-0 justify-content-center"><div style="" class="object_parent load_objects BOX "><div id="objectID_1829" class="cms-non-editable" style=""><div id="editorID_1829" data-label="Intro Text" data-encoded="4d54557a4d7a59314e7a59304e55422b5147466b5a476c3061573975595778666157357764585241666b41784e7a6b794d7a677a4f544d31514835414d5467794f513d3d" class="" ><h5 style="text-align: center;">Welcome to the News & Events section of Portimão Surf Clube!</h5> 751<h1 style="text-align: center;"><strong>PTMSC</strong><br />News & Events</h1> 752<p style="text-align: justify;">Here you’ll find everything that’s happening in and around the club — from competition results and training updates, to community activities, special events and important announcements. Stay connected with the surf, the athletes and the spirit of our club!</p></div></div></div></div></div> 753</div> 754</div> 755</div> 756</div></div></div></div><div class="object_parent wireframe "><div id="objectID_1831" class="" style=""><div id="editorID_1831" data-label="Content 1" data-encoded="4f4467794d544d784d7a5977514835415957526b615852706232356862463970626e42316445422b5144457a4d44517a4d7a41784d6a6841666b41784f444d78" class="" ><div class="row g-0"> 757<div class="col-lg-12"> 758<div class="p-3 p-lg-5 Xfade_in"> 759<div class="articles row row-cols-1 row-cols-sm-2 row-cols-md-3 g-5" data-masonry='{"percentPosition": true }'><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 760 <a href="https://www.portimaosurfclube.pt/news-and-events/national-club-championship-2026.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/32/98-snapinsta-to_670442822_18583310251048370_4239956382848000740_n.jpg" alt="National Club Championship 2026"></a> 761 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 762 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/national-club-championship-2026.htm">National Club Championship 2026</a></h3> 763 <p class="card-text">A Huge Thank You to Our Athletes</p> 764 </div> 765 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 766 <a href="https://www.portimaosurfclube.pt/news-and-events/circuito-nacional-de-bodyboard-esperan-as-3-etapa-forma-o-e-competi-o.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/15/33-589109165_18542064451005336_463134215024475136_n.jpg" alt="Circuito Nacional de Bodyboard Esperanças - 3.ª Etapa Formação e Competição"></a> 767 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 768 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/circuito-nacional-de-bodyboard-esperan-as-3-etapa-forma-o-e-competi-o.htm">Circuito Nacional de Bodyboard Esperanças - 3.ª Etapa Formação e Competição</a></h3> 769 <p class="card-text">The countryâs best young athletes will compete in multiple categories</p> 770 </div> 771 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 772 <a href="https://www.portimaosurfclube.pt/news-and-events/iii-feira-do-mar.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/14/32-cartaz_feiradomar2025.jpg" alt="III Feira do Mar"></a>
773 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 774 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/iii-feira-do-mar.htm">III Feira do Mar</a></h3> 775 <p class="card-text">Enjoy music, animation and a relaxed atmosphere, typical of this celebration near the sea</p> 776 </div> 777 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 778 <a href="https://www.portimaosurfclube.pt/news-and-events/vau-challenge-2021.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/13/30-new_vauchallengeaction2.jpg" alt="Vau Challenge 2021"></a> 779 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 780 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/vau-challenge-2021.htm">Vau Challenge 2021</a></h3> 781 <p class="card-text">The Vau Challenge took place this weekend at Praia do Vau, located in Portimão.</p> 782 </div> 783 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 784 <a href="https://www.portimaosurfclube.pt/news-and-events/portim-o-surf-club-10th-anniversary-gala-dinner.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/17/35-jantar.jpg" alt="Portimão Surf Club 10th Anniversary Gala Dinner!"></a> 785 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 786 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/portim-o-surf-club-10th-anniversary-gala-dinner.htm">Portimão Surf Club 10th Anniversary Gala Dinner!</a></h3> 787 <p class="card-text">PTMSC 10th Anniversary - Aladino Hall of the Hotel Algarve Casino, in Praia da Rocha</p> 788 </div> 789 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 790 <a href="https://www.portimaosurfclube.pt/news-and-events/portim-o-surf-fest.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/16/34-ptm-surf-fest.jpg" alt="PORTIMÃO SURF FEST"></a> 791 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 792 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/portim-o-surf-fest.htm">PORTIMÃO SURF FEST</a></h3> 793 <p class="card-text">Surfing, Art, Music and two high competition events</p> 794 </div> 795 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 796 <a href="https://www.portimaosurfclube.pt/news-and-events/game-of-skateboarding-on-miniramp.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/20/40-poster-miniramp25.jpg" alt="GAME OF SKATEBOARDING ON MINIRAMP"></a> 797 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 798 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/game-of-skateboarding-on-miniramp.htm">GAME OF SKATEBOARDING ON MINIRAMP</a></h3> 799 <p class="card-text">The miniramp of the Ribeirinha Zone of Portimão</p> 800 </div> 801 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 802 <a href="https://www.portimaosurfclube.pt/news-and-events/praia-da-rocha-receives-the-malta-championship-at-the-end-of-the-year.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/19/38-cadamal.jpg" alt="Campeonato da Malta"></a> 803 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 804 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/praia-da-rocha-receives-the-malta-championship-at-the-end-of-the-year.htm">Campeonato da Malta</a></h3> 805 <p class="card-text">Praia da Rocha receives the Malta Championship at the end of the year</p> 806 </div> 807 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 808 <a href="https://www.portimaosurfclube.pt/news-and-events/test-article.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/11/28-dedicated-skate-logo.jpg" alt="Nucleo Skate Portimão"></a>
809 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 810 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/test-article.htm">Nucleo Skate Portimão</a></h3> 811 <p class="card-text">Developing Skate in Town - Totally dedicated skate community.</p> 812 </div> 813 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 814 <a href="https://www.portimaosurfclube.pt/news-and-events/another-test-article.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/12/29-new_vauchallenge2018.jpg" alt="Vau Challenge 2018"></a> 815 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 816 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/another-test-article.htm">Vau Challenge 2018</a></h3> 817 <p class="card-text">The 5thª edition of the Vau Challenge took place this weekend at Praia do Vau, located in Portimão.</p> 818 </div> 819 </div></div><div class="fade_in_top col published"><div class="card rounded-5 h-100 border-0 shadow-sm "> 820 <a href="https://www.portimaosurfclube.pt/news-and-events/this-is-a-new-edition-of-women-surfing-day.htm"><img class="card-img-top rounded-top-5" src="https://www.portimaosurfclube.pt/_files/article/18/36-c6e73cdb-32fd-463f-8916-572defcc0e90-1024x1439.jpg" alt="This is a new edition of Women Surfing Day"></a> 821 <div class="card-body p-lg-4 bg-dirty rounded-bottom-5"> 822 <h3 style="font-size: 33px; text-transform: none;"><a style="text-decoration:none;" href="https://www.portimaosurfclube.pt/news-and-events/this-is-a-new-edition-of-women-surfing-day.htm">This is a new edition of Women Surfing Day</a></h3> 823 <p class="card-text">The Portimão Surf Clube will celebrate International Womenâs Day</p> 824 </div> 825 </div></div></div> 826 <style> 827 XXX.card-title { 828 min-height: 3rem; 829 } 830 XXX.card-img-top { 831 object-fit: cover; 832 height: 200px; 833 } 834 .published {} 835 .unpublished {padding-bottom: 10px;box-shadow: 0px 0px 10px #FCDBDB; margin-bottom: 10px;} 836 .unpublished:before {content:"Draft"; color: red; font-size:14px; display:block; text-align:left; background: #FCDBDB; padding: 10px; } 837 .card {break-inside: avoid;} 838 </style> 839
839<script src="https://cdn.jsdelivr.net/npm/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
839 840
840<script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
840 841
841<script> 842 imagesLoaded( document.querySelector(".articles"), function() { 843 new Masonry(".articles", { percentPosition: true }); 844 }); 845 </script>
845 846 <!-- module data --> 847</div> 848</div> 849</div></div></div></div></div></div> 850 </section> 851 852<footer class="pt-5"> 853 854<div class="container-fluid"> 855 <div class="row"> 856 <div class="col-12"> 857 <style> 858 859 .item-59 img {height: 46px !important;} 860 861 .logo-scroller { 862 overflow: hidden; 863 width: 100%; 864 } 865 866 .logo-track { 867 display: flex; 868 align-items: center; 869 flex-wrap: nowrap; 870 width: max-content; 871 animation: scroll 30s linear infinite; 872 } 873 874 .logo-item { 875 flex: 0 0 auto; 876 display: flex; 877 align-items: center; 878 justify-content: center; 879 padding: 0 1.5rem; 880 } 881 882 /* Base logo size (desktop) */ 883 .logo-item img { 884 height: 150px; 885 width: auto; 886 object-fit: contain; 887 } 888 889 /* Tablet */ 890 @media (max-width: 991px) { 891 .logo-item img { 892 height: 55px; 893 } 894 } 895 896 /* Mobile â max 2 logos visible */ 897 @media (max-width: 575px) { 898 .logo-item { 899 padding: 0 1rem; 900 } 901 902 .logo-item img { 903 height: 40px; 904 } 905 } 906 907 /* Extra small â effectively 1 logo */ 908 @media (max-width: 400px) { 909 .logo-item { 910 padding: 0 0.75rem; 911 } 912 913 .logo-item img { 914 height: 200px; 915 } 916 } 917 918 @keyframes scroll { 919 0% { transform: translateX(0); } 920 100% { transform: translateX(-50%); } 921 } 922 923 /* Accessibility */ 924 @media (prefers-reduced-motion: reduce) { 925 .logo-track { 926 animation: none; 927 } 928 } 929 930 @media (hover: hover) { 931 .logo-scroller:hover .logo-track { 932 animation-play-state: paused; 933 } 934 } 935 936 @media (max-width: 575px) { 937 .logo-track { 938 animation-duration: 45s; 939 } 940 } 941 942 </style> 943 944 945 <!-- Seamless Infinite Logo Slider --> 946 <div class="logo-scroller"> 947 <div class="logo-track"> 948 <div class="logo-item fade_in item-1"><a href="http://alvorpaddletours.com/" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/1-logos-apt-white.png" alt="Alvor Paddle Tours" class="" /></a></div><div class="logo-item fade_in item-2"><img src="https://www.portimaosurfclube.pt/_files/menu/993/2-logos-clube-02-1.png" alt="" class="" /></div><div class="logo-item fade_in item-3"><img src="https://www.portimaosurfclube.pt/_files/menu/993/3-logos-clube-02-3.png" alt="" class="" /></div><div class="logo-item fade_in item-4"><img src="https://www.portimaosurfclube.pt/_files/menu/993/4-logos-clube-11-02.png" alt="" class="" /></div><div class="logo-item fade_in item-5"><img src="https://www.portimaosurfclube.pt/_files/menu/993/5-logos-clube1-02.png" alt="" class="" /></div><div class="logo-item fade_in item-6"><a href="https://www.secretspot98.com" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/6-logos-clube52424-02.png" alt="Secret Spot 98" class="" /></a></div><div class="logo-item fade_in item-7"><a href="https://www.kayak.es/" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/7-logos-kayak-white.png" alt="KAYAK" class="" /></a></div><div class="logo-item fade_in item-59"><a href="https://algarve.pro/" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/59-ap-natural.png" alt="ALGARVE PRO" class="" /></a></div><div class="logo-item fade_in item-1"><a href="http://alvorpaddletours.com/" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/1-logos-apt-white.png" alt="Alvor Paddle Tours" class="" /></a></div><div class="logo-item fade_in item-2"><img src="https://www.portimaosurfclube.pt/_files/menu/993/2-logos-clube-02-1.png" alt="" class="" /></div><div class="logo-item fade_in item-3"><img src="https://www.portimaosurfclube.pt/_files/menu/993/3-logos-clube-02-3.png" alt="" class="" /></div><div class="logo-item fade_in item-4"><img src="https://www.portimaosurfclube.pt/_files/menu/993/4-logos-clube-11-02.png" alt="" class="" /></div><div class="logo-item fade_in item-5"><img src="https://www.portimaosurfclube.pt/_files/menu/993/5-logos-clube1-02.png" alt="" class="" /></div><div class="logo-item fade_in item-6"><a href="https://www.secretspot98.com" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/6-logos-clube52424-02.png" alt="Secret Spot 98" class="" /></a></div><div class="logo-item fade_in item-7"><a href="https://www.kayak.es/" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/7-logos-kayak-white.png" alt="KAYAK" class="" /></a></div><div class="logo-item fade_in item-59"><a href="https://algarve.pro/" target="_blank"><img src="https://www.portimaosurfclube.pt/_files/menu/993/59-ap-natural.png" alt="ALGARVE PRO" class="" /></a></div> 949 </div> 950 </div> 951 952</div> 953 </div> 954</div> 955<hr /> 956<div class="container"> 957 958 <div class="row"> 959 960 <div class="col-xl-6"> 961 962 <div class="row"> 963 <div class="col-md"> 964 <div class="p-5 p-md-1 pt-3"> 965 <div class="m-5 m-md-3 ps-3 pe-3"><img src="https://www.portimaosurfclube.pt/_design/portimao-surf-clube-light.svg?x" class="w-100" alt="Portimao Surf Clube" /></div> 966 </div> 967 </div> 968 969 <div class="col-12 col-md"> 970 <div class="p-3 text-center mb-5"> 971 <p><strong>
971PARTNERSHIP</strong><br><em>EM PARCERIA</em></p> 972 <p class="ps-5 pe-5 ms-5 me-5 ms-md-0 me-md-0"><a href="https://www.alvorpaddletours.com" target="_blank"><img src="https://www.portimaosurfclube.pt/_design/logo_square.svg" class="w-100" alt="Alvor Paddle Tours (SUP Portimao/Alvor)" /></a></p> 973 </div> 974 </div> 975 976 <div class="col-12 col-md"> 977 <div class="text-center"> 978 <p class="d-none d-md-table p-3"><a href="https://www.portimaosurfclube.pt/contacts/vcard" download><img src="https://ptmsc.link/qrcodes/SIcvEB.svg" class="w-100" /></a></p> 979 </div> 980 </div> 981 982 </div> 983 984 <div class="ps-5 pe-5 ps-md-0 pe-md-0"> 985 <div class="row g-0"> 986 <div class="col-12 col-md"> 987 <div class="p-3"> 988 <a class="" href="https://apps.apple.com/us/app/ptmsc/id6771550266" target="_blank" rel="noopener"><img class="w-100" src="../_design/app_icon_apple.svg" alt="" /></a> 989 </div> 990 </div> 991 <div class="col-12 col-md"> 992 <div class="p-3"> 993 <a href="https://play.google.com/store/apps/details?id=pt.portimaosurfclube.ptmsc" target="_blank" rel="noopener"><img class="w-100" src="../_design/app_icon_google.svg" alt="" /></a> 994 </div> 995 </div> 996 <div class="col-12 col-md"> 997 <div class="p-3 d-none"> 998 <a class="" href="https://www.portimaosurfclube.pt/_app_ptmsc/index.php" target="_blank" rel="noopener"><img class="w-100" src="../_design/app_icon_pwa.png" alt="" /></a> 999 </div> 1000 </div> 1001 </div> 1002 </div> 1003 1004 </div> 1005 1006 <div class="col-xl-6"> 1007 1008 <div class="row"> 1009 1010 <div class="col-md"> 1011 <div class="pt-3 text-center text-md-start ps-md-5 mb-5"> 1012 <h5><strong>Information</strong><br><em>Informação</em></h5> 1013 <ul id="KOOmenuitem_406_ul" class=""><li id="KOOmenuitem_1194_li" class="fade_in_left"><a id="KOOmenuitem_1194" class=" " href="https://www.portimaosurfclube.pt/contacts" title="Contacts">Contacts</a> </li> <li id="KOOmenuitem_818_li" class="fade_in_left"><a id="KOOmenuitem_818" class=" " href="https://www.portimaosurfclube.pt/faq" title="FAQ">FAQ</a> </li> <li id="KOOmenuitem_542_li" class="fade_in_left"><a id="KOOmenuitem_542" class=" " href="https://www.portimaosurfclube.pt/sitemap" title="Sitemap">Sitemap</a> </li> <li id="KOOmenuitem_578_li" class="fade_in_left"><a id="KOOmenuitem_578" class=" " href="https://www.portimaosurfclube.pt/privacy-policy" title="Privacy Policy">Privacy Policy</a> </li> <li id="KOOmenuitem_971_li" class="fade_in_left"><a id="KOOmenuitem_971" class=" " href="https://www.portimaosurfclube.pt/terms-and-conditions" title="Terms & Conditions">Terms & Conditions</a> </li> <li id="KOOmenuitem_972_li" class="fade_in_left"><a id="KOOmenuitem_972" class=" " href="https://www.portimaosurfclube.pt/complaints-book" title="Complaints book">Complaints book</a> </li> <li id="KOOmenuitem_1110_li" class="fade_in_left"><a id="KOOmenuitem_1110" class=" " href="https://www.portimaosurfclube.pt/ptmsc-app-installation" title="PTMSC Mobile APP">PTMSC Mobile APP</a> </li> </ul> 1014 </div> 1015 </div> 1016 1017 <div class="col-md"> 1018 <div class="pt-3 text-center text-md-start"> 1019 <h5><strong>CONTACTS</strong><br><em>CONTACTOS</em></h5> 1020 <p class="lead"><i class="fab fa-whatsapp me-1"></i><a href="https://wa.me/15558734337?text="><strong>Virtual Assistant</strong><br>+1 (555) 873-4337<br><small>Get Instant Answer</small></a></p> 1021 <p><i class="fab fa-whatsapp me-1"></i><a href="tel:+351966559739"><strong>Office</strong>+351 966 559 739<br><small>Usually reply within an hour</small></a></p> 1022 <!--<p>
1022 <a href="imessage:[email protected]">[email protected]</a></p>--> 1023 <p><i class="fa fa-envelope me-1"></i><a href="/cdn-cgi/l/email-protection#eb82858d84ab9b84999f82868a84989e998d88879e898ec59b9f"><span class="__cf_email__" data-cfemail="e28b8c848da2928d90968b8f838d91979084818e978087cc9296">[email protected]</span></a></p> 1024 <p><a href="https://maps.app.goo.gl/a6mUXcwsPU2tvyX36" target="_blank" rel="noopener"><i class="fal fa-map-marker-alt me-2"></i>PTMSC<br>Portimão Surf Clube<br>Estrada Marina 280,<br>8500-311 Portimão</a></p> 1025 <p> 1026 <a href="https://wa.me/15558734337?text=" target="_blank" class="m-2" title="WhatsApp"><i class="fab fa-whatsapp fa-3x"></i></a> 1027 <!--<a href="https://wa.me/351966559739?text=" target="_blank" class="m-2" title="WhatsApp"><i class="fab fa-whatsapp fa-3x"></i></a>--> 1028 <a href="https://www.instagram.com/portimaosurfclube/" target="_blank" class="m-2" title="Instagram"><i class="fab fa-instagram fa-3x"></i></a> 1029 <a href="https://www.facebook.com/portimaosurfclube/" target="_blank" class="m-2" title="Facebook"><i class="fab fa-facebook fa-3x"></i></a> 1030 <a href="https://www.tripadvisor.com/Attraction_Review-g652081-d19327882-Reviews-Portimao_Surf_Clube-Praia_da_Rocha_Portimao_Faro_District_Algarve.html" target="_blank" class="m-2" title="Tripadvisor"><i class="fab fa-tripadvisor fa-3x"></i></a> 1031 </p> 1032 </div> 1033 </div> 1034 1035 </div> 1036 1037 </div> 1038 1039 1040 </div> 1041</div> 1042<hr> 1043<div class="container p-md-5"> 1044 <div class="row g-0"> 1045 <div class="col-md-3 text-center text-md-start pb-5"> 1046 <p>© 2026 PTMSC<br>Portimão Surf Clube</p> 1047 </div> 1048 <div class="col-md-6 text-center pb-5"> 1049 <p><a href="https://www.visitportugal.com/en/node/435605" target="_blank"><img src="https://www.portimaosurfclube.pt/_design/Turismo_de_portugal_light.svg" width="120" alt="Turismo de PORTUGAL" /></a></p> 1050 <p>RNAAT 158 / 2021</p> 1051 </div> 1052 <div class="col-md-3 pb-5 text-center text-md-end"> 1053 <small><a href="https://algarve.pro" target="_blank" style="font-size:10px;"><img src="https://www.portimaosurfclube.pt/_design/AP-natural.png" width="53" alt="ALGARVE PRO" /><br>Powered by <strong class="d-none">ALGARVE.PRO</strong></a></small> 1054 </div> 1055 </div> 1056 <hr> 1057 <p style="font-size:11px;" class="text-center">Developed by <strong>ALGARVE.PRO</strong> All images on this website are protected by copyright. Unauthorized use is prohibited.</p> 1058</div> 1059</footer> 1060 1061 <link rel="stylesheet" href="https://www.portimaosurfclube.pt/_chatbot/chatbot.css?1791450648">
vendor: 113 bytes, lines 1061-1062
1061 1062 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1062<script src="https://www.portimaosurfclube.pt/_chatbot/chatbot.js?1791450648"></script>
1062 1063 1064<!-- WhatsApp Widget --> 1065<div id="whatsapp-chat-widget"> 1066 <div class="whatsapp-button" onclick="toggleWhatsAppChat()"> 1067 <i class="fab fa-whatsapp"></i> 1068 </div> 1069 1070 <div class="whatsapp-chat-box" id="whatsapp-chat-box"> 1071 <div class="chat-header"> 1072 <img src="https://www.portimaosurfclube.pt/_design/PTMSC_rgb.svg" class="agent" alt="Agent"> 1073 <div> 1074 <strong>Portimao Surf Clube</strong><br> 1075 <span>Typically replies in a few minutes</span> 1076 </div> 1077 <div class="close-chat" onclick="toggleWhatsAppChat()">Ã</div> 1078 </div> 1079 1080 <div class="chat-body"> 1081 <p>Hello ð<br>How can we help you today?</p> 1082 </div> 1083 1084 <div class="chat-footer"> 1085 <input type="text" id="whatsapp-msg" placeholder="Type your message..." /> 1086 <button onclick="sendWhatsAppMessage()">Send</button> 1087 </div> 1088 </div> 1089</div> 1090<style> 1091 1092#whatsapp-chat-widget { 1093 position: fixed; 1094 bottom: 23px; 1095 right: 100px; 1096 font-family: stevie-sans, sans-serif; 1097 z-index: 10000; 1098} 1099 1100.agent { 1101 background: #fff; border-radius: 50%; padding: 5px; 1102} 1103 1104.whatsapp-button { 1105 display: block; 1106 color: #fff; 1107 background: #EF4529; 1108 border-radius: 10px; 1109 width: 60px; 1110 height: 60px; 1111 line-height: 60px; 1112 font-size:40px; 1113 text-align: center; 1114} 1115 1116.whatsapp-chat-box { 1117 display: none; 1118 width: 300px; 1119 background: white; 1120 border-radius: 10px; 1121 box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2) !important; 1122 overflow: hidden; 1123 flex-direction: column; 1124 animation: slideUp 0.3s ease; 1125} 1126 1127.chat-header { 1128 display: flex; 1129 align-items: center; 1130 gap: 10px; 1131 background: #EF4529; 1132 color: white; 1133 padding: 10px; 1134 position: relative; 1135} 1136 1137.chat-header img { 1138 width: 40px; 1139 height: 40px; 1140 border-radius: 10px; 1141} 1142 1143.close-chat { 1144 position: absolute; 1145 right: 10px; 1146 top: 10px; 1147 cursor: pointer; 1148 font-size: 20px; 1149} 1150 1151.chat-body { 1152 padding: 15px; 1153 background: #f0f0f0; 1154 font-size: 16px; 1155 color: #333; 1156} 1157 1158.chat-footer { 1159 display: flex; 1160 border-top: 1px solid #ddd; 1161 padding: 10px; 1162 background: white; 1163} 1164 1165.chat-footer input { 1166 flex: 1; 1167 border: none; 1168 padding: 8px; 1169 font-size: 14px; 1170 border: 1px solid #ccc; 1171 border-radius: 4px; 1172} 1173 1174.chat-footer button { 1175 margin-left: 8px; 1176 background: #EF4529; 1177 color: white; 1178 border: none; 1179 padding: 8px 12px; 1180 border-radius: 4px; 1181 cursor: pointer; 1182} 1183 1184@media (max-width: 480px) { 1185 #whatsapp-chat-widget { 1186 bottom: 15px; 1187 } 1188 .whatsapp-chat-box { 1189 width: 100% !important; 1190 bottom: 0; 1191 right: 0; 1192 left: 0; 1193 flex-direction: column; 1194 } 1195 1196 .chat-header, .chat-body, .chat-footer { 1197 padding: 15px; 1198 } 1199 1200 .whatsapp-button { 1201 bottom: 20px; 1202 right: 20px; 1203 } 1204 1205 .chat-footer input { 1206 flex: 1; 1207 border: none; 1208 padding: 8px; 1209 font-size: 16px; 1210 border: 1px solid #ccc; 1211 border-radius: 4px; 1212 } 1213 1214} 1215 1216 1217@keyframes slideUp { 1218 from { 1219 transform: translateY(100px); 1220 opacity: 0; 1221 } 1222 to { 1223 transform: translateY(0); 1224 opacity: 1; 1225 } 1226} 1227</style>
1228<script> 1229 function toggleWhatsAppChat() { 1230 const box = document.getElementById("whatsapp-chat-box"); 1231 const button = document.querySelector(".whatsapp-button"); 1232 1233 const isOpen = box.style.display === "flex"; 1234 1235 if (isOpen) { 1236 box.style.display = "none"; 1237 button.style.display = "block"; 1238 } else { 1239 box.style.display = "flex"; 1240 button.style.display = "none"; 1241 } 1242 } 1243 1244 function sendWhatsAppMessage() { 1245 const phone = "351966559739"; // Replace with your WhatsApp number 1246 const message = document.getElementById("whatsapp-msg").value.trim(); 1247 if (message) { 1248 const encodedMsg = encodeURIComponent(message); 1249 const url = `https://wa.me/${phone}?text=${encodedMsg}`; 1250 window.open(url, "_blank"); 1251 } 1252 } 1253</script>
vendor: 1 bytes, line 1253
1253
1254<script type="text/javascript" charset="UTF-8" src="//cdn.cookie-script.com/s/3569319e2ca2a3c0fef84ec85ae628d6.js"></script>
1254<!-- FareHarbor Lightframe API - do not remove - see: https://fareharbor.com/help/website/resources/lightframe-api/ -->
1254<script src="https://fareharbor.com/embeds/api/v1/?autolightframe=yes" async></script>
1254 1255
1255<script> 1256 /* ------------------------------------------------- 1257 CONFIGURATION â put your own code inside these 1258 functions. They will be called exactly once per 1259 modal open/close. 1260 ------------------------------------------------- */ 1261 function onBeforeModalOpen($link) { 1262 // ------------------------------------------------------------------ 1263 // Example: show a spinner, log an analytics event, pause a video⦠1264 // ------------------------------------------------------------------ 1265 //alert('User clicked the FareHarbor link â preparing modal...'); 1266 $('.book_now').html('Please wait<span style="font-size:8px; letter-spacing: 0.5px; font-weight:300; display:block;">FAREHARBOR is opening</span>'); 1267 1268 setTimeout(function() { 1269 $('.book_now').html('BOOK NOW<span style="font-size:8px; letter-spacing: 0.5px; font-weight:300; display:block;">without Membership</span>'); 1270 }, 2000); 1271 1272 1273 // Example: pause a background video 1274 const video = document.getElementById('heroVideo'); 1275 if (video) video.pause(); 1276 1277 // Example: add a CSS class that shows a spinner overlay 1278 $link.addClass('loading'); // you can style .loading in CSS 1279 } 1280 1281 function onModalOpened() { 1282 // ------------------------------------------------------------------ 1283 // This runs **after** the Lightframe reports that the modal is visible 1284 // ------------------------------------------------------------------ 1285 //alert('FareHarbor modal is now open â run postâopen actions'); 1286 // Remove the spinner / loading indicator 1287 $('.book_now').removeClass('loading'); 1288 1289 // Example: send an analytics event 1290 if (window.ga) ga('send', 'event', 'FareHarbor', 'modal_open'); 1291 } 1292 1293 function onModalClosed() { 1294 // ------------------------------------------------------------------ 1295 // Runs when the user dismisses the modal 1296 // ------------------------------------------------------------------ 1297 //alert('FareHarbor modal closed'); 1298 // Example: resume the background video 1299 const video = document.getElementById('heroVideo'); 1300 if (video) video.play(); 1301 } 1302 1303 /* ------------------------------------------------- 1304 3ï¸â£ Intercept the click (or pointerdown) on the link 1305 ------------------------------------------------- */ 1306 $(document).on('pointerdown', '.fh-trigger', function (e) { 1307 const $link = $(this); 1308 1309 // Run any preâopen logic you need 1310 onBeforeModalOpen($link); 1311 1312 // Prevent the default navigation for a splitâsecond. 1313 // Weâll reâtrigger the click after a tiny timeout so the UI 1314 // can repaint (spinner, video pause, etc.). 1315 e.preventDefault(); 1316 1317 // Small delay â 120â¯ms is usually enough for the UI change. 1318 // Adjust if you need a longer âplease waitâ visual. 1319 setTimeout(() => { 1320 // Dispatch a synthetic click that the Lightframe script will catch. 1321 const clickEvt = new MouseEvent('click', { 1322 view: window, 1323 bubbles: true, 1324 cancelable: true 1325 }); 1326 $link[0].dispatchEvent(clickEvt); 1327 }, 120); 1328 }); 1329 1330 /* ------------------------------------------------- 1331 4ï¸â£ Listen for messages from the Lightframe (postMessage) 1332 ------------------------------------------------- */ 1333 window.addEventListener('message', function (evt) { 1334 // SECURITY: only accept messages from the genuine FareHarbor domain 1335 if (evt.origin !== 'https://fareharbor.com') return; 1336 1337 const data = evt.data; 1338 if (!data || typeof data.type !== 'string') return; 1339 1340 // The Lightframe sends these two message types (per their docs) 1341 if (data.type === 'lightframeOpened') { 1342 onModalOpened(); 1343 } else if (data.type === 'lightframeClosed') { 1344 onModalClosed(); 1345 } 1346 }); 1347 1348 /* ------------------------------------------------- 1349 5ï¸â£ (Optional) Fallback â if FareHarbor creates the 1350 global object, we can also hook into it. 1351 ------------------------------------------------- */ 1352 if (window.FareHarborLightframe) { 1353 // Overwrite the callbacks â they will be called in addition 1354 // to the postMessage events, so you wonât miss anything. 1355 window.FareHarborLightframe.onOpen = function () { 1356 onModalOpened(); 1357 }; 1358 window.FareHarborLightframe.onClose = function () { 1359 onModalClosed(); 1360 }; 1361 } 1362 </script>
1362 1363
1364<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"e0ed61a429c6488c903496ad8f0e49e4","r":1,"spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 1364
1364
1365<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a47403b50caed7f1',t:'MTc5MTQ1MDY0Nw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
1365</body> 1366</html>
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.