1<!doctype html> 2<html class="diks-no-js diks-site--viikkosavo diks-user--is-not-logged-in diks-user--is-not-subscriber diks-user--is-not-company-subscriber diks-site--layout-master" lang="fi" prefix="og: http://ogp.me/ns#"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title>Uusimmat | Viikkosavo</title> 7 <link id="diks-stylesheet" rel="stylesheet" href="https://a.viikkosavo.fi/styles/2efe7af9/styles/diks-news.css"> 8 <link rel="dns-prefetch" href="https://cdn.gravito.net"> 9 <link rel="dns-prefetch" href="https://cdn.gravito.network"> 10 <link rel="dns-prefetch" href="https://handshake.gravito.network"> 11
11<script> 12 13 const checkUserPreferenceEnabled = 1; 14 const darkmodeStylesheet = "https://a.viikkosavo.fi/styles/2efe7af9/styles/diks-news-darkmode.css"; 15 const defaultStylesheet = "https://a.viikkosavo.fi/styles/2efe7af9/styles/diks-news.css"; 16 const savedTheme = localStorage.getItem('theme'); 17 const stylesheet = document.getElementById("diks-stylesheet"); 18 19 // Check local storage for saved theme 20 if ( savedTheme == 'darkmode' ) { 21 stylesheet.href = darkmodeStylesheet; 22 document.documentElement.classList.add('diks-theme--darkmode'); 23 } 24 // Check user's theme preference through an OS setting or a user agent setting 25 else if ( checkUserPreferenceEnabled && savedTheme != 'default' && ( window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ) ) { 26 stylesheet.href = darkmodeStylesheet; 27 document.documentElement.classList.add('diks-theme--darkmode'); 28 } 29 else { 30 document.documentElement.classList.add('diks-theme--default'); 31 } 32 33 34 // Darkmode toggle switch 35 document.addEventListener('DOMContentLoaded', function () { 36 const darkmodeButton = document.getElementById("diks-darkmode-toggler"); 37 38 if (darkmodeButton) { 39 // Set darkmode button to checked if darkmode is already on 40 // Check local storage for saved theme 41 if (savedTheme == 'darkmode' ) { 42 darkmodeButton.checked = true; 43 } 44 // Check user's theme preference through an OS setting or a user agent setting 45 else if ( checkUserPreferenceEnabled && savedTheme != 'default' && ( window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ) ) { 46 darkmodeButton.checked = true; 47 } 48 49 // Change theme based on darkmode button checked/unchecked 50 darkmodeButton.addEventListener("click", function() { 51 // Swap out the URL for the different stylesheets 52 if ( stylesheet.getAttribute("href") == defaultStylesheet ) { 53 stylesheet.href = darkmodeStylesheet; 54 document.documentElement.classList.remove('diks-theme--default'); 55 document.documentElement.classList.add('diks-theme--darkmode'); 56 // Save theme to local storage 57 window.localStorage.setItem('theme', 'darkmode'); 58 } else { 59 stylesheet.href = defaultStylesheet; 60 document.documentElement.classList.remove('diks-theme--darkmode'); 61 document.documentElement.classList.add('diks-theme--default'); 62 // Save theme to local storage 63 window.localStorage.setItem('theme', 'default'); 64 } 65 // Dispatch event ThemeChanged when theme inside Local Storage changes 66 window.dispatchEvent(new Event("ThemeChanged")); 67 }); 68 } 69 }, false); 70 71 </script>
71 72 73 <link rel="preload" href="/gravito-cmp.js" as="script"> 74 <link rel="preload" href="https://cdn.gravito.net/sdk/v6/latest/sdk.js" as="script"><link rel="preload" href="https://a.viikkosavo.fi/styles/2efe7af9/js/google/googleTagScript.min.js" as="script"><link rel="preload" href="https://r301.viikkosavo.fi/script.js" as="script"> 75
75<script> 76 window.JankkoSSOConfig = { 77 accountOrigin: "VISA" 78 }; 79 </script>
79 80 81 82
82<script id="jankko-sso-script" src="https://sso.viikkosavo.fi/assets/jankko-sso-client.modern.min.js"></script>
82 83 84 85 86 87 88
88<script> 89 // Hyphenopoly library initialization. The library will add soft-hyphen characters into the content if the 90 // browser doesn't support CSS hyphenation. For debugging on macOS Chrome: require: { 'fi': 'FORCEHYPHENOPOLY' } 91 const Hyphenopoly = { 92 require: { 'fi': 'yhdyssanahirviö' }, 93 setup: { 94 defaultLanguage: "fi", 95 selectors: { '.diks-card__title': { minWordLength: 11, leftmin: 4, rightmin: 4 }, '.diks-article__headline': { minWordLength: 11, leftmin: 4, rightmin: 4 }, '.diks-parallax-content .diks-article-box .diks-sub-headline': { minWordLength: 11, leftmin: 4, rightmin: 4 } } 96 } 97 } 98 console.log('Hyphenopoly settings:', Hyphenopoly.setup) 99 100 // Helper function for hyphenating content that was added after pageload. We must query a nodelist and iterate 101 // each node because the library can't handle a nodelist. 102 // https://mnater.github.io/Hyphenopoly/Hyphenators.html 103 // https://github.com/mnater/Hyphenopoly/issues/92#issuecomment-597728300 104 const diksHyphenateContent = (containerSelector) => { 105 if (!Hyphenopoly.hyphenators) { 106 return 107 } 108 Hyphenopoly.hyphenators["HTML"].then((hyphenator) => { 109 for (const itemSelector in Hyphenopoly.setup.selectors) { 110 const containerNode = document.querySelector(containerSelector) 111 const itemNodeList = containerNode.querySelectorAll(itemSelector) 112 itemNodeList.forEach((itemNode) => { hyphenator(itemNode, itemSelector) }) 113 } 114 }) 115 } 116 </script>
116 117
117<script src="https://a.viikkosavo.fi/styles/2efe7af9/includes/hyphenopoly/Hyphenopoly_Loader.js"></script>
117 118
118<script src="/theme/css/includes/waypoints/lib/noframework.waypoints.min.js"></script>
118 119 <link rel="apple-touch-icon" href="/icon-512.png"> 120 <link rel="apple-touch-icon" sizes="512x512" href="/icon-512.png"> 121 <link rel="apple-touch-icon" sizes="256x256" href="/icon-256.png"><link rel="apple-touch-startup-image" href="/iphone5_splash.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)"> 122 <link rel="apple-touch-startup-image" href="/iphone6_splash.png" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)"> 123 <link rel="apple-touch-startup-image" href="/iphoneplus_splash.png" media="(device-width: 621px) and (device-height: 1104px) and (-webkit-device-pixel-ratio: 3)"> 124 <link rel="apple-touch-startup-image" href="/iphonex_splash.png" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3)"> 125 <link rel="apple-touch-startup-image" href="/iphonexr_splash.png" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2)"> 126 <link rel="apple-touch-startup-image" href="/iphonexsmax_splash.png" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3)"> 127 <link rel="apple-touch-startup-image" href="/ipad_splash.png" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2)"> 128 <link rel="apple-touch-startup-image" href="/ipadpro1_splash.png" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2)"> 129 <link rel="apple-touch-startup-image" href="/ipadpro3_splash.png" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2)"> 130 <link rel="apple-touch-startup-image" href="/ipadpro2_splash.png" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2)"><link rel="alternate" type="application/rss+xml" title="Viikkosavo" href="https://www.viikkosavo.fi/feed/rss"><meta name="robots" content="max-image-preview:large"><meta name="facebook-domain-verification" content="5jp4rvr2lni9ozffqbdnabby13gfz9">
130<script> 131 var pageData = {}; 132 133 pageData.section = { 134 'name': 'Uusimmat', 135 'uname': 'uusimmat', 136 'url': 'https\u003A\/\/www.viikkosavo.fi\/uusimmat\/' 137 } 138 pageData.publication = { 139 'name': 'viikkosavo', 140 'url': 'https\u003A\/\/www.viikkosavo.fi\/', 141 'engage': 'VISA', 142 'paywallEnabled': false, 143 'registrationWallEnabled': true, 144 'env':'prod' 145 } 146 pageData.user = {} 147 pageData.companyUser = {} 148 149 function isPwa() { 150 // window.navigator.standalone = iOS 151 // window.matchMedia('(display-mode: standalone)').matches = Android/universal 152 return (window.navigator.standalone) || 153 (["fullscreen", "standalone", "minimal-ui"].some( 154 function(displayMode) { return window.matchMedia('(display-mode: ' + displayMode + ')') 155 .matches })); 156 } 157 158 pageData.general = { 159 'browseMode': (isPwa() ? 'pwa' : 'browser') 160 } 161</script>
161 162 <meta property="og:site_name" content="Viikkosavo"> 163 <meta property="og:locale" content="fi_FI"><meta name='description' content=''> 164<meta property='og:title' content='Uusimmat | Viikkosavo'> 165<meta property='og:description' content=''> 166<meta property='og:url' content='https://www.viikkosavo.fi/uusimmat/'> 167<meta property='og:type' content='webpage'><meta property='og:image' content='https://a.viikkosavo.fi/styles/2efe7af9/images/default/og-image-viikkosavo.jpg'> 168<meta property='og:image:width' content='1200'> 169<meta property='og:image:height' content='630'> 170 <link rel="manifest" href="/manifest.webmanifest"> 171 <style>@media (max-width: 600px) { .gravitoCMP-footer { margin-top: 1.5em; } }</style> 172
172<script type="text/javascript">window.cX = window.cX || {};// Async load of cx.js 173 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 174 e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js'; 175 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 176 </script>
176 177
177<script src="https://a.viikkosavo.fi/styles/2efe7af9/js/blueconic/events.min.js"></script>
177 178
178<script> 179 const BCPlatform = "web"; 180 const BCChannel = 'VISA'; 181 182 const BCArticleViewProperties = {}; 183 const BCSessionStartProperties = {}; 184 185 BCArticleViewProperties["platform"] = BCPlatform; 186 BCArticleViewProperties["channel"] = BCChannel; 187 BCSessionStartProperties["platform"] = BCPlatform; 188 BCSessionStartProperties["channel"] = BCChannel; 189 190 const BCArticleID = pageData?.article?.id || ''; 191 const BCArticleMarketingCategories = pageData?.article?.marketingCategories || []; 192 const BCArticleTopics = pageData?.article?.topics || []; 193 194 if (BCArticleID) { 195 BCArticleViewProperties["articleID"] = BCArticleID; 196 } 197 198 if (Array.isArray(BCArticleMarketingCategories) && BCArticleMarketingCategories.length > 0) { 199 BCArticleViewProperties["marketing_categories"] = BCArticleMarketingCategories.join(', '); 200 } 201 202 if (Array.isArray(BCArticleTopics) && BCArticleTopics.length > 0) { 203 BCArticleViewProperties["tags"] = BCArticleTopics.join(', '); 204 } 205 206 const BCEventParams = { 207 currentPage: '/uusimmat/' || null, 208 pageType: 'section' || null, 209 dependenciesTimeout: 5000, 210 inHouseAdEnabled: false, 211 articleViewEventEnabled: true, 212 articleViewProperties: BCArticleViewProperties, 213 sessionStartEventEnabled: true, 214 sessionStartProperties: BCSessionStartProperties, 215 recommendationsEnabled: false, 216 recommendationsMaxItems: 3, 217 recommendationsTitle: 'Luitko\u0020jo\u0020n\u00E4m\u00E4\u003F' 218 }; 219 InitializeEventScript(BCEventParams); 220 </script>
220<script> 221 window.BCDatalayer = []; 222 </script>
222<script> 223 (function () { 224 window.BCscriptInjected = false; 225 var scriptSrc = ''; 226 227 scriptSrc = 'https://r301.viikkosavo.fi/script.js'; 228 229 window.addEventListener( 230 "gravito:tcfv2:client", 231 function (event) { 232 let eventType = event.detail.eventType; 233 let consentUpdateEventsList = [ 234 "layer1:opt-out:all", 235 "layer2:opt-out:all", 236 "layer2:opt-in:selected", 237 "layer1:opt-in:all", 238 "layer2:opt-in:all", 239 "opt-in:previously", 240 ]; 241 if (consentUpdateEventsList.includes(eventType) && window.BCscriptInjected === false) { 242 window.BCscriptInjected = true; 243 244 var script = document.createElement("script"); 245 script.src = scriptSrc; 246 document.head.appendChild(script); 247 } 248 }, 249 true 250 ); 251 }()); 252 </script>
252 253
253<script src='https://securepubads.g.doubleclick.net/tag/js/gpt.js' crossorigin="anonymous" async></script>
253<script async src="https://ksml-cdn.relevant-digital.com/static/tags/5f8030605279784f89ca6847.js"></script>
253<script src="https://a.viikkosavo.fi/styles/2efe7af9/js/google/googleTagScript.min.js"></script>
253 254
254<script> 255 const GAM_params = { 256 account: '21684433086' || null, 257 site: 'viikkosavo' || null, 258 adsSetToRenderFromPageLevel: ["paraati1","jattiboksi1","jattiboksi2","jattiboksi3","jattiboksi4","boksi1","boksi2","boksi3","boksi4","mobiili1","mobiili2","mobiili3","mobiili4","mobiili5","mobiili6","interstitiaali","topscroll_skin","topscroll_mob"], 259 enableHeaderBiddingManager: true, 260 headerBiddingManagerConfigId: '63b683e047eb39c821eec9c5' || null, 261 enableTCF: true, 262 enableSegmentTargeting: true, 263 enableBCSegmentTargeting: true, 264 segmentTargetingTimeout: 200, 265 pianoSegmentTargetingPersistedQueryId: '110c4c9055b4a1f72dc557ca3983bd140a676a7c' || null, 266 enablePianoSegmentTargeting: true, 267 pianoScriptEnabled: true, 268 enablePersonalizationTargeting: true, 269 enableOnBeforeAuctionSetup: true, 270 pageType: 'section', 271 isPaywallArticle: false, 272 isRegistrationWallArticle: false, 273 mw: 300, 274 tw: 750, 275 dw: 1024, 276 inContentAdTextTop: 'Mainos - sisältö jatkuu alla' || 'Mainos - sisältö jatkuu alla', 277 inContentAdTextBottom: 'Mainos päättyy' || 'Mainos päättyy', 278 collapseEmptyDivs: true, 279 disableInitialLoad: true, 280 enableSRA: true, 281 enableLazyLoad: true, 282 fetchMarginPercent: 200, 283 renderMarginPercent: 20, 284 mobileScaling: -1, 285 gamAdUnits: {"paraati1":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[[736,552]],"viewport_width_980":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"viewport_width_1024":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"viewport_width_1200":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]]}},"section_config":{"show_labels":false,"all_sizes":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[[736,552]],"viewport_width_980":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"viewport_width_1024":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"viewport_width_1200":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]]},"front_page_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"viewport_width_1024":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]],"viewport_width_1200":[[736,552],[980,120],[980,400],[980,552],[980,250],[980,240],[970,250]]}}},"jattiboksi1":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[1,1]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]]},"position_inside_article":3,"paywall_config":{"show_labels":false},"comic_config":{"show_labels":false}},"section_config":{"show_labels":false,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"front_page_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"position_inside_section":5,"position_inside_latest":10,"position_inside_most_read":10}}
285,"jattiboksi2":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2],[1,1]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[970,540],[1,2],[1,1]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2],[1,1]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2],[1,1]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2],[1,1]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2],[1,1]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2],[1,1]]},"position_inside_article":6},"section_config":{"show_labels":false,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[970,540],[1,2]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]]},"front_page_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[970,540],[1,2]]},"position_inside_section":12,"position_inside_latest":20,"position_inside_front_page_large":7,"position_inside_front_page":9}},"jattiboksi3":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[1,1]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]]},"position_inside_article":8},"section_config":{"show_labels":false,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"front_page_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"position_inside_section":19,"position_inside_latest":30,"position_inside_front_page":15}}
285,"jattiboksi4":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[1,1]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]]},"position_inside_article":12},"section_config":{"show_labels":false,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"front_page_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"position_inside_section":25,"position_inside_latest":40,"position_inside_front_page":19}},"jattiboksi5":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[1,1]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]]},"position_inside_article":16},"section_config":{"show_labels":false,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[620,891]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"front_page_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891]]},"position_inside_section":31,"position_inside_front_page":25}}
285,"jattiboksi6":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[1,1]],"viewport_width_644":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_768":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_980":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1024":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]],"viewport_width_1200":[[336,280],[468,832],[468,624],[468,263],[468,351],[468,400],[468,600],[600,600],[620,891],[1,1]]}}},"boksi1":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}}},"boksi2":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}}},"boksi3":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[3
28500,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}}},"boksi4":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431],[300,300]]}}},"mobiili1":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_article":3,"paywall_config":{"show_labels":false},"comic_config":{"show_labels":false}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_section":1,"position_inside_latest":10,"position_inside_most_read":5}},"mobiili2":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_article":6,"paywall_config":{"show_labels":false},"comic_config":{"show_labels":false}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240]],"viewport_width_644":[[3
28500,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,210],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[300,240]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_section":5,"position_inside_latest":20,"position_inside_most_read":10}},"mobiili3":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_article":8},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_section":12,"position_inside_latest":30,"position_inside_front_page_large":7,"position_inside_front_page":6}},"mobiili4":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_article":12},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_section":19,"position_inside_latest":40}},"mobiili5":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_article":16},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_644":[[3
28500,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_section":25,"position_inside_front_page":6}},"mobiili6":{"type":"normal","article_config":{"show_labels":true,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_article":20},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_section":31,"position_inside_front_page":9}},"mobiili7":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[320,320]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_front_page":15}},"mobiili8":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[3
28500,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_front_page":19}},"mobiili9":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[1,1]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150],[1,1]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"position_inside_front_page":25}},"mobiili10":{"type":"normal","section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]},"front_page_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}}},"interstitiaali":{"type":"outofpage","article_config":{"show_labels":false,"default_sizes":{"viewport_width_0":[1,1],"viewport_width_492":[1,1],"viewport_width_644":[1,1],"viewport_width_768":[1,1],"viewport_width_980":[1,1],"viewport_width_1024":[1,1],"viewport_width_1200":[1,1]}},"section_config":{"show_labels":false,"default_sizes":{"viewport_width_0":[1,1],"viewport_width_492":[1,1],"viewport_width_644":[1,1],"viewport_width_768":[1,1],"viewport_width_980":[1,1],"viewport_width_1024":[1,1],"viewport_width_1200":[1,1]}}},"topscroll_skin":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[1,2],[970,170],[970,970],[1600,1150]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[1,2],[970,970]],"viewport_width_644":[[1,2],[970,970]],"viewport_width_768":[[1,2],[970,970]],"viewport_width_980":[[1,2],[970,970]],"viewport_width_1024":[[1,2],[970,970]],"viewport_width_1200":[[1,2],[970,970]]},"narrow_layout_sizes":{"viewport_width_0":[],"viewport_width_492":[[1,2],[970,970]],"viewport_width_644":[[1,2],[970,970]],"viewport_width_768":[[1,2],[970,970]],"viewport_width_980":[[1,2],[970,970]],"viewport_width_1024":[[1,2],[970,970]],"viewport_width_1200":[[1,2],[970,170],[970,970],[1600,1150]]}},"section_config":{"show_labels":false,"all_sizes":[[1,2],[970,170],[970,970],[1600,1150]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[[1,2],[970,970]],"viewport_width_644":[[1,2],[970,970]],"viewport_width_768":[[1,2],[970,970]],"viewport_width_980":[[1,2],[970,970]],"viewport_width_1024":[[1,2],[970,970]],"viewport_width_1200":[[1,2],[970,970]]},"narrow_layout_sizes":{"viewport_width_0":[],"viewport_width_492":[[1,2],[970,970]],"viewport_width_644":[[1,2],[970,970]],"viewport_width_768":[[1,2],[970,970]],"viewport_width_980":[[1,2],[970,970]],"viewport_width_1024":[[1,2],[970,970]],"viewport_width_1200":[[1,2],[970,170],[970,970],[1600,1150]]}}}
285,"topscroll_mob":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[1,2],[300,220]],"default_sizes":{"viewport_width_0":[[1,2],[300,220]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[1,2],[300,220]],"default_sizes":{"viewport_width_0":[[1,2],[300,220]],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}}}}, 286 gamNativeAdPageAdUnits: {"natiiviboksi1":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}}},"natiiviboksi2":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}}},"natiiviboksi3":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}}},"natiiviboksi4":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[3
28600,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[],"viewport_width_492":[],"viewport_width_644":[],"viewport_width_768":[],"viewport_width_980":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1024":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"viewport_width_1200":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]]}}},"natiivimobiili1":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}}},"natiivimobiili2":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}}},"natiivimobiili3":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[3
28600,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}}},"natiivimobiili4":{"type":"normal","article_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}},"section_config":{"show_labels":false,"all_sizes":[[300,533],[300,400],[300,169],[300,225],[300,250],[300,600],[300,431]],"default_sizes":{"viewport_width_0":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_492":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_644":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_768":[[300,533],[300,400],[300,169],[300,225],[300,600],[300,431],[300,300],[300,250],[300,200],[300,150]],"viewport_width_980":[],"viewport_width_1024":[],"viewport_width_1200":[]}}}}, 287 gamNativeAdPageSite: 'natiivikoonti' || 'natiivikoonti', 288 adSlotPrefix: 'gam-ad-' || 'gam-ad-', 289 isFrontPage: false, 290 isNarrowLayoutFromPageLevel: true, 291 isComicArticle: false, 292 isPreview: false, 293 isNativeAdPage: false, 294 previewAdUnits: ["mobiili1","mobiili2","mobiili3","mobiili4","mobiili5","mobiili6","mobiili7","mobiili8","mobiili9","mobiili10"], 295 skipLinksEnabled: true, 296 appendMarketingCategoriesToTopics: true, 297 enableLocationPrompt: false 298 } 299 InitializeGoogleScript(GAM_params) 300 </script>
300 301
301<script type='text/javascript'> 302 (function() { 303 /** CONFIGURATION START **/ 304 var _sf_async_config = window._sf_async_config = (window._sf_async_config || {}); 305 _sf_async_config.uid = 60754; 306 _sf_async_config.domain = location.host.replace("www.",""); 307 _sf_async_config.flickerControl = false; 308 _sf_async_config.useCanonical = true; 309 _sf_async_config.useCanonicalDomain = true; 310 /** CONFIGURATION END **/ 311 })(); 312 </script>
312<script> 313 function configureChartbeat(userType) { 314 /** CONFIGURATION START **/ 315 var _sf_async_config = window._sf_async_config = (window._sf_async_config || {}); 316 _sf_async_config.sections = pageData && pageData.section ? pageData.section.name : ''; 317 _sf_async_config.authors = pageData && pageData.article && Array.isArray(pageData.article.authors) ? pageData.article.authors.toString() : ''; 318 319 if (userType) { 320 var _cbq = window._cbq = (window._cbq || []); 321 _cbq.push(['_acct', userType]); 322 } 323 /** CONFIGURATION END **/ 324 function loadChartbeat() { 325 var e = document.createElement('script'); 326 var n = document.getElementsByTagName('script')[0]; 327 e.type = 'text/javascript'; 328 e.async = true; 329 e.src = 'https://static.chartbeat.com/js/chartbeat.js'; 330 n.parentNode.insertBefore(e, n); 331 } 332 loadChartbeat(); 333 }; 334 335 if (typeof JankkoSSOClient !== 'undefined') { 336 JankkoSSOClient.getSession().then(function(data) { 337 if (data && data.user && data.user.id) { 338 var userType = Array.isArray(data.permissions) && data.permissions.includes("paywall") ? 'paid' : 'lgdin'; 339 340 configureChartbeat(userType); 341 } else { 342 configureChartbeat('anon'); 343 } 344 }).catch(function(error) { 345 configureChartbeat('anon'); 346 }); 347 } else { 348 configureChartbeat('anon'); 349 } 350 </script>
350 351
351<script> 352 const gtmContainerId = 'GTM-KTJNB7R'; 353 const sendDatalayerPush = Boolean(1); 354 const context = 'sec'; 355 356 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 357 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 358 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 359 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 360 })(window,document,'script','dataLayer',gtmContainerId); 361 362 if (sendDatalayerPush) { 363 window.dataLayer.push({'event':'pageDataPush','pageData': window.pageData}); 364 } 365 366 (async function () { 367 const paywallEnabled = window?.pageData?.publication?.paywallEnabled ?? true; 368 const registrationWallEnabled = window?.pageData?.publication?.registrationWallEnabled ?? true; 369 370 const user = {}; 371 const companyUser = {}; 372 373 let articleState; 374 let articlePaywall = 'free'; // free is always the safer fallback 375 376 if (context === 'art') { 377 if (window?.pageData?.article?.effectivePaywall) { 378 articlePaywall = window.pageData.article.effectivePaywall; 379 } else if (window?.pageData?.article?.paywall){ 380 articlePaywall = window.pageData.article.paywall; 381 } 382 383 if ((articlePaywall === 'free' || !paywallEnabled) || (articlePaywall === "registered" && !registrationWallEnabled)) { 384 articleState = "full"; 385 } 386 else { 387 articleState = 'preview'; 388 } 389 } 390 391 function getCookie(name) { 392 name = name + '='; 393 const decodedCookie = decodeURIComponent(document.cookie); 394 const cookies = decodedCookie.split(';'); 395 for (let i = 0; i < cookies.length; i++) { 396 const cookie = cookies[i].trim(); 397 if (cookie.indexOf(name) === 0) { 398 return cookie.substring(name.length, cookie.length); 399 } 400 } 401 } 402 403 function pushDataLayerEvent() { 404 let segmentsCookie = getCookie('jankkosegments'); 405 406 if (segmentsCookie) { 407 let segmentsData = JSON.parse(segmentsCookie); 408 let segments = segmentsData.segments; 409 410 if (segments && typeof segments === 'object') { 411 user.segments = segments; 412 } 413 } 414 const pageData = { 415 'user': user,
416 'companyUser': companyUser 417 }; 418 if (context === 'art') { 419 pageData.article = { 'state': articleState }; 420 } 421 if (sendDatalayerPush) { 422 window.dataLayer.push({'event': 'userDataPush', 'pageData': pageData }); 423 } 424 } 425 426 async function modifyDatalayerData() { 427 const sessionData = await JankkoSSOClient.getSession(); 428 if (!sessionData) { 429 return; 430 } 431 432 user.id = sessionData?.personal?.personal_user_id; 433 user.products = sessionData?.personal?.personal_active_products; 434 user.permissions = sessionData?.personal?.personal_permissions; 435 436 companyUser.id = sessionData?.company?.company_user_id ?? null; 437 companyUser.products = sessionData?.company?.company_active_products ?? null; 438 companyUser.permissions = sessionData?.company?.company_permissions ?? null; 439 440 const permissions = sessionData?.permissions ?? []; 441 if (context === 'art') { 442 var userIsLoggedIn = false;if ((articlePaywall != "free" && permissions.includes("paywall") && articlePaywall != "registered") || (userIsLoggedIn === true && articlePaywall === "registered")) { 443 articleState = "full"; 444 } 445 } 446 } 447 448 try { 449 await modifyDatalayerData(); 450 } 451 catch (error) { 452 console.warn(error); 453 } 454 455 pushDataLayerEvent(); 456 }()); 457 458 </script>
458 459 460 </head> 461 <body class="diks-body diks-body--page-type-section"> 462 <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 462-463
462 463 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
463GTM-KTJNB7R
vendor: 95 bytes, lines 463-465
463" 464 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 465
465<!-- End Google Tag Manager (noscript) --> 466
466<script src='/gravito-cmp.js'></script>
466 467 468 <div class="diks-out-of-page-display-ad-container"><div class="diks-display-ad rs_skip" aria-hidden="true"> 469 <div class="diks-display-ad__unit" id="gam-ad-interstitiaali" style="width:0;height:0;margin:0;padding:0;"> 470
470<script>googletag.cmd.push(function() { googletag.display('gam-ad-interstitiaali'); });</script>
470 471 </div> 472 </div></div> 473 474 475 <header id="main-header" class="diks-header diks-header diks-header--is-fixed"> 476 <div class="diks-skip-link-navigation diks-skip-link-navigation--top"> 477 <ul class="diks-navigation diks-navigation--skip-links"> 478 <li class="diks-navigation__item"> 479 <a class="diks-button diks-button--primary diks-a11y__screen-reader diks-a11y__screen-reader--focusable" href="#sisalto" >Siirry suoraan sisältöön</a> 480 </li> 481 </ul> 482 </div> 483 484 <div class="diks-header-wrapper"> 485 <div class="diks-container diks-container--header"> 486 <div class="diks-header-container"><div class="diks-header__navigation-container diks-header__navigation-container--left"> 487 <button class="diks-button diks-button--icon-only diks-button--ghost diks-navigation__link js-diks-toggler diks-dropdown-toggler diks-dropdown-toggler--main" id="diks-dropdown-toggle" data-toggle="diks-dropdown-navigation" aria-expanded="false" aria-controls="diks-dropdown-navigation" aria-label="Valikko"><span class="diks-icon diks-icon--size-m" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 488 <path fill-rule="evenodd" d="M22 6H2V4H22V6ZM22 13H2V11H22V13ZM22 20H2V18H22V20Z" clip-rule="evenodd"/> 489</svg> 490</span><span class="diks-icon diks-icon--size-m diks-icon--hidden" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 491 <path fill-rule="evenodd" d="M10.5858 12L4.2218 5.63603L5.63602 4.22182L12 10.5858L18.3639 4.22183L19.7782 5.63605L13.4142 12L19.7782 18.364L18.3639 19.7782L12 13.4142L5.63602 19.7782L4.2218 18.364L10.5858 12Z" clip-rule="evenodd"/> 492</svg> 493</span></button> 494 495 <div class="diks-dropdown-navigation" id="diks-dropdown-navigation"> 496 <button id="diks-close-dropdown-main-nav" class="diks-button diks-button--outline diks-dropdown-navigation__close-button diks-a11y__screen-reader diks-a11y__screen-reader--focusable">Sulje valikko</button><div class="diks-dropdown-navigation__sign-container"> 497 <img src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/keskisuomalainen-sign.svg" class="diks-logo diks-dropdown-navigation__sign" alt="Keskisuomalainen Oyj"> 498 </div><form id="dropdown-navigation-search" name="dropdownnavigationsearch" class="diks-form diks-form--fluid" action="/haku/" method="get"> 499 <div class="diks-form__field-wrapper diks-form__field-wrapper--padding-right diks-form__field-wrapper--required"><input class="diks-form__field" type="search" name="q" id="dropdown-navigation-searchSearch1" aria-label="Haku" placeholder="Hae sivustolta" required value=""></div> 500 501 <div class="diks-form__field-wrapper diks-form__field-wrapper--submit-button-icon-only"> 502 <button class="diks-form__submit" type="submit" id="dropdown-navigation-searchSubmitbutton2"><span class="diks-icon diks-icon--color-primary" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 503 <path fill-rule="evenodd" d="M9.5 4C6.46243 4 4 6.46243 4 9.5C4 12.5376 6.46243 15 9.5 15C12.5376 15 15 12.5376 15 9.5C15 6.46243 12.5376 4 9.5 4ZM2 9.5C2 5.35786 5.35786 2 9.5 2C13.6421 2 17 5.35786 17 9.5C17 11.2106 16.4273 12.7874 15.4632 14.0493L19.7782 18.3642L18.3639 19.7784L14.049 15.4634C12.7872 16.4274 11.2105 17 9.5 17C5.35786 17 2 13.6421 2 9.5Z" clip-rule="evenodd"/> 504</svg> 505</span>Hae 506 </button> 507 </div> 508 </form> <nav class="diks-navigation-wrapper diks-navigation-wrapper--border-bottom diks-navigation-wrapper--border-top" ><ul class="diks-navigation diks-navigation--row diks-navigation--mobile-row diks-navigation--no-active-links diks-navigation--size-s" id="dropdown-highlights-nav"><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/asenna/">Sovellus</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/nakoislehti/">Lehdet</a></li></ul> 509 </nav> <nav class="diks-navigation-wrapper diks-navigation-wrapper--divider-bottom" ><ul class="diks-navigation diks-navigation--no-active-links diks-navigation--size-s" id="dropdown-customer-upper-nav"><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://oma.media.fi/lehti/viikkosavo/"><span class="diks-icon diks-icon--size-m" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 510 <path d="M17 8H22V17H19.1875V20.8125L14.1045 17H9V13.4307L4.4375 17.0811V13H2V3H17V8ZM17 13H11V15H14.7705L17.1875 16.8125V15H20V10H17V13ZM4 11H6.4375V12.918L8.5625 11.2188L8.83691 11H15V5H4V11Z"/> 511</svg> 512</span>Asiakaspalvelu</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://oma.media.fi/lehti/viikkosavo/yhteystiedot/juttuvinkki/"><span class="diks-icon diks-icon--size-m" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 513 <path fill-rule="evenodd" d="M7.38197 4H16.618L17.618 6H22V20H2V6H6.38197L7.38197 4ZM8.61803 6L7.61803 8H4V18H20V8H16.382L15.382 6H8.61803ZM12 11C10.8954 11 10 11.8954 10 13C10 14.1046 10.8954 15 12 15C13.1046 15 14 14.1046 14 13C14 11.8954 13.1046 11 12 11ZM8 13C8 10.7909 9.79086 9 12 9C14.2091 9 16 10.7909 16 13C16 15.2091 14.2091 17 12 17C9.79086 17 8 15.2091 8 13Z" clip-rule="evenodd"/> 514</svg> 515</span>Lähetä juttuvinkki</a></li></ul> 516 </nav> <nav class="diks-navigation-wrapper " ><ul class="diks-navigation diks-navigation--light" id="dropdown-section-nav"><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/">Etusivu</a></li><li class="diks-navigation__item diks-navigation__item--active" aria-current="page"><a class="diks-navigation__link " href="/uusimmat/">Uusimmat</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/luetuimmat/">Luetuimmat</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://savo.menoinfo.fi/fi-FI">
516Menoinfo - Katso täältä Pohjois-Savon tapahtumat</a></li></ul> 517 </nav><!-- ESI start element "recommendedTopics" generated at 02-10-2026 14:39:32.417082 --><!-- ESI end element "recommendedTopics" --><!-- ESI start element "promotedAdvertisers" generated at 02-10-2026 14:38:58.981077 --><!-- ESI end element "promotedAdvertisers" --> <nav class="diks-navigation-wrapper diks-navigation-wrapper--divider-top" ><h2 class="diks-navigation__title">Yhteystiedot</h2><ul class="diks-navigation diks-navigation--light diks-navigation--size-s" id="dropdown-customer-nav"><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://www.meks.fi/mainonta/alueet/savon-media/">Mediamyynti</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://oma.media.fi/lehti/viikkosavo/yhteystiedot/">Kaikki yhteystiedot</a></li></ul> 518 </nav><div class="diks-navigation-wrapper diks-navigation-wrapper--divider-top"><h2 class="diks-navigation__title">Ulkoasu</h2><label for="diks-darkmode-toggler" class="diks-form__switch"> 519 <span class="diks-form__switch-label"><span class="diks-icon diks-icon--size-m" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 520 <path fill-rule="evenodd" d="M13.7547 1.76065L11.7581 3.75666C10.6708 4.8436 10 6.34252 10 8C10 11.3137 12.6863 14 16 14C17.6575 14 19.1564 13.3292 20.2433 12.2419L22.2394 10.2453L21.9451 13.0531C21.4182 18.0815 17.1674 22 12 22C6.47715 22 2 17.5229 2 12C2 6.83263 5.91855 2.58178 10.9469 2.05488L13.7547 1.76065ZM8.70749 4.70657C5.93176 5.9617 4 8.75566 4 12C4 16.4183 7.58172 20 12 20C15.2443 20 18.0383 18.0682 19.2934 15.2925C18.289 15.7468 17.1738 16 16 16C11.5817 16 8 12.4183 8 8C8 6.82623 8.25316 5.71105 8.70749 4.70657Z" clip-rule="evenodd"/> 521</svg> 522</span>Käytä tummaa tilaa</span> 523 <div class="diks-form__switch-wrapper"> 524 <input id="diks-darkmode-toggler" class="diks-form__switch-input" type="checkbox"> 525 <span class="diks-form__switch-slider"></span> 526 </div> 527 </label> 528 </div></div> <nav class="diks-navigation-wrapper " ><ul class="diks-navigation diks-navigation--main diks-navigation--size-s diks-navigation--row diks-navigation--mobile-row diks-navigation--no-active-links diks-hide-below-large" ><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/uusimmat/"><span class="diks-icon diks-hide-above-large" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 529 <path fill-rule="evenodd" d="M12 4a8 8 0 100 16 8 8 0 000-16zM2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12zm9-6h2v5.586l2.707 2.707-1.414 1.414L11 12.414V6z" clip-rule="evenodd"/> 530</svg> 531</span>Uusimmat</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/luetuimmat/"><span class="diks-icon diks-hide-above-large" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 532 <path fill-rule="evenodd" d="M11.03 3.455c1.168-1.438 3.495-.652 3.55 1.2l.117 3.845h6a1.25 1.25 0 0 1 1.229 1.484l-1.905 10A1.25 1.25 0 0 1 18.793 21H9.06a1.25 1.25 0 0 1-.559-.132L6.764 20H3.25C2.56 20 2 19.44 2 18.75v-8.5C2 9.56 2.56 9 3.25 9h3.274l4.506-5.545ZM8 10.355v8.027L9.236 19h8.936l1.62-8.5h-5.58a1.5 1.5 0 0 1-1.499-1.455l-.131-4.33L8 10.356Zm10.056 9.255ZM4 11v7h2v-7H4Zm14.793 8.75.145.027Z" clip-rule="evenodd"/> 533</svg> 534</span>Luetuimmat</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/nakoislehti/"><span class="diks-icon diks-hide-above-large" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 535 <path fill-rule="evenodd" d="M4 2H20V22H4V2ZM6 4V20H18V4H6ZM8 6H16V12H8V6ZM10 8V10H14V8H10ZM16 15H8V13H16V15ZM16 18H8V16H16V18Z" clip-rule="evenodd"/> 536</svg> 537</span>Lehdet</a></li></ul> 538 </nav></div><div class="diks-header__logo-container"><a class="diks-logo__link diks-header__logo-link diks-header__main-logo-link" href="/"><img src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/viikkosavo.svg" class="diks-logo diks-logo--default diks-header__logo diks-header__main-logo" alt="Viikkosavo"><img src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/viikkosavo-white.svg" class="diks-logo diks-logo--darkmode diks-header__logo diks-header__main-logo" alt="Viikkosavo"></a> 539 </div><div class="diks-header__navigation-container diks-header__navigation-container--right"><div class="diks-user-navigation-wrapper"> 540 <button class="diks-button diks-button--icon-only diks-button--ghost diks-navigation__link diks-dropdown-toggler diks-dropdown-toggler--user" aria-expanded="false" id="diks-sso-user" data-diks-toggle="diks-user-navigation" data-diks-toggle-class="diks-user-navigation" aria-controls="diks-user-navigation"><span class="diks-icon diks-icon--size-m" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 541 <path fill-rule="evenodd" d="M4 12a8 8 0 1 1 13.496 5.814c-1.216-1.593-3.262-2.602-5.491-2.602-2.231 0-4.28 1.011-5.495 2.607A7.978 7.978 0 0 1 4 12Zm4.04 6.953A7.963 7.963 0 0 0 12 20a7.964 7.964 0 0 0 3.966-1.05c-.83-1.087-2.254-1.84-3.961-1.84-1.71 0-3.135.754-3.965 1.843ZM12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2Zm.005 5.898c-1.247 0-2.305 1.049-2.305 2.4 0 1.353 1.058 2.402 2.305 2.402s2.305-1.05 2.305-2.401c0-1.352-1.058-2.4-2.305-2.4Zm-4.203 2.4C7.802 7.952 9.658 6 12.005 6c2.347 0 4.203 1.95 4.203 4.299 0 2.348-1.856 4.299-4.203 4.299-2.347 0-4.203-1.951-4.203-4.3Z" clip-rule="evenodd"/> 542</svg> 543</span><span class="diks-icon diks-icon--size-m diks-icon--hidden" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 544 <path fill-rule="evenodd" d="M10.5858 12L4.2218 5.63603L5.63602 4.22182L12 10.5858L18.3639 4.22183L19.7782 5.63605L13.4142 12L19.7782 18.364L18.3639 19.7782L12 13.4142L5.63602 19.7782L4.2218
54418.364L10.5858 12Z" clip-rule="evenodd"/> 545</svg> 546</span></button> 547 548 <div class="diks-navigation diks-sub-navigation diks-user-navigation" id="diks-user-navigation"> 549 <button id="diks-close-dropdown-user-nav" class="diks-button diks-button--outline diks-dropdown-navigation__close-button diks-a11y__screen-reader diks-a11y__screen-reader--focusable">Sulje valikko</button> 550 <p id="diks-sso-username" class="diks-user-navigation__username diks-hide-from-company-subscribers"></p><p class="diks-user-navigation__username diks-show-for-company-subscribers">Yritystilaus tunnistettu</p><div class="diks-show-for-company-subscribers"><p>Voit käyttää palvelun kaikkia sisältöjä vapaasti. Jos haluat kommentoida, kirjaudu sisään henkilökohtaisella Mediatunnuksella.</p></div> <ul class="diks-navigation diks-navigation--size-m" id="diks-sso-links"><li class="diks-navigation__item " ><a class="diks-navigation__link " href="javascript:window.gravito.cmp.openPreferences();">Evästevalinnat</a></li></ul> 551 </div> 552</div> 553 </div> 554 </div> 555 </div> 556 </div><div class="diks-section-navigation-wrapper"> 557 <div class="diks-container diks-container--narrow-mobile diks-container--full-width-before-l"> 558 <nav class="diks-navigation-wrapper diks-navigation-wrapper--border-bottom" aria-label="Osastovalikko"><ul class="diks-navigation diks-navigation--row diks-navigation--light diks-navigation--centered diks-navigation--mobile-row diks-navigation--draggable diks-navigation--size-xs diks-navigation--active-subtle" id="osastovalikko"><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://savo.menoinfo.fi/fi-FI"draggable="false">Menoinfo - Katso täältä Pohjois-Savon tapahtumat</a></li></ul> 559 </nav> 560 </div> 561 </div><div class="diks-quicklinks-wrapper"> 562 <div class="diks-container diks-container--narrow-mobile"> 563 <nav class="diks-navigation-wrapper " ><ul class="diks-navigation diks-navigation--main diks-navigation--size-s diks-navigation--row diks-navigation--mobile-row diks-navigation--no-active-links diks-navigation--centered diks-hide-above-large" ><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/uusimmat/"><span class="diks-icon diks-hide-above-large" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 564 <path fill-rule="evenodd" d="M12 4a8 8 0 100 16 8 8 0 000-16zM2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12zm9-6h2v5.586l2.707 2.707-1.414 1.414L11 12.414V6z" clip-rule="evenodd"/> 565</svg> 566</span>Uusimmat</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/luetuimmat/"><span class="diks-icon diks-hide-above-large" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 567 <path fill-rule="evenodd" d="M11.03 3.455c1.168-1.438 3.495-.652 3.55 1.2l.117 3.845h6a1.25 1.25 0 0 1 1.229 1.484l-1.905 10A1.25 1.25 0 0 1 18.793 21H9.06a1.25 1.25 0 0 1-.559-.132L6.764 20H3.25C2.56 20 2 19.44 2 18.75v-8.5C2 9.56 2.56 9 3.25 9h3.274l4.506-5.545ZM8 10.355v8.027L9.236 19h8.936l1.62-8.5h-5.58a1.5 1.5 0 0 1-1.499-1.455l-.131-4.33L8 10.356Zm10.056 9.255ZM4 11v7h2v-7H4Zm14.793 8.75.145.027Z" clip-rule="evenodd"/> 568</svg> 569</span>Luetuimmat</a></li><li class="diks-navigation__item " ><a class="diks-navigation__link " href="/nakoislehti/"><span class="diks-icon diks-hide-above-large" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 570 <path fill-rule="evenodd" d="M4 2H20V22H4V2ZM6 4V20H18V4H6ZM8 6H16V12H8V6ZM10 8V10H14V8H10ZM16 15H8V13H16V15ZM16 18H8V16H16V18Z" clip-rule="evenodd"/> 571</svg> 572</span>Lehdet</a></li></ul> 573 </nav> 574 </div> 575 </div><div id="diks-dropdown-navigation-shade" class="diks-dropdown-navigation-shade"></div></header>
575<script src="/theme/css/includes/waypoints/lib/noframework.waypoints.min.js"></script>
575 576
576<script> 577 // Fix forEach for IE 578 if (window.NodeList && !NodeList.prototype.forEach) { 579 NodeList.prototype.forEach = Array.prototype.forEach; 580 } 581 582 // Element.closest() needs a polyfill for older browsers. 583 // While we only need the closest() functionality for mobile browsers, 584 // we don't want the code to fail even on old desktop browsers. 585 // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill 586 // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Browser_compatibility 587 if (!Element.prototype.matches) { 588 Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 589 } 590 591 if (!Element.prototype.closest) { 592 Element.prototype.closest = function(s) { 593 var el = this; 594 595 do { 596 if (el.matches(s)) return el; 597 el = el.parentElement || el.parentNode; 598 } while (el !== null && el.nodeType === 1); 599 return null; 600 }; 601 } 602 603 (function () { 604 if (typeof JankkoSSOClient !== 'undefined') { 605 var stringToHTML = function (htmlString) { 606 var div = document.createElement('div'); 607 div.innerHTML = htmlString.trim(); 608 return div.firstChild; 609 }; 610 611 var showUserRelatedItems = function(personalData) { 612 var usernameElement = document.querySelector('#diks-sso-username'); 613 if (usernameElement) { 614 usernameElement.innerHTML = personalData.full_name; 615 } 616 617 var linksElement = document.querySelector('#diks-sso-links'); 618 if (linksElement) { 619 var myAccountLink = stringToHTML('<li class="diks-navigation__item"><a class="diks-navigation__link" href="'+JankkoSSOClient.serviceUrls.myAccount+'">Omat tiedot</a></li>'); 620 var logoutForm = stringToHTML('<li class="diks-navigation__item diks-navigation__item--logout"><form id="logout-form" action="'+JankkoSSOClient.serviceUrls.logout+'" method="post"><input class="diks-navigation__link" type="submit" value="Kirjaudu ulos"></form></li>'); 621 linksElement.insertBefore(myAccountLink, linksElement.childNodes[0]); 622 linksElement.appendChild(logoutForm); 623 } 624 625 var htmlElement = document.querySelector('.diks-user--is-not-logged-in'); // Class is set to main html element 626 if (htmlElement) { 627 htmlElement.classList.replace('diks-user--is-not-logged-in', 'diks-user--is-logged-in'); 628 } 629 } 630 631 var showMenuLinksForLoggedOutUser = function() { 632 const linksElement = document.querySelector('#diks-sso-links'); 633 if (!linksElement) { 634 return; 635 } 636 637 // Pidetään vain tietyt query-parametrit. Alunperin tässä poistettiin kaikki query-parametrit. 638 // @todo Selvitetään voisiko tässä sallia kaikki query-parametrit. 639 const currentUrlObject = new URL(window.location.href); 640 const returnUrlObject = new URL(`${currentUrlObject.origin}${currentUrlObject.pathname}`); 641 const allowedParams = ['limit-active-products']; 642 allowedParams.forEach(function(name) { 643 if (currentUrlObject.searchParams.get(name)) { 644 returnUrlObject.searchParams.set(name, currentUrlObject.searchParams.get(name)); 645 } 646 }); 647 648 const loginPageUrlObject = new URL(`${window.location.origin}/kirjaudu/`); 649 loginPageUrlObject.searchParams.set('returnUrl', returnUrlObject.toString()); 650 const loginLinkString = `<li class="diks-navigation__item"><a class="diks-navigation__link" href="${loginPageUrlObject.toString()}">Kirjaudu</a></li>`; 651 652 linksElement.insertBefore(stringToHTML(loginLinkString), linksElement.childNodes[0]); 653 } 654 655 var showCompanyUserRelatedItems = function(companyData) { 656 var htmlElement = document.querySelector('.diks-user--is-not-company-subscriber'); // Class is set to main html element 657 var permissions = companyData?.company_permissions || []; 658 if (htmlElement && permissions.length) { 659 htmlElement.classList.replace('diks-user--is-not-company-subscriber', 'diks-user--is-company-subscriber'); 660 } 661 } 662 663 document.addEventListener("DOMContentLoaded", async function() { 664 try { 665 const data = await JankkoSSOClient.getSession(); 666 if (data.company?.company_user_id) { 667 showCompanyUserRelatedItems(data.company); 668 }
669 if (data.personal?.personal_user_id) { 670 showUserRelatedItems(data.personal); 671 } else { 672 showMenuLinksForLoggedOutUser(); 673 } 674 } catch (error) { 675 showMenuLinksForLoggedOutUser(); 676 } 677 }); 678 } 679 }()); 680 681 682 ////////////////////////////////////////////////////////////////////////////////////////// 683 // NAVIGATIONS 684 ////////////////////////////////////////////////////////////////////////////////////////// 685 686 // Toggle icon inside a toggler 687 function toggleTogglerIcon(toggler) { 688 togglerIcons = toggler.querySelectorAll('.diks-icon'); 689 if ( togglerIcons.length > 1 ) { 690 for (var j= 0; j < togglerIcons.length; j++) { 691 togglerIcons[j].classList.toggle('diks-icon--hidden'); 692 } 693 } 694 } 695 696 // Function for closing all dropdown navigations 697 function closeAllDropdownNavigations() { 698 closeMainDropdownNavigation(); 699 closeUserDropdownNavigation(); 700 } 701 702 // Close main nav or user nav if hidden screen reader only close navigation button is clicked 703 let closeDropdownMainNav = document.getElementById('diks-close-dropdown-main-nav'); 704 let closeDropdownUserNav = document.getElementById('diks-close-dropdown-user-nav'); 705 if ( closeDropdownMainNav ) { 706 closeDropdownMainNav.addEventListener('click', function() { 707 closeMainDropdownNavigation(); 708 }); 709 } 710 if ( closeDropdownUserNav ) { 711 closeDropdownUserNav.addEventListener('click', function(e) { 712 e.stopPropagation(); 713 closeUserDropdownNavigation(); 714 }); 715 } 716 717 // Trap focus inside opened dropdown navigation 718 document.addEventListener('keydown', function(event) { 719 // Initialize variables 720 var ssoLinks = document.getElementById('diks-sso-links'); 721 var linksUserNav = ""; 722 var firstElUserNav = ""; 723 var lastElUserNav = ""; 724 var mainDropdownLastNavLinks = document.getElementById('dropdown-customer-nav'); // Last navigation element inside of main dropdown navigation 725 var linksMainDropdownNav = ""; 726 var firstElMainDropdownNav = "" 727 var lastElMainDropdownNav = ""; 728 729 // Set user nav variable values if SSO links exist 730 if (ssoLinks) { 731 linksUserNav = ssoLinks.querySelectorAll('.diks-navigation__link'); 732 firstElUserNav = document.getElementById('diks-close-dropdown-user-nav'); 733 lastElUserNav = linksUserNav[linksUserNav.length - 1]; 734 } 735 736 // Set main dropdown nav variable values if main dropdown last nav links exist 737 if (mainDropdownLastNavLinks) { 738 linksMainDropdownNav = mainDropdownLastNavLinks.querySelectorAll('.diks-navigation__link'); 739 firstElMainDropdownNav = document.getElementById('diks-close-dropdown-main-nav'); 740 lastElMainDropdownNav = linksMainDropdownNav[linksMainDropdownNav.length - 1]; 741 } 742 743 // If darkmode-toggler is found set it as the last element of main dropdown nav 744 if ( document.getElementById('diks-darkmode-toggler') ) { 745 lastElMainDropdownNav = document.getElementById('diks-darkmode-toggler'); 746 } 747 748 // Close all dropdown navigations & reposition fixed header when ESC key is pressed 749 if (event.key === "Escape" || event.key === "Esc") { 750 closeAllDropdownNavigations(); 751 } 752 // Trap focus inside user navigation and/or main dropdown navigation when they are open 753 if (event.keyCode === 9) { 754 if (event.shiftKey && (document.activeElement === firstElUserNav || document.activeElement === firstElMainDropdownNav)) { 755 event.preventDefault(); 756 if (document.activeElement === firstElUserNav) { 757 lastElUserNav.focus(); 758 } 759 else if ( document.activeElement === firstElMainDropdownNav ) { 760 lastElMainDropdownNav.focus(); 761 } 762 } 763 else if (!event.shiftKey && (document.activeElement === lastElUserNav || document.activeElement === lastElMainDropdownNav)) { 764 event.preventDefault(); 765 if (document.activeElement === lastElUserNav) { 766 firstElUserNav.focus(); 767 } 768 else if ( document.activeElement === lastElMainDropdownNav ) { 769 firstElMainDropdownNav.focus(); 770 } 771 } 772 } 773 }); 774 775 776 ////////////////////////////////////////////////////////////////////////////////////////// 777 // User navigation 778 ////////////////////////////////////////////////////////////////////////////////////////// 779 780 let userDropdownNavigation = document.getElementById('diks-user-navigation'); // user dropdown navigation 781 let userDropdownNavigationToggler = document.getElementById('diks-sso-user'); // user dropdown navigation toggler button (opens and closes user dropdown navigation) 782 let userDropdownNavigationCloseButton = document.getElementById('diks-close-dropdown-main-nav'); // Hidden screen-reader-only close button inside user dropdown navigation 783 784 // Close user dropdown navigation if hidden screen-reader-only close button is clicked 785 if ( userDropdownNavigationCloseButton ) { 786 userDropdownNavigationCloseButton.addEventListener('click', function() { 787 closeUserDropdownNavigation(); 788 }); 789 } 790 791 function closeUserDropdownNavigation() { 792 if (userDropdownNavigation) { 793 if (userDropdownNavigation.classList.contains('diks-user-navigation--is-open')) { 794 // Close user dropdown nav by removing --is-open class 795 userDropdownNavigation.classList.remove('diks-user-navigation--is-open'); 796 // Remove --is-open class from user dropdown navigation toggler 797 userDropdownNavigationToggler.classList.remove('diks-dropdown-toggle--is-open'); 798 // Toggle icon 799 toggleTogglerIcon(userDropdownNavigationToggler); 800
801 // Set aria-expanded to false for user dropdown toggler 802 userDropdownNavigationToggler.setAttribute('aria-expanded', 'false'); 803 } 804 } 805 } 806 807 // User Navigation Dropdown 808 if (userDropdownNavigation) { 809 let userDropdownNavigationAriaControls = userDropdownNavigationToggler.getAttribute('data-diks-toggle'); // aria-controls value for user dropown navigation toggler 810 userDropdownNavigationToggler.setAttribute('aria-controls', userDropdownNavigationAriaControls); 811 userDropdownNavigationToggler.addEventListener('click', function(e) { 812 e.preventDefault(); 813 // If the main dropdown navigation is already open (contains --is-open class) close it 814 if ( (userDropdownNavigation).classList.contains('diks-user-navigation--is-open') ) { 815 closeUserDropdownNavigation(); 816 } 817 // If the main dropdown navigation isn't open (doesn't contain --is-open class) open it 818 else { 819 // If other toggles are open, close them 820 document.querySelectorAll('.diks-user-navigation--is-open').forEach(function(item) { 821 item.classList.remove('diks-user-navigation--is-open'); 822 userDropdownNavigationToggler.classList.remove('diks-dropdown-toggler--is-open'); 823 }); 824 825 // Toggle icon 826 toggleTogglerIcon(userDropdownNavigationToggler); 827 828 // Set aria-expanded 829 userDropdownNavigationToggler.setAttribute('aria-expanded', 'true'); 830 831 // Open this toggle 832 userDropdownNavigation.classList.add('diks-user-navigation--is-open'); 833 834 // Close main dropdown navigation if it's open 835 closeMainDropdownNavigation(); 836 837 // Add event listener to window when user nav toggler is clicked and user nav is open 838 window.addEventListener('click', function(e){ 839 if (document.querySelector('.diks-user-navigation-wrapper').contains(e.target)){ 840 // Clicked inside user nav, do nothing 841 } 842 else { 843 // Clicked outside user nav, close user nav 844 closeUserDropdownNavigation(); 845 } 846 }); 847 848 } 849 }); 850 } 851 852 ////////////////////////////////////////////////////////////////////////////////////////// 853 // Main navigation 854 ////////////////////////////////////////////////////////////////////////////////////////// 855 856 let mainDropdownNavigation = document.getElementById('diks-dropdown-navigation'); // main dropdown navigation 857 let mainDropdownNavigationToggler = document.getElementById('diks-dropdown-toggle'); // main dropdown navigation toggler button (opens and closes main dropdown navigation) 858 let mainDropdownNavigationShade = document.querySelector('.diks-dropdown-navigation-shade'); // shade effect that is visible when main dropdown navigation is open 859 let mainDropdownNavigationCloseButton = document.getElementById('diks-close-dropdown-main-nav'); // Hidden screen-reader-only close button inside main dropdown navigation 860 861 // Close main dropdown navigation if hidden screen-reader-only close button is clicked 862 if ( mainDropdownNavigationCloseButton ) { 863 mainDropdownNavigationCloseButton.addEventListener('click', function() { 864 closeMainDropdownNavigation(); 865 }); 866 } 867 868 // Function for closing main dropdown navigation 869 function closeMainDropdownNavigation() { 870 // Main dropdown navigation 871 if (mainDropdownNavigation) { 872 if (mainDropdownNavigation.classList.contains('diks-dropdown-navigation--is-open')) { 873 // Close main dropdown nav by removing --is-open class 874 mainDropdownNavigation.classList.remove('diks-dropdown-navigation--is-open'); 875 // Remove --is-open class from main dropdown navigation toggler 876 mainDropdownNavigationToggler.classList.remove('diks-dropdown-toggle--is-open'); 877 // Toggle icon 878 toggleTogglerIcon(mainDropdownNavigationToggler); 879 880 // Set aria-expanded to false for main dropdown toggler 881 mainDropdownNavigationToggler.setAttribute('aria-expanded', 'false'); 882 883 // Remove --is-open class from body 884 document.body.classList.remove('diks-body--dropdown-navigation-is-open'); 885 886 // Turn off shade effect 887 mainDropdownNavigationShade.classList.remove('diks-dropdown-navigation-shade--is-visible'); 888 } 889 } 890 } 891 892 893 // Main Navigation Dropdown 894 if (mainDropdownNavigation) {
895 let mainDropdownNavigationAriaControls = mainDropdownNavigationToggler.getAttribute('data-toggle'); // aria-controls value for main dropown navigation toggler 896 mainDropdownNavigationToggler.setAttribute('aria-controls', mainDropdownNavigationAriaControls); 897 mainDropdownNavigationToggler.addEventListener('click', function(e) { 898 e.preventDefault(); 899 // If the main dropdown navigation is already open (contains --is-open class) close it 900 if ( (mainDropdownNavigation).classList.contains('diks-dropdown-navigation--is-open') ) { 901 closeMainDropdownNavigation(); 902 } 903 // If the main dropdown navigation isn't open (doesn't contain --is-open class) open it 904 else { 905 // If other toggles are open, close them 906 document.querySelectorAll('.diks-dropdown-navigation--is-open').forEach(function(item) { 907 item.classList.remove('diks-dropdown-navigation--is-open'); 908 mainDropdownNavigationToggler.classList.remove('diks-dropdown-toggler--is-open'); 909 }); 910 911 // Toggle icon 912 toggleTogglerIcon(mainDropdownNavigationToggler); 913 914 // Set aria-expanded 915 mainDropdownNavigationToggler.setAttribute('aria-expanded', 'true'); 916 917 // Open this toggle 918 mainDropdownNavigation.classList.add('diks-dropdown-navigation--is-open'); 919 // Add is-open class to body 920 document.body.classList.add('diks-body--dropdown-navigation-is-open'); 921 // Turn on shade effect 922 mainDropdownNavigationShade.classList.add('diks-dropdown-navigation-shade--is-visible'); 923 924 // Close main Dropdown Navigation when visible shade area is clicked 925 document.querySelector('.diks-dropdown-navigation-shade--is-visible').addEventListener('click', function() { 926 closeMainDropdownNavigation(); 927 }); 928 929 // Close user dropdown navigation if it's open 930 closeUserDropdownNavigation(); 931 932 } 933 }); 934 } 935 936 937</script>
937 938 939 <div class="diks-display-ad rs_skip" aria-hidden="true"> 940 <div class="diks-display-ad__unit" id="gam-ad-topscroll_skin" > 941
941<script>googletag.cmd.push(function() { googletag.display('gam-ad-topscroll_skin'); });</script>
941 942 </div> 943 </div> 944 <div class="diks-display-ad rs_skip" aria-hidden="true"> 945 <div class="diks-display-ad__unit" id="gam-ad-topscroll_mob" > 946
946<script>googletag.cmd.push(function() { googletag.display('gam-ad-topscroll_mob'); });</script>
946 947 </div> 948 </div> 949 <div class="diks-container"> 950 <div class="diks-layout"> 951 952 953 954 955 956 957 <div class="diks-note-wrapper "><div class="diks-container diks-container--narrower-mobile"> 958 <div id="diks-segment-notes"></div></div></div>
958<script> 959 let segmentTeasersContainer = document.getElementById("diks-segment-notes"); 960 961 (function() { 962 function getCookie(name) { 963 name = name + '='; 964 const decodedCookie = decodeURIComponent(document.cookie); 965 const cookies = decodedCookie.split(';'); 966 967 for (let i = 0; i < cookies.length; i++) { 968 const cookie = cookies[i].trim(); 969 if (cookie.indexOf(name) == 0) { 970 return cookie.substring(name.length, cookie.length); 971 } 972 } 973 } 974 975 function injectSegmentTeasers(segmentsQueryString) { 976 var xhttp = new XMLHttpRequest(); 977 978 xhttp.onreadystatechange = function() { 979 if (this.readyState == 4 && this.status == 200) { 980 var segmentTeasers = this.responseText.trim(); 981 982 if (segmentTeasers) { 983 if (segmentTeasersContainer) { 984 segmentTeasersContainer.innerHTML = segmentTeasers; 985 } 986 } 987 else { 988 // Remove segment teaser container if there are no segment teasers 989 if (segmentTeasersContainer) { 990 segmentTeasersContainer.remove(); 991 } 992 } 993 } 994 }; 995 996 xhttp.open("GET", "/.ajax/segmentTeaser?" + segmentsQueryString, true); 997 xhttp.send(); 998 } 999 1000 var segmentsCookie = getCookie('jankkosegments'); 1001 1002 if (segmentsCookie) { 1003 var segmentsData = JSON.parse(segmentsCookie); 1004 var segments = segmentsData.segments; 1005 1006 if (segments && typeof segments === 'object') { 1007 var segmentsQueryString = ""; 1008 1009 Object.keys(segments).forEach(function(key, index) { 1010 segmentsQueryString = index === 0 ? "" : segmentsQueryString + "&"; 1011 var value = segments[key]; 1012 1013 if (Array.isArray(value)) { 1014 value = value.join(','); 1015 } 1016 1017 segmentsQueryString = segmentsQueryString + key + "=" + value; 1018 }); 1019 1020 injectSegmentTeasers(segmentsQueryString); 1021 } 1022 } 1023 else { 1024 // Remove segment teaser container if there are no segment teasers 1025 if (segmentTeasersContainer) { 1026 segmentTeasersContainer.remove(); 1027 } 1028 } 1029 })(); 1030</script>
1030 1031 1032 <div class="diks-display-ad diks-display-ad--in-layout rs_skip" aria-hidden="true"> 1033 <div class="diks-display-ad__unit" id="gam-ad-paraati1" > 1034
1034<script>googletag.cmd.push(function() { googletag.display('gam-ad-paraati1'); });</script>
1034 1035 </div> 1036 </div> 1037 <div class="diks-section diks-section--type-latest"> 1038 <nav aria-label="Murupolku"> 1039 <ul class="diks-breadcrumb"><li class="diks-breadcrumb__item"><a class="diks-breadcrumb__link" href="/">Etusivu</a></li><li class="diks-breadcrumb__item"><span class="diks-breadcrumb__sub-item">Uusimmat</span></li></ul> 1040 </nav> 1041 <div class="diks-columns"> 1042 <main class="diks-main-column diks-border--after" id="sisalto"> 1043 <section class="diks-section__main"> <h1 class="diks-title diks-title--section" >Uusimmat</h1> 1044 1045 1046 1047 1048 <article class="diks-card diks-card--reversed diks-card--size-l diks-card--main"> 1049 <div class="diks-card__main-wrapper"><div class="diks-card__image-wrapper"> 1050 <picture><source srcset="https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/WEBP_LANDSCAPE_240/11696796.webp 240w, https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/WEBP_LANDSCAPE_480/11696796.webp 480w, https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/WEBP_LANDSCAPE_720/11696796.webp 720w, https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/WEBP_LANDSCAPE_960/11696796.webp 960w" sizes="(max-width: 504px) 480px, (max-width: 1279px) 720px, 960px" type="image/webp"><img class="diks-card__image" src="https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/LANDSCAPE_720/11696796.jpg" srcset="https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/LANDSCAPE_240/11696796.jpg 240w, https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/LANDSCAPE_480/11696796.jpg 480w, https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/LANDSCAPE_720/11696796.jpg 720w, https://i.media.fi/incoming/rtnkc6/11696796.jpg/alternates/LANDSCAPE_960/11696796.jpg 960w" sizes="(max-width: 504px) 480px, (max-width: 1279px) 720px, 960px" loading="lazy" decoding="sync" alt=""> 1051 </picture> 1052 </div><div class="diks-card__text-wrapper"> 1053 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831162"><span class="diks-ui-accent">Lukijan kuva | </span>Kukan siemeniä ja lehtokotiloita â lähetä oma kuvasi julkaistavaksi</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1054 <time class="diks-date__published" datetime="2026-10-02T04:00:00+03:00">Tänään 4:00</time> 1055 1056 </div> 1057<div class="diks-comment-count "> 1058 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9831162" data-coral-id="9831162"></span> 1059 </div> 1060 </div> 1061 </div></div> 1062 </div> 1063 </div></article> 1064 1065 1066 1067 <article class="diks-card diks-card--reversed"> 1068 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1069 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9835071">Kaksi enkeliä Kuopion Ison hautausmaan pääportin edustalle</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1070 <time class="diks-date__published" datetime="2026-09-30T17:00:00+03:00">30.9.2026 17:00</time> 1071 1072 </div> 1073<div class="diks-comment-count "> 1074 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9835071" data-coral-id="9835071"></span> 1075 </div> 1076 </div> 1077 </div></div> 1078 </div> 1079 </div></article> 1080 1081 1082 1083 <article class="diks-card diks-card--reversed"> 1084 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1085 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9834325">Sami Tervonen jatkaa KalPan päävalmentajana</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1086 <time class="diks-date__published" datetime="2026-09-30T12:30:00+03:00">30.9.2026 12:30</time> 1087 1088 </div> 1089<div class="diks-comment-count "> 1090 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9834325" data-coral-id="9834325"></span> 1091 </div> 1092 </div> 1093 </div></div> 1094 </div> 1095 </div></article> 1096 1097 1098 1099 <article class="diks-card diks-card--reversed"> 1100 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1101 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831357">Kuopiolaisravintolassa voi kokea kahdeksan ilmaiskeikkaa lauantaina</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1102 <time class="diks-date__published" datetime="2026-09-30T05:00:00+03:00">
110230.9.2026 5:00</time> 1103 1104 </div> 1105<div class="diks-comment-count "> 1106 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9831357" data-coral-id="9831357"></span> 1107 </div> 1108 </div> 1109 </div></div> 1110 </div> 1111 </div></article> 1112 1113 1114 1115 <article class="diks-card diks-card--reversed"> 1116 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1117 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831327">Vanhusten viikolla paljon ilmaistapahtumia Kuopiossa ââosaan ohjelmasta voi osallistua myös etänä</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1118 <time class="diks-date__published" datetime="2026-09-30T04:00:00+03:00">30.9.2026 4:00</time> 1119 1120 </div> 1121<div class="diks-comment-count "> 1122 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9831327" data-coral-id="9831327"></span> 1123 </div> 1124 </div> 1125 </div></div> 1126 </div> 1127 </div></article> 1128 1129 1130 <article class="diks-card diks-card--reversed"> 1131 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1132 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9831133"><span class="diks-ui-accent">Jouni Vornasen kolumni | </span>Yhden hengen bileet</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1133 <time class="diks-date__published" datetime="2026-09-30T03:00:00+03:00">30.9.2026 3:00</time> 1134 1135 </div> 1136<div class="diks-comment-count "> 1137 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9831133" data-coral-id="9831133"></span> 1138 </div> 1139 </div> 1140 </div></div> 1141 </div> 1142 </div></article> 1143 1144 1145 <article class="diks-card diks-card--reversed"> 1146 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1147 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9831143"><span class="diks-ui-accent">Mielipide | </span>Sote-keskus kuuluu Kuopion ydinkeskustaan</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1148 <time class="diks-date__published" datetime="2026-09-30T02:00:00+03:00">30.9.2026 2:00</time> 1149 1150 </div> 1151<div class="diks-comment-count "> 1152 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9831143" data-coral-id="9831143"></span> 1153 </div> 1154 </div> 1155 </div></div> 1156 </div> 1157 </div></article> 1158 1159 1160 1161 <article class="diks-card diks-card--reversed"> 1162 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1163 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9830607">Kuopioon kaksi uutta Nosto-automaattia</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1164 <time class="diks-date__published" datetime="2026-09-29T14:00:00+03:00">29.9.2026 14:00</time> 1165 1166 </div> 1167<div class="diks-comment-count "> 1168 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9830607" data-coral-id="9830607"></span> 1169 </div> 1170 </div> 1171 </div></div> 1172 </div> 1173 </div></article> 1174 1175 1176 1177 <article class="diks-card diks-card--reversed"> 1178 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1179 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9830543">Pohjois-Savossa oli elokuussa 13 380 työtöntä</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1180 <time class="diks-date__published" datetime="2026-09-29T10:30:00+03:00">29.9.2026 10:30</time> 1181 1182 </div> 1183<div class="diks-comment-count "> 1184 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9830543" data-coral-id="9830543"></span> 1185 </div> 1186 </div> 1187 </div></div> 1188 </div> 1189 </div></article> 1190 1191 1192 1193 <article class="diks-card diks-card--reversed"> 1194 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1195 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9828245">Keskustan tietyömaat vaikuttavat liikenteeseen â lue täältä, miten</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1196 <time class="diks-date__published" datetime="2026-09-28T14:00:00+03:00">28.9.2026 14:00</time> 1197 1198 </div> 1199<div class="diks-comment-count "> 1200 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9828245" data-coral-id="9828245"></span> 1201 </div> 1202 </div> 1203 </div></div> 1204 </div> 1205 </div></article> <div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true">
1206 <div class="diks-display-ad__unit" id="gam-ad-jattiboksi1" > 1207
1207<script>googletag.cmd.push(function() { googletag.display('gam-ad-jattiboksi1'); });</script>
1207 1208 </div> 1209 </div><div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true"> 1210 <div class="diks-display-ad__unit" id="gam-ad-mobiili1" > 1211
1211<script>googletag.cmd.push(function() { googletag.display('gam-ad-mobiili1'); });</script>
1211 1212 </div> 1213 </div> 1214 1215 1216 1217 <article class="diks-card diks-card--reversed"> 1218 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1219 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9812452">Syksyn influenssarokotukset alkavat Pohjois-Savossa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1220 <time class="diks-date__published" datetime="2026-09-26T05:00:00+03:00">26.9.2026 5:00</time> 1221 1222 </div> 1223<div class="diks-comment-count "> 1224 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9812452" data-coral-id="9812452"></span> 1225 </div> 1226 </div> 1227 </div></div> 1228 </div> 1229 </div></article> 1230 1231 1232 1233 <article class="diks-card diks-card--reversed"> 1234 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1235 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9823844">Söpöysvaroitus! â Sadat vauvat viettivät päivää vauvamaiseen tapaan teatterilla</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1236 <time class="diks-date__published" datetime="2026-09-25T15:25:26+03:00">25.9.2026 15:25</time> 1237 1238 </div> 1239<div class="diks-comment-count "> 1240 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9823844" data-coral-id="9823844"></span> 1241 </div> 1242 </div> 1243 </div></div> 1244 </div> 1245 </div></article> 1246 1247 1248 1249 <article class="diks-card diks-card--reversed"> 1250 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1251 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9813328"><span class="diks-ui-accent">Lukijan kuva | </span>Sisilisko ja kullankeltaiseen pukeutunut sieni â lähetä oma kuvasi julkaistavaksi</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1252 <time class="diks-date__published" datetime="2026-09-25T05:00:00+03:00">25.9.2026 5:00</time> 1253 1254 </div> 1255<div class="diks-comment-count "> 1256 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9813328" data-coral-id="9813328"></span> 1257 </div> 1258 </div> 1259 </div></div> 1260 </div> 1261 </div></article> 1262 1263 1264 1265 <article class="diks-card diks-card--reversed"> 1266 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1267 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9820967">Hyvinvointi ja käsityöt valtaavat Kuopio-hallin viikonloppuna</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1268 <time class="diks-date__published" datetime="2026-09-24T21:30:00+03:00">24.9.2026 21:30</time> 1269 1270 </div> 1271<div class="diks-comment-count "> 1272 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9820967" data-coral-id="9820967"></span> 1273 </div> 1274 </div> 1275 </div></div> 1276 </div> 1277 </div></article> 1278 1279 1280 1281 <article class="diks-card diks-card--reversed"> 1282 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1283 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9814363">Viikkosavo tavoittaa yli 45 000 lukijaa â digilukijoiden määrä hienoisessa kasvussa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1284 <time class="diks-date__published" datetime="2026-09-23T07:00:00+03:00">23.9.2026 7:00</time> 1285 1286 </div> 1287<div class="diks-comment-count "> 1288 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9814363" data-coral-id="9814363"></span> 1289 </div> 1290 </div> 1291 </div></div> 1292 </div> 1293 </div></article> 1294 1295 1296 1297 <article class="diks-card diks-card--reversed"> 1298 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1299 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9813452">Tutkijoiden yö valtaa Kuopion kampuksen â mahdollisuus tutustua elämän rakennuspalikoihin ja Ursan planetaarioon</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1300 <time class="diks-date__published" datetime="2026-09-23T04:00:00+03:00">23.9.2026 4:00</time> 1301 1302 </div> 1303<div class="diks-comment-count "> 1304 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9813452" data-coral-id="9813452"></span> 1305 </div> 1306 </div> 1307 </div></div> 1308 </div> 1309 </div></article> 1310 1311 1312 <article class="diks-card diks-card--reversed"> 1313 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1314 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9813273"><span class="diks-ui-accent">Atte von Wrightin kolumni | </span>Viimeiselle vartille</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1315 <time class="diks-date__published" datetime="2026-09-23T03:00:00+03:00">23.9.2026 3:00</time> 1316 1317 </div> 1318<div class="diks-comment-count "> 1319 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9813273" data-coral-id="9813273"></span> 1320 </div> 1321 </div> 1322 </div></div> 1323 </div> 1324 </div></article> 1325 1326 1327 1328 <article class="diks-card diks-card--reversed"> 1329 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1330 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9813425"><span class="diks-ui-accent">Kymmenen kysymystä | </span>Myynti- ja vientikoordinaattori Matti Kauppinen arvostaa toisessa ihmisessä eniten täsmällisyyttä</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1331 <time class="diks-date__published" datetime="2026-09-23T02:00:00+03:00">23.9.2026 2:00</time> 1332 1333 </div> 1334<div class="diks-comment-count "> 1335 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9813425" data-coral-id="9813425"></span> 1336 </div> 1337 </div> 1338 </div></div> 1339 </div> 1340 </div></article> 1341 1342 1343 1344 <article class="diks-card diks-card--reversed"> 1345 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1346 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9811906">Suomalaiset kansanperinteet veti tuhansia kävijöitä kuopiolaiskauppakeskukseen</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1347 <time class="diks-date__published" datetime="2026-09-22T09:54:09+03:00">22.9.2026 9:54</time> 1348 1349 </div> 1350<div class="diks-comment-count "> 1351 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9811906" data-coral-id="9811906"></span> 1352 </div> 1353 </div> 1354 </div></div> 1355 </div> 1356 </div></article> 1357 1358 1359 1360 <article class="diks-card diks-card--reversed"> 1361 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1362 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9800893">
1362Vauvoille oma tapahtuma Kuopion kaupunginteatterilla</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1363 <time class="diks-date__published" datetime="2026-09-20T05:00:00+03:00">20.9.2026 5:00</time> 1364 1365 </div> 1366<div class="diks-comment-count "> 1367 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9800893" data-coral-id="9800893"></span> 1368 </div> 1369 </div> 1370 </div></div> 1371 </div> 1372 </div></article> <div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true"> 1373 <div class="diks-display-ad__unit" id="gam-ad-jattiboksi2" > 1374
1374<script>googletag.cmd.push(function() { googletag.display('gam-ad-jattiboksi2'); });</script>
1374 1375 </div> 1376 </div><div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true"> 1377 <div class="diks-display-ad__unit" id="gam-ad-mobiili2" > 1378
1378<script>googletag.cmd.push(function() { googletag.display('gam-ad-mobiili2'); });</script>
1378 1379 </div> 1380 </div> 1381 1382 1383 1384 <article class="diks-card diks-card--reversed"> 1385 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1386 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9799900">Itä-Suomen yliopisto avaa kymmenen aloituspaikkaa Venäjän kielen alkeisiin</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1387 <time class="diks-date__published" datetime="2026-09-19T05:00:00+03:00">19.9.2026 5:00</time> 1388 1389 </div> 1390<div class="diks-comment-count "> 1391 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9799900" data-coral-id="9799900"></span> 1392 </div> 1393 </div> 1394 </div></div> 1395 </div> 1396 </div></article> 1397 1398 1399 1400 <article class="diks-card diks-card--reversed"> 1401 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1402 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9803068">Kuopiolainen kalatuote vei ykkössijan kansainvälisessä Great Taste -kilpailussa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1403 <time class="diks-date__published" datetime="2026-09-18T12:00:00+03:00">18.9.2026 12:00</time> 1404 1405 </div> 1406<div class="diks-comment-count "> 1407 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9803068" data-coral-id="9803068"></span> 1408 </div> 1409 </div> 1410 </div></div> 1411 </div> 1412 </div></article> 1413 1414 1415 1416 <article class="diks-card diks-card--reversed"> 1417 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1418 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9799448"><span class="diks-ui-accent">Lukijan kuva | </span>Amiraaliperhonen ilahduttaa vielä syksylläkin â lähetä oma kuvasi julkaistavaksi</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1419 <time class="diks-date__published" datetime="2026-09-18T05:00:00+03:00">18.9.2026 5:00</time> 1420 1421 </div> 1422<div class="diks-comment-count "> 1423 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9799448" data-coral-id="9799448"></span> 1424 </div> 1425 </div> 1426 </div></div> 1427 </div> 1428 </div></article> 1429 1430 1431 1432 <article class="diks-card diks-card--reversed"> 1433 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1434 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9801395">Kuopion Rusta muuttaa Teollisuuskadulle</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1435 <time class="diks-date__published" datetime="2026-09-17T15:53:31+03:00">17.9.2026 15:53</time> 1436 1437 </div> 1438<div class="diks-comment-count "> 1439 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9801395" data-coral-id="9801395"></span> 1440 </div> 1441 </div> 1442 </div></div> 1443 </div> 1444 </div></article> 1445 1446 1447 1448 <article class="diks-card diks-card--reversed"> 1449 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1450 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9799752">Jalankulku- ja pyöräilyväylää kunnostetaan Jynkänvuorella</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1451 <time class="diks-date__published" datetime="2026-09-17T11:30:00+03:00">17.9.2026 11:30</time> 1452 1453 </div> 1454<div class="diks-comment-count "> 1455 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9799752" data-coral-id="9799752"></span> 1456 </div> 1457 </div> 1458 </div></div> 1459 </div> 1460 </div></article> 1461 1462 1463 1464 <article class="diks-card diks-card--reversed"> 1465 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1466 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9797093">Pohjois-Savon Lääkäriyhdistyksen Martti Hämäläinen -palkinto arvostetulle rintasyöpätutkijalle</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1467 <time class="diks-date__published" datetime="2026-09-16T13:00:00+03:00">16.9.2026 13:00</time> 1468 1469 </div> 1470<div class="diks-comment-count "> 1471 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9797093" data-coral-id="9797093"></span> 1472 </div> 1473 </div> 1474 </div></div> 1475 </div> 1476 </div></article> 1477 1478 1479 1480 <article class="diks-card diks-card--reversed"> 1481 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1482 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9794519">Lucien Sene jäi eläkkeelle ââkahden valtakunnallisesti suositun muusikon isä suuntaa pois Savosta</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1483 <time class="diks-date__published" datetime="2026-09-16T05:00:00+03:00">16.9.2026 5:00</time> 1484 1485 </div> 1486<div class="diks-comment-count "> 1487 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9794519" data-coral-id="9794519"></span> 1488 </div> 1489 </div> 1490 </div></div> 1491 </div> 1492 </div></article> 1493 1494 1495 1496 <article class="diks-card diks-card--reversed"> 1497 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1498 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9794555">Mediataidefestarit näkyy ympäri kaupunkia ââensimmäisen viikon huipentaa Kauppakadulla järjestettävät reivit</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1499 <time class="diks-date__published" datetime="2026-09-16T04:30:00+03:00">16.9.2026 4:30</time> 1500 1501 </div> 1502<div class="diks-comment-count "> 1503 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9794555" data-coral-id="9794555"></span> 1504 </div> 1505 </div> 1506 </div></div> 1507 </div> 1508 </div></article> 1509 1510 1511 1512 <article class="diks-card diks-card--reversed"> 1513 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1514 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9794795">Luontokuvanäyttely johdattaa pohjoisten havumetsien ekosysteemien maailmaan</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1515 <time class="diks-date__published" datetime="2026-09-16T03:30:00+03:00">16.9.2026 3:30</time> 1516 1517 </div> 1518<div class="diks-comment-count "> 1519 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9794795" data-coral-id="9794795"></span> 1520 </div> 1521 </div> 1522 </div></div> 1523 </div> 1524 </div></article> 1525 1526 1527 <article class="diks-card diks-card--reversed"> 1528 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1529 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9794730"><span class="diks-ui-accent">Tero Taipaleen kolumni | </span>Elämää saaressa â tassun alla</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1530 <time class="diks-date__published" datetime="2026-09-16T03:00:00+03:00">16.9.2026 3:00</time> 1531 1532 </div> 1533<div class="diks-comment-count "> 1534 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9794730" data-coral-id="9794730"></span> 1535 </div> 1536 </div> 1537 </div></div> 1538 </div> 1539 </div></article> <div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true">
1540 <div class="diks-display-ad__unit" id="gam-ad-jattiboksi3" > 1541
1541<script>googletag.cmd.push(function() { googletag.display('gam-ad-jattiboksi3'); });</script>
1541 1542 </div> 1543 </div><div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true"> 1544 <div class="diks-display-ad__unit" id="gam-ad-mobiili3" > 1545
1545<script>googletag.cmd.push(function() { googletag.display('gam-ad-mobiili3'); });</script>
1545 1546 </div> 1547 </div> 1548 1549 1550 1551 <article class="diks-card diks-card--reversed"> 1552 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1553 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9794597"><span class="diks-ui-accent">Kymmenen kysymystä | </span>Toimittaja-juontaja Olavi Rytkönen toivoisi rootsmusiikin festivaalia Kuopioon</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1554 <time class="diks-date__published" datetime="2026-09-16T02:00:00+03:00">16.9.2026 2:00</time> 1555 1556 </div> 1557<div class="diks-comment-count "> 1558 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9794597" data-coral-id="9794597"></span> 1559 </div> 1560 </div> 1561 </div></div> 1562 </div> 1563 </div></article> 1564 1565 1566 1567 <article class="diks-card diks-card--reversed"> 1568 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1569 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9794339">Villapaidoilla vapaaoppilaspaikkoja lapsille ja nuorille</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1570 <time class="diks-date__published" datetime="2026-09-16T01:30:00+03:00">16.9.2026 1:30</time> 1571 1572 </div> 1573<div class="diks-comment-count "> 1574 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9794339" data-coral-id="9794339"></span> 1575 </div> 1576 </div> 1577 </div></div> 1578 </div> 1579 </div></article> 1580 1581 1582 1583 <article class="diks-card diks-card--reversed"> 1584 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1585 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9794308">Musiikki- ja tanssityöpajassa opetellaan Jepuan menuettia ja polskaa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1586 <time class="diks-date__published" datetime="2026-09-16T01:00:00+03:00">16.9.2026 1:00</time> 1587 1588 </div> 1589<div class="diks-comment-count "> 1590 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9794308" data-coral-id="9794308"></span> 1591 </div> 1592 </div> 1593 </div></div> 1594 </div> 1595 </div></article> 1596 1597 1598 1599 <article class="diks-card diks-card--reversed"> 1600 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1601 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9793929"><span class="diks-ui-accent">Katsomossa | </span>Addams-ilmiö rantautui Kuopioon, toiveissa erikoisnäytös halloweenina</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1602 <time class="diks-date__published" datetime="2026-09-15T13:15:00+03:00">15.9.2026 13:15</time> 1603 1604 </div> 1605<div class="diks-comment-count "> 1606 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9793929" data-coral-id="9793929"></span> 1607 </div> 1608 </div> 1609 </div></div> 1610 </div> 1611 </div></article> 1612 1613 1614 1615 <article class="diks-card diks-card--reversed"> 1616 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1617 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9778978">Kuolonmetalli korisee jälleen Kuopion satamassa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1618 <time class="diks-date__published" datetime="2026-09-13T05:00:00+03:00">13.9.2026 5:00</time> 1619 1620 </div> 1621<div class="diks-comment-count "> 1622 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9778978" data-coral-id="9778978"></span> 1623 </div> 1624 </div> 1625 </div></div> 1626 </div> 1627 </div></article> 1628 1629 1630 1631 <article class="diks-card diks-card--reversed"> 1632 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1633 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9784051">Saastamoisenpuiston korttelileikkipaikka saneeraukseen</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1634 <time class="diks-date__published" datetime="2026-09-11T10:10:49+03:00">11.9.2026 10:10</time> 1635 1636 </div> 1637<div class="diks-comment-count "> 1638 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9784051" data-coral-id="9784051"></span> 1639 </div> 1640 </div> 1641 </div></div> 1642 </div> 1643 </div></article> 1644 1645 1646 1647 <article class="diks-card diks-card--reversed"> 1648 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1649 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9775402"><span class="diks-ui-accent">Lukijan kuva | </span>Lukijoiden kuvissa loistavat syksyn värit â lähetä oma kuvasi julkaistavaksi</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1650 <time class="diks-date__published" datetime="2026-09-11T04:00:00+03:00">11.9.2026 4:00</time> 1651 1652 | Päivitetty <time class="diks-date__updated" datetime="2026-09-15T12:20:55+03:00">15.9.2026 12:20</time> 1653 </div> 1654<div class="diks-comment-count "> 1655 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9775402" data-coral-id="9775402"></span> 1656 </div> 1657 </div> 1658 </div></div> 1659 </div> 1660 </div></article> 1661 1662 1663 1664 <article class="diks-card diks-card--reversed"> 1665 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1666 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9782579">Tahkon kesäteatteri siirtyy Louhosareenalle ââensi kesänä mukana Esko Roine ja Sinikka Sokka</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1667 <time class="diks-date__published" datetime="2026-09-10T16:15:00+03:00">10.9.2026 16:15</time> 1668 1669 </div> 1670<div class="diks-comment-count "> 1671 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9782579" data-coral-id="9782579"></span> 1672 </div> 1673 </div> 1674 </div></div> 1675 </div> 1676 </div></article> 1677 1678 1679 1680 <article class="diks-card diks-card--reversed"> 1681 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1682 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9775848">Damilare Olalude ei halunnut, että hänen aikansa Kuopiossa menee hukkaan â teki elokuvan yhdessä 85 vapaaehtoisen kanssa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1683 <time class="diks-date__published" datetime="2026-09-09T05:00:00+03:00">9.9.2026 5:00</time> 1684 1685 </div> 1686<div class="diks-comment-count "> 1687 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9775848" data-coral-id="9775848"></span> 1688 </div> 1689 </div> 1690 </div></div> 1691 </div> 1692 </div></article> 1693 1694 1695 1696 <article class="diks-card diks-card--reversed"> 1697 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1698 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9775810">Kuopiossa järjestetään syyskuussa kaksi isoa harrastustapahtumaa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1699 <time class="diks-date__published" datetime="2026-09-09T03:30:00+03:00">9.9.2026 3:30</time> 1700 1701 </div> 1702<div class="diks-comment-count "> 1703 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9775810" data-coral-id="9775810"></span> 1704 </div> 1705 </div> 1706 </div></div> 1707 </div> 1708 </div></article> <div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true">
1709 <div class="diks-display-ad__unit" id="gam-ad-jattiboksi4" > 1710
1710<script>googletag.cmd.push(function() { googletag.display('gam-ad-jattiboksi4'); });</script>
1710 1711 </div> 1712 </div><div class="diks-display-ad diks-display-ad--with-border rs_skip" aria-hidden="true"> 1713 <div class="diks-display-ad__unit" id="gam-ad-mobiili4" > 1714
1714<script>googletag.cmd.push(function() { googletag.display('gam-ad-mobiili4'); });</script>
1714 1715 </div> 1716 </div> 1717 1718 1719 1720 <article class="diks-card diks-card--reversed"> 1721 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1722 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9775770">Kuopiolaiskirjakaupassa kirjailijoiden täyttämä syksy â Vieraana muun muassa Pate Mustajärven leski</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1723 <time class="diks-date__published" datetime="2026-09-09T03:00:00+03:00">9.9.2026 3:00</time> 1724 1725 </div> 1726<div class="diks-comment-count "> 1727 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9775770" data-coral-id="9775770"></span> 1728 </div> 1729 </div> 1730 </div></div> 1731 </div> 1732 </div></article> 1733 1734 1735 1736 <article class="diks-card diks-card--reversed"> 1737 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1738 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9775468"><span class="diks-ui-accent">Kysely | </span>Mistä ammennat energiaa ja virtaa syksyyn?</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1739 <time class="diks-date__published" datetime="2026-09-09T02:00:00+03:00">9.9.2026 2:00</time> 1740 1741 </div> 1742<div class="diks-comment-count "> 1743 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9775468" data-coral-id="9775468"></span> 1744 </div> 1745 </div> 1746 </div></div> 1747 </div> 1748 </div></article> 1749 1750 1751 <article class="diks-card diks-card--reversed"> 1752 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1753 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9775327"><span class="diks-ui-accent">Wilhemiina Honkasen kolumni | </span>Oli Eeva, Katariina, Aku ja Pekka. Oli kesä.</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1754 <time class="diks-date__published" datetime="2026-09-09T01:30:00+03:00">9.9.2026 1:30</time> 1755 1756 </div> 1757<div class="diks-comment-count "> 1758 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paakirjoitus-mielipide/9775327" data-coral-id="9775327"></span> 1759 </div> 1760 </div> 1761 </div></div> 1762 </div> 1763 </div></article> 1764 1765 1766 1767 <article class="diks-card diks-card--reversed"> 1768 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1769 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9773960"><span class="diks-ui-accent">Kymmenen kysymystä | </span>Kirjailija Tatu Kokko poimii arkeensa virtaa erityisesti ihanasta parisuhteesta</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1770 <time class="diks-date__published" datetime="2026-09-09T01:00:00+03:00">9.9.2026 1:00</time> 1771 1772 </div> 1773<div class="diks-comment-count "> 1774 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9773960" data-coral-id="9773960"></span> 1775 </div> 1776 </div> 1777 </div></div> 1778 </div> 1779 </div></article> 1780 1781 1782 1783 <article class="diks-card diks-card--reversed"> 1784 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1785 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9773878"><span class="diks-ui-accent">Katsomossa | </span>Miesluolassa kohtaavat kädentaidot ja voimaantumistarpeet</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1786 <time class="diks-date__published" datetime="2026-09-08T11:00:00+03:00">8.9.2026 11:00</time> 1787 1788 </div> 1789<div class="diks-comment-count "> 1790 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9773878" data-coral-id="9773878"></span> 1791 </div> 1792 </div> 1793 </div></div> 1794 </div> 1795 </div></article> 1796 1797 1798 1799 <article class="diks-card diks-card--reversed"> 1800 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1801 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9772342">Kuopiossa etsitään jälleen vuoden vapaaehtoistekoa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1802 <time class="diks-date__published" datetime="2026-09-08T05:00:00+03:00">8.9.2026 5:00</time> 1803 1804 </div> 1805<div class="diks-comment-count "> 1806 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9772342" data-coral-id="9772342"></span> 1807 </div> 1808 </div> 1809 </div></div> 1810 </div> 1811 </div></article> 1812 1813 1814 1815 <article class="diks-card diks-card--reversed"> 1816 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1817 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9771755">Kuopion toriparkissa nähdään viikon ajan digitaalinen taidefestivaali</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1818 <time class="diks-date__published" datetime="2026-09-07T13:30:00+03:00">7.9.2026 13:30</time> 1819 1820 | Päivitetty <time class="diks-date__updated" datetime="2026-09-07T13:55:13+03:00">7.9.2026 13:55</time> 1821 </div> 1822<div class="diks-comment-count "> 1823 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9771755" data-coral-id="9771755"></span> 1824 </div> 1825 </div> 1826 </div></div> 1827 </div> 1828 </div></article> 1829 1830 1831 1832 <article class="diks-card diks-card--reversed"> 1833 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1834 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9752986">Levykauppayrittäjä Jyri Lipponen on Vuoden Yrittäjä</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1835 <time class="diks-date__published" datetime="2026-09-05T19:30:00+03:00">5.9.2026 19:30</time> 1836 1837 </div> 1838<div class="diks-comment-count "> 1839 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9752986" data-coral-id="9752986"></span> 1840 </div> 1841 </div> 1842 </div></div> 1843 </div> 1844 </div></article> 1845 1846 1847 <article class="diks-card diks-card--reversed"> 1848 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1849 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9767051">Erikoissairaanhoidon laskutuksessa voi olla viivettä Pohjois-Savossa</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1850 <time class="diks-date__published" datetime="2026-09-04T15:15:00+03:00">4.9.2026 15:15</time> 1851 1852 </div> 1853<div class="diks-comment-count "> 1854 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9767051" data-coral-id="9767051"></span> 1855 </div> 1856 </div> 1857 </div></div> 1858 </div> 1859 </div></article> 1860 1861 1862 1863 <article class="diks-card diks-card--reversed"> 1864 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1865 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9759975">Remontti sulkee Lippumäen uimahallin lähes puoleksi vuodeksi</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1866 <time class="diks-date__published" datetime="2026-09-02T16:00:00+03:00">2.9.2026 16:00</time> 1867 1868 </div> 1869<div class="diks-comment-count "> 1870 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9759975" data-coral-id="9759975"></span> 1871 </div> 1872 </div> 1873 </div></div> 1874 </div> 1875 </div></article> <nav aria-label="Arkiston sivutus"> 1876 <ul class="diks-pagination "> 1877 <li class="diks-pagination__item"></li> 1878 1879 <li class="diks-pagination__item">
1880 <a class="diks-pagination__item-link diks-pagination__item-link--active" href="https://www.viikkosavo.fi/uusimmat/sivu/1" aria-current="true">Olet sivulla 1</a> 1881 </li> 1882 1883 <li class="diks-pagination__item"><a class="diks-pagination__item-link" href="https://www.viikkosavo.fi/uusimmat/sivu/2" aria-label="Siirry seuraavalle sivulle">Seuraava</a> 1884 <span class="diks-icon diks-icon--size-m" aria-hidden="true"><svg role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24"> 1885 <path fill-rule="evenodd" d="M13.5859 12L8.29297 6.70711L9.70718 5.29289L16.4143 12L9.70718 18.7071L8.29297 17.2929L13.5859 12Z" clip-rule="evenodd"/> 1886</svg> 1887</span></li> 1888 </ul></section> 1889 </main> 1890 <aside class="diks-section__aside diks-aside-column"> 1891 1892 <div class="diks-display-ad rs_skip" aria-hidden="true"> 1893 <div class="diks-display-ad__unit" id="gam-ad-boksi1" > 1894
1894<script>googletag.cmd.push(function() { googletag.display('gam-ad-boksi1'); });</script>
1894 1895 </div> 1896 </div> 1897 <!-- ESI start element "frontPageNews" generated at 02-10-2026 14:40:24.193285 --> 1898 <h2 class="diks-title diks-title--section" ><a class="diks-title__link" href="/" aria-label="Lue lisää etusivun juttuja">Etusivulla nyt</a></h2><ul id="etusivulla-nyt" class="diks-article-list diks-article-list--unordered" ><li class="diks-article-list__item"> 1899 1900 1901 1902 1903 <article class="diks-card diks-card--size-xs"> 1904 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1905 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831162"><span class="diks-ui-accent">Lukijan kuva | </span>Kukan siemeniä ja lehtokotiloita â lähetä oma kuvasi julkaistavaksi</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1906 <time class="diks-date__published" datetime="2026-10-02T04:00:00+03:00">Tänään 4:00</time> 1907 1908 </div> 1909<div class="diks-comment-count "> 1910 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9831162" data-coral-id="9831162"></span> 1911 </div> 1912 </div> 1913 </div></div> 1914 </div> 1915 </div></article> </li><li class="diks-article-list__item"> 1916 1917 1918 1919 1920 <article class="diks-card diks-card--size-xs"> 1921 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1922 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9835071">Kaksi enkeliä Kuopion Ison hautausmaan pääportin edustalle</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1923 <time class="diks-date__published" datetime="2026-09-30T17:00:00+03:00">30.9.2026 17:00</time> 1924 1925 </div> 1926<div class="diks-comment-count "> 1927 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9835071" data-coral-id="9835071"></span> 1928 </div> 1929 </div> 1930 </div></div> 1931 </div> 1932 </div></article> </li><li class="diks-article-list__item"> 1933 1934 1935 1936 1937 <article class="diks-card diks-card--size-xs"> 1938 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1939 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9834325">Sami Tervonen jatkaa KalPan päävalmentajana</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1940 <time class="diks-date__published" datetime="2026-09-30T12:30:00+03:00">30.9.2026 12:30</time> 1941 1942 </div> 1943<div class="diks-comment-count "> 1944 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9834325" data-coral-id="9834325"></span> 1945 </div> 1946 </div> 1947 </div></div> 1948 </div> 1949 </div></article> </li><li class="diks-article-list__item"> 1950 1951 1952 1953 1954 <article class="diks-card diks-card--size-xs"> 1955 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1956 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831357">Kuopiolaisravintolassa voi kokea kahdeksan ilmaiskeikkaa lauantaina</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1957 <time class="diks-date__published" datetime="2026-09-30T05:00:00+03:00">30.9.2026 5:00</time> 1958 1959 </div> 1960<div class="diks-comment-count "> 1961 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9831357" data-coral-id="9831357"></span> 1962 </div> 1963 </div> 1964 </div></div> 1965 </div> 1966 </div></article> </li><li class="diks-article-list__item"> 1967 1968 1969 1970 1971 <article class="diks-card diks-card--size-xs"> 1972 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 1973 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831327">
1973Vanhusten viikolla paljon ilmaistapahtumia Kuopiossa ââosaan ohjelmasta voi osallistua myös etänä</a></h2><div class="diks-card__meta-wrapper"><div class="diks-meta "> <div class="diks-date "> 1974 <time class="diks-date__published" datetime="2026-09-30T04:00:00+03:00">30.9.2026 4:00</time> 1975 1976 </div> 1977<div class="diks-comment-count "> 1978 <span class="coral-count" data-coral-notext="true" data-coral-url="https://www.viikkosavo.fi/paikalliset/9831327" data-coral-id="9831327"></span> 1979 </div> 1980 </div> 1981 </div></div> 1982 </div> 1983 </div></article> </li></ul><!-- ESI end element "frontPageNews" --> 1984 <div class="diks-display-ad rs_skip" aria-hidden="true"> 1985 <div class="diks-display-ad__unit" id="gam-ad-boksi2" > 1986
1986<script>googletag.cmd.push(function() { googletag.display('gam-ad-boksi2'); });</script>
1986 1987 </div> 1988 </div> 1989 <div class="diks-display-ad rs_skip" aria-hidden="true"> 1990 <div class="diks-display-ad__unit" id="gam-ad-mobiili5" > 1991
1991<script>googletag.cmd.push(function() { googletag.display('gam-ad-mobiili5'); });</script>
1991 1992 </div> 1993 </div><!-- ESI start element "mostReadFromCurrentPublication" generated at 02-10-2026 14:39:46.142385 --> 1994 <h2 class="diks-title diks-title--section" ><a class="diks-title__link" href="/luetuimmat/" aria-label="Lue lisää luetuimpia juttuja">Luetuimmat</a></h2><ol id="luetuimmat" class="diks-article-list diks-article-list--ordered" ><li class="diks-article-list__item"> 1995 1996 1997 1998 <article class="diks-card diks-card--size-xs"> 1999 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 2000 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paakirjoitus-mielipide/9831133"><span class="diks-ui-accent">Jouni Vornasen kolumni | </span>Yhden hengen bileet</a></h2></div> 2001 </div> 2002 </div></article> </li><li class="diks-article-list__item"> 2003 2004 2005 2006 2007 <article class="diks-card diks-card--size-xs"> 2008 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 2009 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9835071">Kaksi enkeliä Kuopion Ison hautausmaan pääportin edustalle</a></h2></div> 2010 </div> 2011 </div></article> </li><li class="diks-article-list__item"> 2012 2013 2014 2015 2016 <article class="diks-card diks-card--size-xs"> 2017 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 2018 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831357">Kuopiolaisravintolassa voi kokea kahdeksan ilmaiskeikkaa lauantaina</a></h2></div> 2019 </div> 2020 </div></article> </li><li class="diks-article-list__item"> 2021 2022 2023 2024 2025 <article class="diks-card diks-card--size-xs"> 2026 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 2027 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9812452">Syksyn influenssarokotukset alkavat Pohjois-Savossa</a></h2></div> 2028 </div> 2029 </div></article> </li><li class="diks-article-list__item"> 2030 2031 2032 2033 2034 <article class="diks-card diks-card--size-xs"> 2035 <div class="diks-card__main-wrapper"><div class="diks-card__text-wrapper"> 2036 <div class="diks-card__text-inner-wrapper"><h2 class="diks-card__title"><a class="diks-card__link" href="https://www.viikkosavo.fi/paikalliset/9831162"><span class="diks-ui-accent">Lukijan kuva | </span>Kukan siemeniä ja lehtokotiloita â lähetä oma kuvasi julkaistavaksi</a></h2></div> 2037 </div> 2038 </div></article> </li></ol><!-- ESI end element "mostReadFromCurrentPublication" --> 2039 <div class="diks-display-ad rs_skip" aria-hidden="true"> 2040 <div class="diks-display-ad__unit" id="gam-ad-boksi3" > 2041
2041<script>googletag.cmd.push(function() { googletag.display('gam-ad-boksi3'); });</script>
2041 2042 </div> 2043 </div> 2044 <div class="diks-display-ad rs_skip" aria-hidden="true"> 2045 <div class="diks-display-ad__unit" id="gam-ad-mobiili6" > 2046
2046<script>googletag.cmd.push(function() { googletag.display('gam-ad-mobiili6'); });</script>
2046 2047 </div> 2048 </div> 2049 <div class="diks-display-ad rs_skip" aria-hidden="true"> 2050 <div class="diks-display-ad__unit" id="gam-ad-boksi4" > 2051
2051<script>googletag.cmd.push(function() { googletag.display('gam-ad-boksi4'); });</script>
2051 2052 </div> 2053 </div> 2054 </aside> 2055 </div> 2056 </div> 2057 </div> 2058 </div> 2059 2060 2061 <footer class="diks-footer"><div class="diks-container diks-container--narrow-mobile diks-container--full-width-before-l"> 2062 <div class="diks-footer__top"> <nav class="diks-navigation-wrapper " aria-label="Osastovalikko"><ul class="diks-navigation diks-navigation--row diks-navigation--light diks-navigation--centered diks-navigation--mobile-row diks-navigation--draggable diks-navigation--size-xs diks-navigation--active-subtle" ><li class="diks-navigation__item " ><a class="diks-navigation__link " href="https://savo.menoinfo.fi/fi-FI"draggable="false">Menoinfo - Katso täältä Pohjois-Savon tapahtumat</a></li></ul> 2063 </nav></div> 2064 </div><div class="diks-container"><div class="diks-footer__main"> 2065 <div class="diks-grid"> 2066 <div class="diks-column diks-column--span-4 diks-column--m-span-8 diks-column--l-span-4 diks-column--xl-span-4"> 2067 <p><img src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/viikkosavo.svg" class="diks-logo diks-logo--default diks-footer__main-logo--narrow" alt="Viikkosavo"><img src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/viikkosavo-white.svg" class="diks-logo diks-logo--darkmode diks-footer__main-logo--narrow" alt="Viikkosavo"></p> 2068 <p><strong>Postiosoite:</strong> Viestikatu 7 A 7, 70600 Kuopio<br><strong>Käyntiosoite:</strong> Viestikatu 7 A 7, Kuopio<br><strong>Vastaava päätoimittaja:</strong> Inka Palokangas</p></div> 2069 2070 <div class="diks-column diks-column--span-4 diks-column--m-span-8 diks-column--l-span-4 diks-column--xl-span-5"><div class="diks-footer__main-secondary-logos-container"><div class="diks-footer__main-secondary-logo"><a href="https://vastuullistajournalismia.fi/"><img src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/vastuullista-journalismia.png" loading="lazy" alt="Vastuullisen journalismin merkki kertoo, että sitä käyttävä media on sitoutunut noudattamaan Julkisen sanan neuvoston laatimia Journalistin ohjeita."></a></div></div><div class="diks-footer__main-links-wrapper"> 2071 <div class="diks-column diks-column--span-2"><a class="diks-footer__main-link" href="https://www.keskisuomalainen.com/tietosuojalauseke/">Tietosuojalauseke</a><a class="diks-footer__main-link" href="javascript:window.gravito.cmp.openPreferences();">Evästevalinnat</a><a class="diks-footer__main-link" href="https://www.keskisuomalainen.com/kayttoehdot/">Käyttöehdot</a><a class="diks-footer__main-link" href="https://keskisuomalainen.com/medianvapausasetus/">Medianvapausasetus</a><a class="diks-footer__main-link" href="https://oma.media.fi/tekoaly-journalismissamme/">Tekoäly journalismissamme</a></div> 2072 <div class="diks-column diks-column--span-2"><a class="diks-footer__main-link" href="https://oma.media.fi/lehti/viikkosavo/">Asiakaspalvelu</a><a class="diks-footer__main-link" href="https://www.meks.fi/mainonta/alueet/savon-media/">Mediamyynti</a><a class="diks-footer__main-link" href="https://oma.media.fi/lehti/viikkosavo/yhteystiedot/">Yhteystiedot</a></div> 2073 </div></div> 2074 2075 <div class="diks-column diks-column--span-4 diks-column--m-span-8 diks-column--l-span-4 diks-column--xl-span-5"> 2076 <h2 class="diks-footer__main-title">Sovellus</h2><p><strong>Uutissovellus</strong> sisältää tuoreet juttumme, joita ilmestyy ympäri vuorokauden vuoden jokaisena päivänä.</p><p><a class="diks-button diks-button--light" href="/asenna/" >Asenna uutissovellus</a></p> 2077 2078 2079 </div> 2080 </div> 2081 </div><div class="diks-footer__bottom"> 2082 <div class="diks-footer__bottom-row"><div class="diks-footer__bottom-logo-wrapper"><a href="https://www.keskisuomalainen.com/"><img class="diks-footer__bottom-logo" src="https://a.viikkosavo.fi/styles/2efe7af9/images/logos/keskisuomalainen-sign.svg" loading="lazy" alt="Keskisuomalainen Oyj"></a></div><span>Kuulumme Mediakonserni Keskisuomalaiseen</span></div> 2083 <div class="diks-footer__bottom-link-farm-wrapper"> 2084 <p><a class='diks-footer__bottom-link-farm-item' href='https://www.aamuposti.fi/'>Aamuposti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.avecmedia.fi/'>Avec</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.esaimaa.fi/'>Etelä-Saimaa</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.ess.fi/'>Etelä-Suomen Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.forssanlehti.fi/'>Forssan Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.hankasalmensanomat.fi/'>Hankasalmen Sanomat </a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.heinavedenlehti.fi/'>Heinäveden Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.helsinginuutiset.fi/'>Helsingin Uutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.hameensanomat.fi/'>Hämeen Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.hameenlinnankaupunkiuutiset.fi/'>Hämeenlinnan Kaupunkiuutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.iisalmensanomat.fi/'>Iisalmen Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.itahame.fi/'>Itä-Häme</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.ita-savo.fi/'>Itä-Savo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.joroistenlehti.fi/'>Joroisten Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.juvanlehti.fi/'>Juvan Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.kaakonkulma.fi/'>Kaakonkulma</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.kangasniemenlehti.fi/'>Kangasniemen Kunnallislehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.karjalainen.fi/'>Karjalainen</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.heili.fi/'>Karjalan Heili</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.karkkilalainen.fi/'>Karkkilalainen</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.keski-hame.fi/'>Keski-Häme</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.keski-uusimaa.fi/'>Keski-Uusimaa</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.keskilaakso.fi/'>Keskilaakso</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.ksml.fi/'>Keskisuomalainen</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.koillis-savo.fi/'>Koillis-Savo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.kouvolansanomat.fi/'>Kouvolan Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.kymensanomat.fi/'>Kymen Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lappeenrannanuutiset.fi/'>Lappeenrannan Uutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.laukaa-konnevesi.fi/'>Laukaa-Konnevesi</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lieksanlehti.fi/'>Lieksan Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lopenlehti.fi/'>Lopen Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.loviisansanomat.fi/'>Loviisan Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.luumaenlehti.fi/'>Luumäen Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lansisaimaa.fi/'>Länsi-Saimaan Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lansi-savo.fi/'>Länsi-Savo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lansi-uusimaa.fi/'>Länsi-Uusimaa</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.lansivayla.fi/'>Länsiväylä</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.mattijaliisa.fi/'>Matti ja Liisa</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.meksi.fi/'>Meksi Urheilumedia</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.miilu.fi/'>Miilu</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.mikkelinkaupunkilehti.fi/'>Mikkelin Kaupunkilehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.mantsalanuutiset.fi/'>Mäntsälän Uutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.aamuposti.fi/aihe/Nurmij%C3%A4rvi'>Nurmijärven Uutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.outokummunseutu.fi/'>Outokummun Seutu</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.joutsenolehti.fi/'>Paikallislehti Joutseno</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.prsanomat.fi/'>Parikkalan-Rautjärven Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pernionseudunlehti.fi/'>Perniönseudun Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pieksamaenlehti.fi/'>Pieksämäen Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pielavesi-keitele.fi/'>Pielavesi-Keitele</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pielisjokiseutu.fi/'>Pielisjokiseutu</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pitajalainen.fi/'>Pitäjäläinen</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pitajanuutiset.fi/'>Pitäjänuutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pogostansanomat.fi/'>Pogostan Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.puruvesi.net/'>Puruvesi</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.pyhtaanlehti.fi/'>Pyhtäänlehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.salonjokilaakso.fi/'>Salonjokilaakso</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.sampolehti.fi/'>Sampo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.savonsanomat.fi/'>Savon Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.sinunsavo.fi/'>Sinun Savo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.sisa-savolehti.fi/'>Sisä-Savo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.sisasuomenlehti.fi/'>Sisä-Suomen Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.soisalonseutu.fi/'>Soisalon Seutu</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.sjl.fi/'>Suur-Jyväskylän Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.tamperelainen.fi/'>Tamperelainen</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.tollotin.fi/'>Töllötin</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.uusimaa.fi/'>Uusimaa</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.uutis-jousi.fi/'>Uutis-Jousi</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.uutisvuoksi.fi/'>Uutisvuoksi</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.vantaansanomat.fi/'>Vantaan Sanomat</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.vihdinuutiset.fi/'>Vihdin Uutiset</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.viikkosavo.fi/'>Viikkosavo</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.viispiikkinen.fi/'>
2084Viispiikkinen</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.viitasaarenseutu.fi/'>Viitasaaren Seutu</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.warkaudenlehti.fi/'>Warkauden Lehti</a> • <a class='diks-footer__bottom-link-farm-item' href='https://www.ylakarjala.fi/'>Ylä-Karjala</a></p><p>Kaikki sisällöt voidaan julkaista kaikissa Mediakonserni Keskisuomalaisen medioissa.</p> 2085 </div> 2086 </div></div> 2087</footer> 2088 2089 2090
2090<script> 2091 if (!DOMTokenList.prototype.replace) { 2092 // IE Polyfill 2093 DOMTokenList.prototype.replace = function (a, b) { 2094 if (this.contains(a)) { 2095 this.add(b); 2096 this.remove(a); 2097 return true; 2098 } 2099 return false; 2100 } 2101 } 2102 2103 document.querySelector('.diks-no-js').classList.replace('diks-no-js', 'diks-js'); 2104 2105 // User agent sniffing is not reliable and it's going away. 2106 // Use only to sprinkle a little bit of progressive enhancement on top. 2107 // Dear Apple, stop lying, iPad on iOS 13 is not a Mac. You're turning into 90s Microsoft. 2108 var userAgent = navigator.userAgent || navigator.vendor || window.opera; 2109 if (/android/i.test(userAgent)) { 2110 document.querySelector('html').classList.add('diks-user-agent--android'); 2111 } else if (/iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream) { 2112 document.querySelector('html').classList.add('diks-user-agent--ios'); 2113 } else if (/macintosh/i.test(userAgent) && navigator.maxTouchPoints > 1) { 2114 document.querySelector('html').classList.add('diks-user-agent--ios'); 2115 } 2116</script>
2116 2117
2118<script> 2119 // Fix forEach for IE 2120 if (window.NodeList && !NodeList.prototype.forEach) { 2121 NodeList.prototype.forEach = Array.prototype.forEach; 2122 } 2123 2124 // Element.closest() needs a polyfill for older browsers. 2125 // While we only need the closest() functionality for mobile browsers, 2126 // we don't want the code to fail even on old desktop browsers. 2127 // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill 2128 // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Browser_compatibility 2129 if (!Element.prototype.matches) { 2130 Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 2131 } 2132 2133 if (!Element.prototype.closest) { 2134 Element.prototype.closest = function(s) { 2135 var el = this; 2136 2137 do { 2138 if (el.matches(s)) return el; 2139 el = el.parentElement || el.parentNode; 2140 } while (el !== null && el.nodeType === 1); 2141 return null; 2142 }; 2143 } 2144 2145 function setAriaExpanded(toggler, ariaExpandedValue) { 2146 // Set aria-expanded attribute of dropdown toggler 2147 // If the toggler contains a button, set the aria-expanded attribute for the button instead 2148 if ( toggler.querySelector('button') != null ) { 2149 toggler.querySelector('button').setAttribute('aria-expanded', ariaExpandedValue); 2150 } 2151 else { 2152 toggler.setAttribute('aria-expanded', ariaExpandedValue); 2153 } 2154 } 2155 2156 function toggleElement(target, toggleClass, toggler) { 2157 if (toggleClass) { 2158 var isOpenClass = toggleClass + '--is-open'; 2159 var isClosedClass = toggleClass + '--is-closed'; 2160 2161 if (target.classList.contains(isOpenClass)) { 2162 // Close this toggle 2163 target.classList.remove(isOpenClass); 2164 target.classList.add(isClosedClass); 2165 2166 // Set aria-expanded to false for the toggler 2167 setAriaExpanded(toggler, 'false'); 2168 2169 } else if (target.classList.contains(isClosedClass)) { 2170 // Open this toggle 2171 target.classList.remove(isClosedClass); 2172 target.classList.add(isOpenClass); 2173 2174 // Set aria-expanded to true for the toggler 2175 setAriaExpanded(toggler, 'true'); 2176 } else { 2177 // Open this toggle as a fallback 2178 target.classList.add(isOpenClass); 2179 2180 // Set aria-expanded to true for the toggler 2181 setAriaExpanded(toggler, 'true'); 2182 } 2183 } else { 2184 if (window.getComputedStyle(target).display !== 'none') { 2185 target.style.display = 'none'; 2186 } else { 2187 target.style.display = 'block'; 2188 } 2189 } 2190 }; 2191 2192 document.querySelectorAll('.js-diks-toggler').forEach(function(toggler) { 2193 var toggleId = toggler.getAttribute('data-diks-toggle'); 2194 var target = document.getElementById(toggleId); 2195 var eventListenerAttached = toggler.getAttribute('data-diks-event-click'); 2196 2197 if (target && !eventListenerAttached) { 2198 2199 // Set aria-controls of toggler 2200 if ( toggler.querySelector('button') != null ) { 2201 toggler.querySelector('button').setAttribute('aria-controls', toggleId); 2202 } 2203 else { 2204 toggler.setAttribute('aria-controls', toggleId); 2205 } 2206 2207 toggler.addEventListener('click', function(e) { 2208 e.preventDefault(); 2209 2210 var toggleClass = toggler.getAttribute('data-diks-toggle-class'); 2211 2212 if (webShareAPIEnabled(toggleId)) { 2213 share(); 2214 } else { 2215 toggleElement(target, toggleClass, toggler); 2216 } 2217 }); 2218 2219 toggler.setAttribute('data-diks-event-click', true); 2220 } 2221 }); 2222 2223 // Web Share and Clipboard API capabilities 2224 2225 function webShareAPIEnabled(toggleId) { 2226 const webShareAPIEnabled = true; 2227 const webShareAPIDropdownShareIds = ["jaa","jakopainikkeet"]; 2228 const isMobileDevice = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 2229 2230 return webShareAPIEnabled && webShareAPIDropdownShareIds.includes(toggleId) && isMobileDevice && navigator.share ? true : false; 2231 } 2232 2233 function share() { 2234 const metaTitleElement = document.querySelector('meta[property="og:title"]'); 2235 const metaDescriptionElement = document.querySelector('meta[name="description"]'); 2236 const metaUrlElement = document.querySelector('meta[property="og:url"]'); 2237 let title = ''; 2238 let description = ''; 2239 let url = document.location.href; 2240 2241 if (metaTitleElement && metaTitleElement.content) { 2242 title = metaTitleElement.content; 2243 } 2244 2245 if (metaDescriptionElement && metaDescriptionElement.content) { 2246 description = metaDescriptionElement.content; 2247 } 2248 2249 if (metaUrlElement && metaUrlElement.content) { 2250 url = metaUrlElement.content; 2251 } 2252 2253 navigator.share({ 2254 title: title, 2255 text: description, 2256 url: url 2257 }); 2258 } 2259 2260 document.querySelectorAll('.js-diks-share-clipboard').forEach(function(element) { 2261 element.addEventListener('click', function(e) { 2262 e.preventDefault(); 2263 2264 let url = document.location.href; 2265 const metaUrlElement = document.querySelector('meta[property="og:url"]'); 2266 2267 if (metaUrlElement && metaUrlElement.content) { 2268 url = metaUrlElement.content; 2269 } 2270 2271 // Copy URL to clipboard 2272 navigator.clipboard.writeText(url).then(function () { 2273 // Copying URL to clipboard succeeded 2274 const dropdownId = element.getAttribute('data-diks-dropdown-id'); 2275 // Find closest dropdown toggler 2276 let dropdownToggler = element.closest('.diks-dropdown').querySelector('.js-diks-toggler'); 2277 2278 if (dropdownId) { 2279 const dropdownElement = document.getElementById(dropdownId); 2280 2281 if (dropdownElement) { 2282 // Close currently open dropdown 2283 toggleElement(dropdownElement, 'diks-dropdown__content', dropdownToggler); 2284 } 2285 2286 // Show link copied notification text 2287 const notificationTextWrapperDiv = document.createElement('div'); 2288 const notificationTextDiv = document.createElement('div'); 2289 const notificationText = document.createTextNode('Linkki kopioitu leikepöydälle'); 2290 2291 notificationTextDiv.classList.add('diks-dropdown__notification-text'); 2292 notificationTextDiv.appendChild(notificationText); 2293 notificationTextWrapperDiv.classList.add('diks-dropdown__notification-text-wrapper'); 2294 notificationTextWrapperDiv.appendChild(notificationTextDiv); 2295 dropdownElement.parentNode.insertBefore(notificationTextWrapperDiv, null); 2296 2297 setTimeout(function () { 2298 notificationTextWrapperDiv.remove(); 2299 }, 5000); 2300 } 2301 }); 2302 }); 2303 }); 2304
2305 const initContentBlockToggleButtons = () => { 2306 const toggleContainers = document.querySelectorAll('[data-diks-init="toggle"]'); 2307 toggleContainers.forEach(container => { 2308 const toggleButton = container.querySelector('.diks-toggle-button'); 2309 const toggleContent = container.querySelector('.diks-toggle-content-container'); 2310 if (toggleButton && toggleContent) { 2311 toggleButton.addEventListener('click', () => { 2312 toggleElement(toggleContent, 'diks-toggle', toggleButton); 2313 }); 2314 } 2315 }); 2316 }; 2317 document.addEventListener('DOMContentLoaded', () => { 2318 initContentBlockToggleButtons(); 2319 }); 2320 2321</script>
2321 2322
2323<script> 2324 const useDragThreshold = true; 2325 2326 // Horizontally scrollable & draggable navigation 2327 class HorizontalScrollDragger { 2328 constructor(element) { 2329 this.slider = typeof element === 'string' ? document.querySelector(element) : element instanceof Element ? element : null; 2330 if (this.slider === null) return console.error('HorizontalScrollDragger: Element not found'); 2331 2332 this.isDown = false; 2333 this.preventClick = false; 2334 this.startX; 2335 this.scrollLeft; 2336 2337 this.dragThreshold = 5; 2338 this.dragSensitivity = 1; 2339 this.dragged = false; 2340 2341 this.init(); 2342 } 2343 2344 init() { 2345 this.slider.addEventListener('mousedown', (e) => this.handleMouseDown(e)); 2346 this.slider.addEventListener('mouseleave', () => this.handleMouseLeave()); 2347 this.slider.addEventListener('mouseup', () => this.handleMouseUp()); 2348 this.slider.addEventListener('mousemove', (e) => this.handleMouseMove(e)); 2349 this.slider.addEventListener('click', (e) => this.handleClick(e)); 2350 } 2351 2352 handleMouseDown(e) { 2353 this.isDown = true; 2354 this.slider.classList.add('diks-navigation--draggable-active'); 2355 this.startX = e.pageX - this.slider.offsetLeft; 2356 this.scrollLeft = this.slider.scrollLeft; 2357 this.preventClick = false; 2358 } 2359 2360 handleMouseLeave() { 2361 this.isDown = false; 2362 this.slider.classList.remove('diks-navigation--draggable-active'); 2363 } 2364 2365 handleMouseUp() { 2366 this.isDown = false; 2367 this.slider.classList.remove('diks-navigation--draggable-active'); 2368 } 2369 2370 handleMouseMove(e) { 2371 if (!this.isDown) return; 2372 2373 if ( useDragThreshold == true ) { 2374 const xWithThreshold = e.pageX - this.slider.offsetLeft; 2375 const delta = xWithThreshold - this.startX; 2376 2377 // If not yet dragging, check threshold 2378 if (!this.dragged && Math.abs(delta) > this.dragThreshold) { 2379 this.dragged = true; 2380 this.preventClick = true; 2381 2382 // Reset baseline so scrolling starts smoothly from here 2383 this.startX = xWithThreshold; 2384 this.scrollLeft = this.slider.scrollLeft; 2385 } 2386 2387 if (this.dragged) { 2388 e.preventDefault(); 2389 const walkWithThreshold = (xWithThreshold - this.startX) * this.dragSensitivity; // adjust sensitivity 2390 this.slider.scrollLeft = this.scrollLeft - walkWithThreshold; 2391 } 2392 } 2393 else { 2394 e.preventDefault(); 2395 const x = e.pageX - this.slider.offsetLeft; 2396 const walk = (x - this.startX) * this.dragSensitivity; // adjust sensitivity 2397 this.slider.scrollLeft = this.scrollLeft - walk; 2398 this.preventClick = true; 2399 } 2400 2401 } 2402 2403 handleClick(e) { 2404 if ( useDragThreshold == true && this.preventClick && this.dragged ) { 2405 e.preventDefault(); 2406 } 2407 else if ( useDragThreshold == false && this.preventClick) { 2408 e.preventDefault(); 2409 } 2410 } 2411 } 2412 2413 // Set the draggable navs (multiple) to handle their scrollbars 2414 let scrollableNavs = document.querySelectorAll('.diks-navigation--draggable'); 2415 2416 // Make draggable navigation draggable 2417 if ( scrollableNavs ) { 2418 scrollableNavs.forEach(function(element) { 2419 new HorizontalScrollDragger(element); 2420 }); 2421 } 2422 2423 2424 // Handle has-scrollbars class adding and removing 2425 function handleScrollableNavScrollbars(scrollableNavElement) { 2426 // If scrollable area is wider (scrollWidth) than what's visible (clientWidth) the element has scrollbars 2427 if ( scrollableNavElement.scrollWidth > scrollableNavElement.clientWidth ) { 2428 scrollableNavElement.classList.add('diks-navigation--draggable-has-scrollbars'); 2429 scrollableNavElement.parentElement.classList.add('diks-navigation-wrapper--has-scrollbars'); 2430 } 2431 // Remove the has-scrollbars class if it exists but shouldn't (element does not have scrollbars) 2432 else if ( scrollableNavElement.classList.contains('diks-navigation--draggable-has-scrollbars') ) { 2433 scrollableNavElement.classList.remove('diks-navigation--draggable-has-scrollbars'); 2434 scrollableNavElement.parentElement.classList.remove('diks-navigation-wrapper--has-scrollbars'); 2435 } 2436 } 2437 2438 // If scrollable nav exists add (or remove) necessary classes 2439 // "DOMContentLoaded" does not wait for styles to load and styles affect the size of the scrollable nav directly so we have to use "load" instead 2440 window.addEventListener('load', (event) => { 2441 if ( scrollableNavs ) {
2442 scrollableNavs.forEach(function(element) { 2443 handleScrollableNavScrollbars(element); 2444 }); 2445 } 2446 }); 2447 2448 // Check if scrollable nav has scrollbar 2449 window.addEventListener('resize', function(event){ 2450 if ( scrollableNavs ) { 2451 scrollableNavs.forEach(function(element) { 2452 handleScrollableNavScrollbars(element); 2453 }); 2454 } 2455 }); 2456</script>
2456 2457
2458<script> 2459 // Back button handling 2460 document.querySelectorAll('a.js-diks-back-button').forEach(function(item) { 2461 var referrerIsSameDomain = false; 2462 // Check if referrer is found as referrer isn't always available (browser, tab, window, bookmark, privacy). 2463 if (typeof(document.referrer) === 'string' && document.referrer.length > 0) { 2464 // Set referrerIsSameDomain to true if referrer is in the same domain as current location hostname and referrer is not the same page as current page (window.location.href) 2465 if ( document.referrer.includes(document.location.hostname) && document.referrer != window.location.href ) { 2466 referrerIsSameDomain = true; 2467 } 2468 } 2469 2470 // Overwrite link with history.go, as it also remembers scroll position but only if referrer is the same domain as current location hostname 2471 if (history.length > 1 && referrerIsSameDomain == true) { 2472 // Set referrer as back button href to enable visual cue & opening to a new window 2473 item.setAttribute('href', document.referrer); 2474 2475 // Set back button text 2476 item.querySelector('.diks-header__cta-text').innerHTML = "Takaisin"; 2477 2478 var stepsToGoBack = -1; 2479 2480 item.addEventListener('click', function(e) { 2481 e.preventDefault(); 2482 history.go(stepsToGoBack); 2483 }); 2484 } 2485 }); 2486</script>
2486 2487 2488 <link rel="stylesheet" href="/theme/css/includes/lightgallery/css/lightgallery-bundle.min.css"> 2489 <style>.lg-sub-html { background-color: rgba(0,0,0, .6); }</style> 2490
2490<script src="/theme/css/includes/lightgallery/lightgallery.min.js"></script>
2490 2491
2491<script src="/theme/css/includes/lightgallery/plugins/autoplay/lg-autoplay.min.js"></script>
2491 2492
2492<script src="/theme/css/includes/lightgallery/plugins/fullscreen/lg-fullscreen.min.js"></script>
2492 2493
2493<script src="/theme/css/includes/lightgallery/plugins/thumbnail/lg-thumbnail.min.js"></script>
2493 2494
2494<script src="/theme/css/includes/lightgallery/plugins/zoom/lg-zoom.min.js"></script>
2494 2495
2495<script> 2496 // lightGallery 2497 // Separate gallery for every .js-lightgallery 2498 // Gallery items come from .js-lightgallery .js-lightgallery__link 2499 // https://www.lightgalleryjs.com/docs/getting-started/ 2500 document.querySelectorAll('.js-diks-lightgallery').forEach(function(gallery) { 2501 var galleryImageLinks = gallery.getElementsByClassName('diks-gallery__link'); 2502 2503 // Thumbnails come from img inside the links, unless links specify data-thumbnail 2504 var thumbnailSource = (galleryImageLinks[0].hasAttribute('data-thumbnail')) ? ('data-thumbnail') : (false); 2505 2506 // Adjust certain settings depending on whether the gallery has one or more images 2507 var galleryHasMultipleImages = (galleryImageLinks.length > 1 ? true : false); 2508 2509 // Initialize 2510 lightGallery(gallery, { 2511 autoplay: galleryHasMultipleImages, 2512 counter: galleryHasMultipleImages, 2513 download: false, 2514 exThumbImage: thumbnailSource, 2515 hideControlOnEnd: true, 2516 licenseKey: "96BAAD7E-3BF04397-BBB55AE3-6D5A2C0B", 2517 loop: false, 2518 plugins: [lgAutoplay, lgFullscreen, lgThumbnail, lgZoom], 2519 selector: '.diks-gallery__link', 2520 mobileSettings: { 2521 controls: true, 2522 showCloseIcon: true 2523 }, 2524 strings: { 2525 closeGallery: 'Sulje galleria', 2526 toggleMaximize: 'Maksimointi', 2527 previousSlide: 'Edellinen', 2528 nextSlide: 'Seuraava', 2529 download: 'Lataa', 2530 playVideo: 'Katso video', 2531 mediaLoadingFailed: 'Sisällön lataus epäonnistui', 2532 }, 2533 autoplayPluginStrings: { 2534 toggleAutoplay: 'Automaattinen toisto' 2535 }, 2536 fullscreenPluginStrings: { 2537 toggleFullscreen: 'Kokoruututila' 2538 }, 2539 thumbnailPluginStrings: { 2540 toggleThumbnails: 'Pikkukuvat' 2541 }, 2542 zoomPluginStrings: { 2543 zoomIn: 'Suurenna', 2544 zoomOut: 'Pienennä', 2545 viewActualSize: 'Näytä täysikokoisena' 2546 } 2547 }); 2548 2549 // After closing LightGallery return focus to the image link that opened the gallery 2550 gallery.addEventListener('lgAfterClose', () => { 2551 galleryImageLinks[0].focus(); 2552 }); 2553 2554 }); 2555 2556 </script>
2556 2557
2558<script> 2559 function loadScript(url, callback) { 2560 var script = document.createElement("script"); 2561 script.type = "text/javascript"; 2562 if (script.readyState) { // IE 2563 script.onreadystatechange = function() { 2564 if (script.readyState === "loaded" || script.readyState === "complete") { 2565 script.onreadystatechange = null; 2566 callback(); 2567 } 2568 }; 2569 } else { // Others 2570 script.onload = function() { 2571 callback(); 2572 }; 2573 } 2574 script.src = url; 2575 document.getElementsByTagName("head")[0].appendChild(script); 2576 } 2577 function checkAudioElements() { 2578 // load audioplayer script only when audio elements are found 2579 if (document.querySelector(".init-audio-player")) { 2580 loadScript("https://a.viikkosavo.fi/styles/2efe7af9/js/audioplayer/diks-audioplayer.min.js", function() { 2581 DiksAudioPlayer.init({ 2582 selector: '.init-audio-player', 2583 stopOthersOnPlay: true, 2584 enableKeystrokes: true 2585 }); 2586 }); 2587 } 2588 } 2589 window.onload = (event) => { 2590 checkAudioElements(); 2591 }; 2592</script>
2592<script> 2593 // ================================================================ 2594 // Unified Content Block Component 2595 // ================================================================ 2596 2597 const DiksContentBlock = (() => { 2598 // Private utility functions 2599 const utils = { 2600 setCookie: (name, value, days = 30) => { 2601 const expires = new Date(); 2602 expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000)); 2603 document.cookie = `${name}=${encodeURIComponent(value)};expires=${expires.toUTCString()};path=/`; 2604 }, 2605 2606 getCookie: (name) => { 2607 const value = `; ${document.cookie}`; 2608 const parts = value.split(`; ${name}=`); 2609 if (parts.length === 2) return decodeURIComponent(parts.pop().split(';').shift()); 2610 return null; 2611 }, 2612 2613 renderArticleCard: (article) => { 2614 let mainImage = article.mainImage; 2615 2616 // For ContentPackage: if mainImage is empty, get from first story in teaserStories 2617 if (article.type === 'ContentPackage' && (!mainImage || mainImage.length === 0)) { 2618 if (article.teaserStories && article.teaserStories.length > 0) { 2619 // Find first teaser story with a mainImage 2620 for (const teaserStory of article.teaserStories) { 2621 if (teaserStory.content && 2622 teaserStory.content.mainImage && 2623 teaserStory.content.mainImage.length > 0) { 2624 mainImage = teaserStory.content.mainImage; 2625 break; 2626 } 2627 } 2628 } 2629 } 2630 2631 let imageHtml = ''; 2632 if (mainImage && mainImage.length > 0) { 2633 const imageFields = mainImage[0].content.fields; 2634 const src = imageFields.landscape_720.href_full; 2635 const srcset = ` 2636 ${imageFields.landscape_240.href_full} 240w, 2637 ${imageFields.landscape_480.href_full} 480w, 2638 ${imageFields.landscape_720.href_full} 720w, 2639 ${imageFields.landscape_960.href_full} 960w 2640 `; 2641 imageHtml = ` 2642 <div class="diks-card__image-wrapper"> 2643 <img class="diks-card__image" 2644 src="${src}" 2645 loading="lazy" 2646 sizes="(max-width: 504px) 480px, (max-width: 1279px) 720px, 960px" 2647 srcset="${srcset}" 2648 decoding="async" 2649 alt="${article.headline}" 2650 pinger-seen="true"> 2651 </div> 2652 `; 2653 } 2654 2655 const fullHeadline = article.headlinePrefix 2656 ? `<span class="diks-ui-accent">${article.headlinePrefix} | </span>${article.headline}` 2657 : article.headline; 2658 2659 const publishedDate = new Date(article.published).toLocaleString('fi-FI', { 2660 day: 'numeric', 2661 month: 'numeric', 2662 year: 'numeric', 2663 hour: 'numeric', 2664 minute: 'numeric' 2665 }); 2666 2667 return ` 2668 <article class="diks-card diks-card--size-s"> 2669 <div class="diks-card__main-wrapper"> 2670 ${imageHtml} 2671 <div class="diks-card__text-wrapper"> 2672 <div class="diks-card__text-inner-wrapper"> 2673 <h2 class="diks-card__title"> 2674 <a class="diks-card__link" href="${article.href}">${fullHeadline}</a> 2675 </h2> 2676 <div class="diks-card__meta-wrapper"> 2677 <div class="diks-meta"> 2678 <div class="diks-date"> 2679 <time class="diks-date__published" datetime="${article.published}">${publishedDate}</time> 2680 </div> 2681 </div> 2682 </div> 2683 </div> 2684 </div> 2685 </div> 2686 </article> 2687 `; 2688 }, 2689 2690 getComponentType: (containerId) => { 2691 if (containerId.startsWith('diks-content-block-search-')) return 'search'; 2692 if (containerId.startsWith('diks-content-block-aggregator-')) return 'aggregator'; 2693 return null; 2694 }, 2695 2696 getBlockId: (containerId, type) => { 2697 if (type === 'search') return containerId.replace('diks-content-block-search-', ''); 2698 if (type === 'aggregator') return containerId.replace('diks-content-block-aggregator-', ''); 2699 return containerId; 2700 }, 2701 2702 getResultsId: (blockId, type) => { 2703 if (type === 'search') return `diks-search-results-${blockId}`; 2704 if (type === 'aggregator') return `diks-results-${blockId}`; 2705 return null; 2706 } 2707 }; 2708 2709 // Build query parameters based on component type and filters 2710 const buildQueryParams = (containerId) => { 2711 const container = document.getElementById(containerId); 2712 const type = utils.getComponentType(containerId); 2713 const blockId = utils.getBlockId(containerId, type); 2714 2715 const params = new URLSearchParams({ 2716 type: container.dataset.queryType || 'story', 2717 size: container.dataset.maxResults || 20 2718 }); 2719 2720 if (type === 'search') { 2721 // Search-specific parameters 2722 const defaultSort = container.dataset.sort; 2723 const defaultPaywall = container.dataset.paywall; 2724 const defaultStoryTypes = container.dataset.storyTypes; 2725 const defaultTopics = container.dataset.topics; 2726 const defaultAdvertisers = container.dataset.advertisers; 2727 const dateRangeType = container.dataset.dateRangeType; 2728 2729 // Sort 2730 if (defaultSort && defaultSort !== '*') { 2731 params.append('sort', defaultSort); 2732 } 2733 2734 // Paywall 2735 const paywallSelect = document.getElementById(`diks-search-paywall-${blockId}`); 2736 if (paywallSelect && paywallSelect.value) { 2737 params.append('paywall', paywallSelect.value); 2738 } else if (defaultPaywall && defaultPaywall !== '*') { 2739 params.append('paywall', defaultPaywall); 2740 } 2741 2742 // Story types 2743 let storyTypesValue = defaultStoryTypes; 2744 const storyTypesSelect = document.getElementById(`diks-search-story-types-${blockId}`); 2745 if (storyTypesSelect) { 2746 const selectedOptions = Array.from(storyTypesSelect.selectedOptions).map(opt => opt.value); 2747 if (selectedOptions.length > 0) { 2748 storyTypesValue = selectedOptions.join(','); 2749 } 2750 } 2751 if (storyTypesValue) { 2752 params.append('storyTypes', storyTypesValue); 2753 } 2754 2755 // Topics 2756 if (defaultTopics) { 2757 params.append('topics', defaultTopics); 2758 const topicsOperator = container.dataset.topicsOperator || 'OR'; 2759 params.append('topicsOperator', topicsOperator); 2760 } 2761 2762 // Advertisers 2763 if (defaultAdvertisers) { 2764 params.append('advertisers', defaultAdvertisers); 2765 const advertisersOperator = container.dataset.advertisersOperator || 'OR'; 2766 params.append('advertisersOperator', advertisersOperator); 2767 } 2768 2769 // Date ranges 2770 const fromDateInput = document.getElementById(`diks-search-from-date-${blockId}`); 2771 const toDateInput = document.getElementById(`diks-search-to-date-${blockId}`); 2772 const monthInput = document.getElementById(`diks-search-month-${blockId}`); 2773 2774 if (dateRangeType === 'byMonth' && monthInput && monthInput.value) { 2775 const [year, month] = monthInput.value.split('-').map(Number); 2776 const fromDate = new Date(year, month - 1, 1, 0, 0, 0, 0); 2777 const toDate = new Date(year, month, 0, 23, 59, 59, 999); 2778 params.append('fromDate', fromDate.toISOString().split('.')[0] + 'Z'); 2779 params.append('toDate', toDate.toISOString().split('.')[0] + 'Z'); 2780 } else { 2781 if (fromDateInput && fromDateInput.value) { 2782 const fromDate = new Date(fromDateInput.value); 2783 fromDate.setHours(0, 0, 0, 0); 2784 params.append('fromDate', fromDate.toISOString().split('.')[0] + 'Z'); 2785 } 2786 if (toDateInput && toDateInput.value) { 2787 const toDate = new Date(toDateInput.value); 2788 toDate.setHours(23, 59, 59, 999); 2789 params.append('toDate', toDate.toISOString().split('.')[0] + 'Z'); 2790 } 2791 } 2792 } else if (type === 'aggregator') { 2793 // Aggregator-specific parameters 2794 const selectedTopic = container.dataset.selectedTopic; 2795 if (selectedTopic) { 2796 params.append('topics', selectedTopic); 2797 } 2798 } 2799 2800 return params; 2801 }; 2802 2803 // Main fetch content function 2804 const fetchContent = async (containerId) => { 2805 const container = document.getElementById(containerId); 2806 const type = utils.getComponentType(containerId); 2807 const blockId = utils.getBlockId(containerId, type); 2808 const resultsId = utils.getResultsId(blockId, type); 2809 const resultsDiv = document.getElementById(resultsId); 2810 2811 if (!container || !resultsDiv) { 2812 console.error(`Content block container or results div not found: ${containerId}`); 2813 return; 2814 } 2815 2816 try { 2817 // Show loading state 2818 const loadingMessage = type === 'search' 2819 ? '<p class="diks-content-block-search--loading">Ladataan...</p>' 2820 : '<p class="diks-content-block-aggregator--loading">Ladataan...</p>'; 2821 resultsDiv.innerHTML = loadingMessage; 2822 2823 // Build query parameters 2824 const params = buildQueryParams(containerId); 2825 const apiUrl = container.dataset.apiUrl || '/.content/items'; 2826 2827 // Fetch data 2828 const response = await fetch(`${apiUrl}?${params.toString()}`, { 2829 method: 'GET' 2830 }); 2831 2832 if (!response.ok) { 2833 throw new Error('Verkkovirhe.'); 2834 } 2835 2836 const data = await response.json(); 2837 2838 // Render results 2839 let html = ''; 2840 if (data.items && data.items.length > 0) {
2841 data.items.forEach(article => { 2842 html += utils.renderArticleCard(article); 2843 }); 2844 } else { 2845 const noResultsMessage = type === 'search' 2846 ? '<p class="diks-content-block-search--no-results">Ei hakutuloksia.</p>' 2847 : '<p>Ei sisältöä.</p>'; 2848 html = noResultsMessage; 2849 } 2850 2851 resultsDiv.innerHTML = html; 2852 } catch (error) { 2853 const errorMessage = type === 'search' 2854 ? `<p class="diks-content-block-search--error">Virhe: ${error.message}</p>` 2855 : `<p class="error">Error: ${error.message}</p>`; 2856 resultsDiv.innerHTML = errorMessage; 2857 } 2858 }; 2859 2860 // Initialize search component 2861 const initializeSearch = (containerId) => { 2862 const container = document.getElementById(containerId); 2863 const blockId = utils.getBlockId(containerId, 'search'); 2864 const dateRangeType = container.dataset.dateRangeType; 2865 2866 // Get UI elements 2867 const searchButton = document.getElementById(`diks-search-button-${blockId}`); 2868 const fromDateInput = document.getElementById(`diks-search-from-date-${blockId}`); 2869 const toDateInput = document.getElementById(`diks-search-to-date-${blockId}`); 2870 const monthInput = document.getElementById(`diks-search-month-${blockId}`); 2871 2872 // Set current month as default for byMonth type 2873 if (dateRangeType === 'byMonth' && monthInput) { 2874 const now = new Date(); 2875 const year = now.getFullYear();
2876 const month = String(now.getMonth() + 1).padStart(2, '0'); 2877 monthInput.value = `${year}-${month}`; 2878 2879 // Auto-trigger search on month change 2880 monthInput.addEventListener('change', () => fetchContent(containerId)); 2881 } 2882 2883 // Search button click handler 2884 if (searchButton) { 2885 searchButton.addEventListener('click', () => fetchContent(containerId)); 2886 } 2887 2888 // Enter key support 2889 [fromDateInput, toDateInput, monthInput].forEach(input => { 2890 if (input) { 2891 input.addEventListener('keypress', (e) => { 2892 if (e.key === 'Enter') fetchContent(containerId); 2893 }); 2894 } 2895 }); 2896 2897 // Initial search 2898 fetchContent(containerId); 2899 }; 2900 2901 // Initialize aggregator component 2902 const initializeAggregator = (containerId) => { 2903 const container = document.getElementById(containerId); 2904 const blockId = utils.getBlockId(containerId, 'aggregator'); 2905 const topicLabels = JSON.parse(container.dataset.topicLabels || '{}'); 2906 const cookieName = `selectedTopic_${blockId}`; 2907 2908 const listId = `diks-topic-list-${blockId}`; 2909 const labelId = `diks-selected-topic-label-${blockId}`; 2910 const toggleId = `diks-toggle-button-${blockId}`; 2911 const listContainerId = `diks-toggle-area-${blockId}`; 2912 2913 const topicItems = document.querySelectorAll(`#${listId} .diks-topic-list__item`); 2914 const labelElement = document.getElementById(labelId); 2915 2916 // Update topic label display 2917 const updateTopicLabel = (topic) => { 2918 if (labelElement && topicLabels[topic]) { 2919 labelElement.textContent = topicLabels[topic]; 2920 } else if (labelElement) { 2921 labelElement.textContent = ''; 2922 } 2923 2924 // Update active state 2925 topicItems.forEach(item => { 2926 item.classList.toggle('diks-is-active', item.dataset.topic === topic); 2927 }); 2928 }; 2929 2930 // Handle single topic case 2931 if (Object.keys(topicLabels).length === 1) { 2932 const initialTopic = Object.keys(topicLabels)[0]; 2933 container.dataset.selectedTopic = initialTopic; 2934 updateTopicLabel(initialTopic); 2935 fetchContent(containerId); 2936 return; 2937 } 2938 2939 // Handle multiple topics case 2940 if (topicItems.length > 0) { 2941 // Determine initial topic (cookie or first) 2942 const cookieTopic = utils.getCookie(cookieName); 2943 let initialTopic = topicItems[0].dataset.topic; 2944 2945 if (cookieTopic) { 2946 const validTopic = Array.from(topicItems).some(item => item.dataset.topic === cookieTopic); 2947 if (validTopic) { 2948 initialTopic = cookieTopic; 2949 } 2950 } 2951 2952 // Set up topic click handlers 2953 topicItems.forEach(item => { 2954 item.addEventListener('click', () => { 2955 const selectedTopic = item.dataset.topic; 2956 container.dataset.selectedTopic = selectedTopic; 2957 utils.setCookie(cookieName, selectedTopic); 2958 updateTopicLabel(selectedTopic); 2959 fetchContent(containerId); 2960 2961 // Close toggle if open 2962 const toggleButton = document.getElementById(toggleId); 2963 const listContainer = document.getElementById(listContainerId); 2964 if (toggleButton && listContainer) { 2965 toggleButton.setAttribute('aria-expanded', 'false'); 2966 listContainer.classList.remove('diks-toggle--is-open'); 2967 listContainer.classList.add('diks-toggle--is-closed'); 2968 container.dataset.diksToggleState = 'closed'; 2969 } 2970 }); 2971 }); 2972 2973 // Initial fetch 2974 container.dataset.selectedTopic = initialTopic; 2975 updateTopicLabel(initialTopic); 2976 fetchContent(containerId); 2977 } 2978 }; 2979 2980 // Public API 2981 return { 2982 fetchContent, 2983 initialize: (containerId) => { 2984 const type = utils.getComponentType(containerId); 2985 if (type === 'search') { 2986 initializeSearch(containerId); 2987 } else if (type === 'aggregator') { 2988 initializeAggregator(containerId); 2989 } 2990 } 2991 }; 2992 })(); 2993 2994 2995 // ================================================================ 2996 // Auto-initialize all content block components 2997 // ================================================================ 2998 2999 document.addEventListener('DOMContentLoaded', () => { 3000 // Initialize all content block components (search + aggregator) 3001 const allContainers = document.querySelectorAll('[id^="diks-content-block-search-"], [id^="diks-content-block-aggregator-"]');
3002 allContainers.forEach(container => { 3003 DiksContentBlock.initialize(container.id); 3004 }); 3005 }); 3006</script>
vendor: 1 bytes, line 3006
3006
3007<script> 3008 // Service Worker 3009 if ('serviceWorker' in navigator) { 3010 window.addEventListener('load', function() { 3011 navigator.serviceWorker.register('/sw.js').then( 3012 function(registration) { 3013 console.log('PWA: Service worker registered to scope: ', registration.scope); 3014 }, 3015 function(err) { 3016 console.error('PWA: Service worker failed to register with error: ', err); 3017 } 3018 ); 3019 }); 3020 } 3021 3022 // Show installation option, hide generic fallback instructions 3023 function pwaShowInstallationOption() { 3024 document.querySelectorAll('.js-diks-apps-pwa-installation').forEach(function(element) { 3025 element.style.display = 'block'; 3026 }); 3027 document.querySelectorAll('.js-diks-apps-pwa-instructions').forEach(function(element) { 3028 element.style.display = 'none'; 3029 }); 3030 } 3031 3032 let deferredPrompt; 3033 var dataLayer = window.dataLayer || []; 3034 3035 // Basic installation process 3036 window.addEventListener('beforeinstallprompt', (e) => { 3037 // Stash the event so it can be triggered later 3038 deferredPrompt = e; 3039 3040 const enablePrompt = 1; 3041 3042 if(!enablePrompt) { 3043 e.preventDefault(); 3044 } 3045 3046 // Update the UI to notify the user they can install PWA 3047 pwaShowInstallationOption(); 3048 3049 // Handle installation 3050 document.querySelectorAll('.js-diks-apps-pwa-installation-button').forEach(function(button) { 3051 button.addEventListener('click', (e) => { 3052 // Show the prompt 3053 deferredPrompt.prompt(); 3054 3055 // Wait for user to respond 3056 deferredPrompt.userChoice.then((choiceResult) => { 3057 if (choiceResult.outcome === 'accepted') { 3058 console.log('PWA: Installed (prompt)'); 3059 dataLayer.push({ 3060 'event': 'PWA.installation', 3061 'eventData': 'success' 3062 }); 3063 } else { 3064 console.log('PWA: User dismissed installation prompt'); 3065 dataLayer.push({ 3066 'event': 'PWA.installation', 3067 'eventData': 'canceled' 3068 }); 3069 } 3070 deferredPrompt = null; 3071 }); 3072 }); 3073 }); 3074 }); 3075 3076 // iOS installation process (show instructions modal) 3077 if (!navigator.standalone) { 3078 var userAgent = navigator.userAgent.toLowerCase(); 3079 var iPhoneUser = (/iphone/.test(userAgent)); 3080 var iPadUser = (/ipad/.test(userAgent) || (/macintosh/.test(userAgent) && navigator.maxTouchPoints > 1)); 3081 var safariUser = (/^(?!.*(brave|chrome|crios|duckduckgo|edgeios|firefox|fxios|opios|ucbrowser|yabrowser)).*safari.*$/.test(userAgent)); 3082 3083 if (safariUser && (iPhoneUser || iPadUser)) { 3084 // Update the UI to notify the user they can install PWA 3085 pwaShowInstallationOption(); 3086 3087 // Instructions 3088 var modals = document.querySelectorAll('.js-diks-apps-pwa-ios-instructions').forEach(function(element) { 3089 // Position on screen based on device 3090 if (iPhoneUser) { 3091 element.classList.add('diks-apps__pwa-ios-modal--bottom'); 3092 } else if (iPadUser) { 3093 element.classList.add('diks-apps__pwa-ios-modal--top'); 3094 } 3095 }); 3096 3097 // Handle modal instructions from installation button 3098 document.querySelectorAll('.js-diks-apps-pwa-installation-button').forEach(function(button) { 3099 button.addEventListener('click', (e) => { 3100 // Show first modal 3101 document.querySelector('.js-diks-apps-pwa-ios-instructions').classList.toggle('diks-apps__pwa-ios-modal--is-visible'); 3102 dataLayer.push({ 3103 'event': 'PWA.instructions.shown', 3104 'eventData': 'iOS' 3105 }); 3106 }); 3107 }); 3108 } 3109 } 3110</script>
3110 3111
3111<script class="coral-script" src="//coral.prod.diks.fi/assets/js/count.js?v=9.3.1.3" defer></script>
3111 3112 3113 </body> 3114</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.