1<!DOCTYPE html> 2<html lang="fi"> 3<head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 7 8 <!-- This site is optimized with the Yoast SEO Premium plugin v20.6 (Yoast SEO v20.13) - https://yoast.com/wordpress/plugins/seo/ --> 9 <meta name="description" content="Työkalut ja rakentaminen Näytä kaikki Kodintekniikka Näytä kaikki" /> 10 <link rel="canonical" href="https://rakennusmaailma.fi/testit/" /> 11 <meta property="og:locale" content="fi_FI" /> 12 <meta property="og:type" content="article" /> 13 <meta property="og:title" content="Testit ja vertailut" /> 14 <meta property="og:description" content="Työkalut ja rakentaminen Näytä kaikki Kodintekniikka Näytä kaikki" /> 15 <meta property="og:url" content="https://rakennusmaailma.fi/testit/" /> 16 <meta property="og:site_name" content="TM Rakennusmaailma" /> 17 <meta property="article:modified_time" content="2025-10-08T08:30:35+00:00" /> 18 <meta name="twitter:card" content="summary_large_image" /> 19 <meta name="twitter:label1" content="Est. reading time" /> 20 <meta name="twitter:data1" content="1 minuutti" /> 21
21<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://rakennusmaailma.fi/testit/","url":"https://rakennusmaailma.fi/testit/","name":"Testit ja vertailut - TM Rakennusmaailma","isPartOf":{"@id":"https://rakennusmaailma.fi/#website"},"datePublished":"2025-09-25T13:17:46+00:00","dateModified":"2025-10-08T08:30:35+00:00","description":"Työkalut ja rakentaminen Näytä kaikki Kodintekniikka Näytä kaikki","breadcrumb":{"@id":"https://rakennusmaailma.fi/testit/#breadcrumb"},"inLanguage":"fi","potentialAction":[{"@type":"ReadAction","target":["https://rakennusmaailma.fi/testit/"]}]},{"@type":"BreadcrumbList","@id":"https://rakennusmaailma.fi/testit/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://rakennusmaailma.fi/"},{"@type":"ListItem","position":2,"name":"Testit ja vertailut"}]},{"@type":"WebSite","@id":"https://rakennusmaailma.fi/#website","url":"https://rakennusmaailma.fi/","name":"TM Rakennusmaailma","description":"","publisher":{"@id":"https://rakennusmaailma.fi/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://rakennusmaailma.fi/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fi"},{"@type":"Organization","@id":"https://rakennusmaailma.fi/#organization","name":"TM Rakennusmaailma","url":"https://rakennusmaailma.fi/","logo":{"@type":"ImageObject","inLanguage":"fi","@id":"https://rakennusmaailma.fi/#/schema/logo/image/","url":"https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/09/tm-rm-1.svg","contentUrl":"https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/09/tm-rm-1.svg","width":172,"height":121,"caption":"TM Rakennusmaailma"},"image":{"@id":"https://rakennusmaailma.fi/#/schema/logo/image/"}}]}</script>
21 22 <!-- / Yoast SEO Premium plugin. --> 23 24 25<title>Testit ja vertailut - TM Rakennusmaailma</title> 26<link rel="alternate" type="application/rss+xml" title="TM Rakennusmaailma » syöte" href="https://rakennusmaailma.fi/feed/" /> 27<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://rakennusmaailma.fi/wp-json/oembed/1.0/embed?url=https%3A%2F%2Frakennusmaailma.fi%2Ftestit%2F" /> 28<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://rakennusmaailma.fi/wp-json/oembed/1.0/embed?url=https%3A%2F%2Frakennusmaailma.fi%2Ftestit%2F&format=xml" /> 29 30
30<script> 31 window.AsteikkoMagWidgets = { 32 siteUrl: "https:\/\/rakennusmaailma.fi" }; 33 </script>
33 34 35 <style id='wp-img-auto-sizes-contain-inline-css'> 36img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 37/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 38</style> 39<link rel='stylesheet' id='asmag_widgets_css-css' href='https://rakennusmaailma.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.css?ver=6.21.2-67928b343a4e93d76879e5e503996d22' media='all' /> 40<link rel='stylesheet' id='om-block-crosslink-magazine-css' href='https://rakennusmaailma.fi/wp-content/plugins/om-block-crosslink-magazine/build/main.css?ver=1.2.1' media='all' /> 41<style id='wp-block-button-inline-css'> 42.wp-block-button__link{align-content:center;box-sizing:border-box;cursor:pointer;display:inline-block;height:100%;text-align:center;word-break:break-word}.wp-block-button__link.aligncenter{text-align:center}.wp-block-button__link.alignright{text-align:right}:where(.wp-block-button__link){border-radius:9999px;box-shadow:none;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-button[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons>.wp-block-button.has-custom-width{max-width:none}.wp-block-buttons>.wp-block-button.has-custom-width .wp-block-button__link{width:100%}.wp-block-buttons>.wp-block-button.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons>.wp-block-button.wp-block-button__width-25{width:calc(25% - var(--wp--style--block-gap, .5em)*.75)}.wp-block-buttons>.wp-block-button.wp-block-button__width-50{width:calc(50% - var(--wp--style--block-gap, .5em)*.5)}.wp-block-buttons>.wp-block-button.wp-block-button__width-75{width:calc(75% - var(--wp--style--block-gap, .5em)*.25)}.wp-block-buttons>.wp-block-button.wp-block-button__width-100{flex-basis:100%;width:100%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-25{width:25%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-50{width:50%}.wp-block-buttons.is-vertical>.wp-block-button.wp-block-button__width-75{width:75%}.wp-block-button.is-style-squared,.wp-block-button__link.wp-block-button.is-style-squared{border-radius:0}.wp-block-button.no-border-radius,.wp-block-button__link.no-border-radius{border-radius:0!important}:root :where(.wp-block-button .wp-block-button__link.is-style-outline),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link){border:2px solid;padding:.667em 1.333em}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-text-color)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-text-color)){color:currentColor}:root :where(.wp-block-button .wp-block-button__link.is-style-outline:not(.has-background)),:root :where(.wp-block-button.is-style-outline>.wp-block-button__link:not(.has-background)){background-color:initial;background-image:none} 43/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/button/style.min.css */ 44</style> 45<style id='wp-block-buttons-inline-css'> 46.wp-block-buttons{box-sizing:border-box}.wp-block-buttons.is-vertical{flex-direction:column}.wp-block-buttons.is-vertical>.wp-block-button:last-child{margin-bottom:0}.wp-block-buttons>.wp-block-button{display:inline-block;margin:0}.wp-block-buttons.is-content-justification-left{justify-content:flex-start}.wp-block-buttons.is-content-justification-left.is-vertical{align-items:flex-start}.wp-block-buttons.is-content-justification-center{justify-content:center}.wp-block-buttons.is-content-justification-center.is-vertical{align-items:center}.wp-block-buttons.is-content-justification-right{justify-content:flex-end}.wp-block-buttons.is-content-justification-right.is-vertical{align-items:flex-end}.wp-block-buttons.is-content-justification-space-between{justify-content:space-between}.wp-block-buttons.aligncenter{text-align:center}.wp-block-buttons:not(.is-content-justification-space-between,.is-content-justification-right,.is-content-justification-left,.is-content-justification-center) .wp-block-button.aligncenter{margin-left:auto;margin-right:auto;width:100%}.wp-block-buttons[style*=text-decoration] .wp-block-button,.wp-block-buttons[style*=text-decoration] .wp-block-button__link{text-decoration:inherit}.wp-block-buttons.has-custom-font-size .wp-block-button__link{font-size:inherit}.wp-block-buttons .wp-block-button__link{width:100%}.wp-block-button.aligncenter{text-align:center} 47/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/buttons/style.min.css */ 48</style> 49<style id='wp-block-social-links-inline-css'> 50.wp-block-social-links{background:none;box-sizing:border-box;margin-left:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block}@media not (prefers-reduced-motion){.wp-block-social-link{transition:transform .1s ease}}.wp-block-social-link{height:auto}.wp-block-social-link a{align-items:center;display:flex;line-height:0}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{color:currentColor;fill:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{background-color:#5865f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#0866ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{background-color:#fefc00;color:#fff;stroke:#000}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}
50:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{color:#5865f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#0866ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}
50:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{color:#fff;stroke:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:root :where(.wp-block-social-links .wp-social-link a){padding:.25em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000} 51/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/social-links/style.min.css */ 52</style> 53<style id='wp-block-group-inline-css'> 54.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative} 55/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/group/style.min.css */ 56</style> 57<style id='wp-block-site-logo-inline-css'> 58.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px} 59/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/site-logo/style.min.css */ 60</style> 61<style id='wp-block-navigation-link-inline-css'> 62.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{outline:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase} 63/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/navigation-link/style.min.css */ 64</style> 65<style id='wp-block-navigation-inline-css'> 66.wp-block-navigation{position:relative}.wp-block-navigation ul{margin-bottom:0;margin-left:0;margin-top:0;padding-left:0}.wp-block-navigation ul,.wp-block-navigation ul li{list-style:none;padding:0}.wp-block-navigation .wp-block-navigation-item{align-items:center;background-color:inherit;display:flex;position:relative}.wp-block-navigation .wp-block-navigation-item .wp-block-navigation__submenu-container:empty{display:none}.wp-block-navigation .wp-block-navigation-item__content{display:block;z-index:1}.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content{color:inherit}.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-underline .wp-block-navigation-item__content:focus{text-decoration:underline}.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:active,.wp-block-navigation.has-text-decoration-line-through .wp-block-navigation-item__content:focus{text-decoration:line-through}.wp-block-navigation :where(a),.wp-block-navigation :where(a:active),.wp-block-navigation :where(a:focus){text-decoration:none}.wp-block-navigation .wp-block-navigation__submenu-icon{align-self:center;background-color:inherit;border:none;color:currentColor;display:inline-block;font-size:inherit;height:.6em;line-height:0;margin-left:.25em;padding:0;width:.6em}.wp-block-navigation .wp-block-navigation__submenu-icon svg{display:inline-block;stroke:currentColor;height:inherit;margin-top:.075em;width:inherit}.wp-block-navigation{--navigation-layout-justification-setting:flex-start;--navigation-layout-direction:row;--navigation-layout-wrap:wrap;--navigation-layout-justify:flex-start;--navigation-layout-align:center}.wp-block-navigation.is-vertical{--navigation-layout-direction:column;--navigation-layout-justify:initial;--navigation-layout-align:flex-start}.wp-block-navigation.no-wrap{--navigation-layout-wrap:nowrap}.wp-block-navigation.items-justified-center{--navigation-layout-justification-setting:center;--navigation-layout-justify:center}.wp-block-navigation.items-justified-center.is-vertical{--navigation-layout-align:center}.wp-block-navigation.items-justified-right{--navigation-layout-justification-setting:flex-end;--navigation-layout-justify:flex-end}.wp-block-navigation.items-justified-right.is-vertical{--navigation-layout-align:flex-end}.wp-block-navigation.items-justified-space-between{--navigation-layout-justification-setting:space-between;--navigation-layout-justify:space-between}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{align-items:normal;background-color:inherit;color:inherit;display:flex;flex-direction:column;opacity:0;position:absolute;z-index:2}@media not (prefers-reduced-motion){.wp-block-navigation .has-child .wp-block-navigation__submenu-container{transition:opacity .1s linear}}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{height:0;overflow:hidden;visibility:hidden;width:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content{display:flex;flex-grow:1;padding:.5em 1em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container>.wp-block-navigation-item>.wp-block-navigation-item__content .wp-block-navigation__submenu-icon{margin-left:auto;margin-right:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation-item__content{margin:0}.wp-block-navigation .has-child .wp-block-navigation__submenu-container{left:-1px;top:100%}@media (min-width:782px){.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:-1px}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container:before{background:#0000;content:"";display:block;height:100%;position:absolute;right:100%;width:.5em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon{margin-right:.25em}.wp-block-navigation .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-icon svg{transform:rotate(-90deg)}}.wp-block-navigation .has-child .wp-block-navigation-submenu__toggle[aria-expanded=true]~.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):hover>.wp-block-navigation__submenu-container,.wp-block-navigation .has-child:not(.open-on-click):not(.open-on-hover-click):focus-within>.wp-block-navigation__submenu-container{height:auto;
66min-width:200px;opacity:1;overflow:visible;visibility:visible;width:auto}.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container{left:0;top:100%}@media (min-width:782px){.wp-block-navigation.has-background .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:100%;top:0}}.wp-block-navigation-submenu{display:flex;position:relative}.wp-block-navigation-submenu .wp-block-navigation__submenu-icon svg{stroke:currentColor}button.wp-block-navigation-item__content{background-color:initial;border:none;color:currentColor;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-align:left;text-transform:inherit}.wp-block-navigation-submenu__toggle{cursor:pointer}.wp-block-navigation-submenu__toggle[aria-expanded=true]+.wp-block-navigation__submenu-icon>svg,.wp-block-navigation-submenu__toggle[aria-expanded=true]>svg{transform:rotate(180deg)}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle{padding-left:0;padding-right:.85em}.wp-block-navigation-item.open-on-click .wp-block-navigation-submenu__toggle+.wp-block-navigation__submenu-icon{margin-left:-.6em;pointer-events:none}.wp-block-navigation-item.open-on-click button.wp-block-navigation-item__content:not(.wp-block-navigation-submenu__toggle){padding:0}.wp-block-navigation .wp-block-page-list,.wp-block-navigation__container,.wp-block-navigation__responsive-close,.wp-block-navigation__responsive-container,.wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-dialog{gap:inherit}:where(.wp-block-navigation.has-background .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation.has-background .wp-block-navigation-submenu a:not(.wp-element-button)){padding:.5em 1em}:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu a:not(.wp-element-button)),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-submenu button.wp-block-navigation-item__content),:where(.wp-block-navigation .wp-block-navigation__submenu-container .wp-block-pages-list__item button.wp-block-navigation-item__content){padding:.5em 1em}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container{left:auto;right:0}.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:-1px;right:-1px}@media (min-width:782px){.wp-block-navigation.items-justified-right .wp-block-navigation__container .has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-right .wp-block-page-list>.has-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between .wp-block-page-list>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container,.wp-block-navigation.items-justified-space-between>.wp-block-navigation__container>.has-child:last-child .wp-block-navigation__submenu-container .wp-block-navigation__submenu-container{left:auto;right:100%}}.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container{background-color:#fff;border:1px solid #00000026}.wp-block-navigation.has-background .wp-block-navigation__submenu-container{background-color:inherit}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__submenu-container{c
66olor:#000}.wp-block-navigation__container{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial);list-style:none;margin:0;padding-left:0}.wp-block-navigation__container .is-responsive{display:none}.wp-block-navigation__container:only-child,.wp-block-page-list:only-child{flex-grow:1}@keyframes overlay-menu__fade-in-animation{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.wp-block-navigation__responsive-container{bottom:0;display:none;left:0;position:fixed;right:0;top:0}.wp-block-navigation__responsive-container :where(.wp-block-navigation-item a){color:inherit}.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-align,initial);display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open){background-color:inherit!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open{background-color:inherit;display:flex;flex-direction:column}@media not (prefers-reduced-motion){.wp-block-navigation__responsive-container.is-menu-open{animation:overlay-menu__fade-in-animation .1s ease-out;animation-fill-mode:forwards}}.wp-block-navigation__responsive-container.is-menu-open{overflow:auto;padding:clamp(1rem,var(--wp--style--root--padding-top),20rem) clamp(1rem,var(--wp--style--root--padding-right),20rem) clamp(1rem,var(--wp--style--root--padding-bottom),20rem) clamp(1rem,var(--wp--style--root--padding-left),20rem);z-index:100000}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content{align-items:var(--navigation-layout-justification-setting,inherit);display:flex;flex-direction:column;flex-wrap:nowrap;overflow:visible;
66padding-top:calc(2rem + 24px)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{justify-content:flex-start}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-icon{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .has-child .wp-block-navigation__submenu-container{border:none;height:auto;min-width:200px;opacity:1;overflow:initial;padding-left:2rem;padding-right:2rem;position:static;visibility:visible;width:auto}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{gap:inherit}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__submenu-container{padding-top:var(--wp--style--block-gap,2em)}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item__content{padding:0}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content .wp-block-page-list{align-items:var(--navigation-layout-justification-setting,initial);display:flex;flex-direction:column}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item .wp-block-navigation__submenu-container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container,.wp-block-navigation__responsive-container.is-menu-open .wp-block-page-list{background:#0000!important;color:inherit!important}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:auto;right:auto}@media (min-width:600px){.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){background-color:inherit;display:block;position:relative;width:100%;z-index:auto}.wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) .wp-block-navigation__responsive-container-close{display:none}.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container.wp-block-navigation__submenu-container{left:0}}.wp-block-navigation:not(.has-background) .wp-block-navigation__responsive-container.is-menu-open{background-color:#fff}.wp-block-navigation:not(.has-text-color) .wp-block-navigation__responsive-container.is-menu-open{color:#000}.wp-block-navigation__toggle_button_label{font-size:1rem;font-weight:700}.wp-block-navigation__responsive-container-close,.wp-block-navigation__responsive-container-open{background:#0000;border:none;color:currentColor;cursor:pointer;margin:0;padding:0;text-transform:inherit;vertical-align:middle}.wp-block-navigation__responsive-container-close svg,.wp-block-navigation__responsive-container-open svg{fill:currentColor;display:block;height:24px;pointer-events:none;width:24px}.wp-block-navigation__responsive-container-open{display:flex}.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open.wp-block-navigation__responsive-container-open{font-family:inherit;font-size:inherit;font-weight:inherit}@media (min-width:600px){.wp-block-navigation__responsive-container-open:not(.always-shown){display:none}}.wp-block-navigation__responsive-container-close{position:absolute;right:0;top:0;z-index:2}.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close.wp-block-navigation__responsive-container-close{font-family:inherit;font-size:inherit;font-weight:inherit}.wp-block-navigation__responsive-close{width:100%}.has-modal-open .wp-block-navigation__responsive-close{margin-left:auto;margin-right:auto;max-width:var(--wp--style--global--wide-size,100%)}.wp-block-navigation__responsive-close:focus{outline:none}.is-menu-open .wp-block-navigation__responsive-close,.is-menu-open .wp-block-navigation__responsive-container-content,.is-menu-open .wp-block-navigation__responsive-dialog{box-sizing:border-box}.wp-block-navigation__responsive-dialog{position:relative}.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:46px}@media (min-width:782px){.has-modal-open .admin-bar .is-menu-open .wp-block-navigation__responsive-dialog{margin-top:32px}}html.has-modal-open{overflow:hidden} 67/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/navigation/style.min.css */ 68</style> 69<style id='wp-block-heading-inline-css'> 70h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg} 71/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/heading/style.min.css */ 72</style> 73<style id='wp-block-post-title-inline-css'> 74.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit} 75/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/post-title/style.min.css */ 76</style> 77<style id='wp-block-post-excerpt-inline-css'> 78:where(.wp-block-post-excerpt){box-sizing:border-box;margin-bottom:var(--wp--style--block-gap);margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__excerpt{margin-bottom:0;margin-top:0}.wp-block-post-excerpt__more-text{margin-bottom:0;margin-top:var(--wp--style--block-gap)}.wp-block-post-excerpt__more-link{display:inline-block} 79/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/post-excerpt/style.min.css */ 80</style> 81<style id='wp-block-post-content-inline-css'> 82.wp-block-post-content{display:flow-root} 83/*# sourceURL=https://rakennusmaailma.fi/wp-includes/blocks/post-content/style.min.css */ 84</style> 85<style id='wp-block-library-inline-css'> 86:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}
86.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 87/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */ 88</style> 89<style id='global-styles-inline-css'> 90:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #FFFFFF;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--primary: #1ab04d;--wp--preset--color--grey: #E8EDF1;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
900) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-size--size-m-2: 0.75rem;--wp--preset--font-size--size-m-1: clamp(0.6944rem, 0.6478rem + 0.233vw, 0.8681rem);--wp--preset--font-size--size-0: clamp(0.8333rem, 0.7774rem + 0.2796vw, 1.0417rem);--wp--preset--font-size--size-1: clamp(1rem, 0.9329rem + 0.3356vw, 1.25rem);--wp--preset--font-size--size-2: clamp(1.2rem, 1.1195rem + 0.4027vw, 1.5rem);--wp--preset--font-size--size-3: clamp(1.44rem, 1.3434rem + 0.4832vw, 1.8rem);--wp--preset--font-size--size-4: clamp(1.728rem, 1.612rem + 0.5799vw, 2.16rem);--wp--preset--font-size--size-5: clamp(2.0736rem, 1.9344rem + 0.6958vw, 2.592rem);--wp--preset--font-size--size-6: clamp(2.4883rem, 2.3213rem + 0.835vw, 3.1104rem);--wp--preset--font-size--size-7: 99px;--wp--preset--font-family--guardian-text-egyptian-web: Guardian Text Egyptian Web, sans-serif;--wp--preset--font-family--guardian-text-sans: Guardian TextSans, sans-serif;--wp--preset--font-family--flama: Flama;--wp--preset--font-family--flama-semicond: Flama Semicond, sans-serif;--wp--preset--font-family--flama-cond: Flama Cond, sans-serif;--wp--preset--font-family--noto-sans: Noto Sans, sans-serif;--wp--preset--font-family--cadiz-web: Cadiz Web, serif;--wp--preset--font-family--playfair-display: Playfair Display, serif;--wp--preset--font-family--palanquin: Palanquin, sans-serif;--wp--preset--font-family--guardian-text-sans-bold: Guardian TextSans Bold, sans-serif;--wp--preset--font-family--guardian-text-egyptian-bold: Guardian Text Egyptian Web Bold, sans-serif;--wp--preset--font-family--flama-medium: Flama Medium;--wp--preset--font-family--flama-semicond-extrabold: Flama Semicond Extrabold;--wp--preset--font-family--flama-cond-bold: Flama Cond Bold, sans-serif;--wp--preset--font-family--flama-cond-semibold: Flama Cond Semibold;--wp--preset--font-family--flama-semicond-book: Flama Semicond Book, sans-serif;--wp--preset--font-family--flama-semicond-semibold: Flama Semicond Semibold;--wp--preset--font-family--dm-serif-display: DM Serif Display, serif;--wp--preset--font-family--dm-sans: DM Sans, sans-serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--spacing--space-3-xs: 5px;--wp--preset--spacing--space-2-xs: 10px;--wp--preset--spacing--space-xs: 15px;--wp--preset--spacing--space-s: 20px;--wp--preset--spacing--space-m: 30px;--wp--preset--spacing--space-l: 40px;--wp--preset--spacing--space-xl: 60px;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);--wp--custom--ad-post--title--font-family: var(--wp--preset--font-family--noto-sans);--wp--custom--ad-post--title--font-weight: 800;--wp--custom--ad-post--excerpt--font-family: var(--wp--preset--font-family--noto-sans);--wp--custom--ad-post--excerpt--font-weight: 600;--wp--custom--ad-post--body--font-family: serif;}:root { --wp--style--global--content-size: 860px;--wp--style--global--wide-size: 1392px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained >
90 :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}a:where(:not(.wp-element-button)){text-decoration: underline;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-color{color: var(--wp--preset--color--primary) !important;}.has-grey-color{color: var(--wp--preset--color--grey) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-background-color{background-color: var(--wp--preset--color--primary) !important;}.has-grey-background-color{background-color: var(--wp--preset--color--grey) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-border-color{border-color: var(--wp--preset--color--primary) !important;}.has-grey-border-color{border-color: var(--wp--preset--color--grey) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
90.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-size-m-2-font-size{font-size: var(--wp--preset--font-size--size-m-2) !important;}.has-size-m-1-font-size{font-size: var(--wp--preset--font-size--size-m-1) !important;}.has-size-0-font-size{font-size: var(--wp--preset--font-size--size-0) !important;}.has-size-1-font-size{font-size: var(--wp--preset--font-size--size-1) !important;}.has-size-2-font-size{font-size: var(--wp--preset--font-size--size-2) !important;}.has-size-3-font-size{font-size: var(--wp--preset--font-size--size-3) !important;}.has-size-4-font-size{font-size: var(--wp--preset--font-size--size-4) !important;}.has-size-5-font-size{font-size: var(--wp--preset--font-size--size-5) !important;}.has-size-6-font-size{font-size: var(--wp--preset--font-size--size-6) !important;}.has-size-7-font-size{font-size: var(--wp--preset--font-size--size-7) !important;}.has-guardian-text-egyptian-web-font-family{font-family: var(--wp--preset--font-family--guardian-text-egyptian-web) !important;}.has-guardian-text-sans-font-family{font-family: var(--wp--preset--font-family--guardian-text-sans) !important;}.has-flama-font-family{font-family: var(--wp--preset--font-family--flama) !important;}.has-flama-semicond-font-family{font-family: var(--wp--preset--font-family--flama-semicond) !important;}.has-flama-cond-font-family{font-family: var(--wp--preset--font-family--flama-cond) !important;}.has-noto-sans-font-family{font-family: var(--wp--preset--font-family--noto-sans) !important;}.has-cadiz-web-font-family{font-family: var(--wp--preset--font-family--cadiz-web) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-palanquin-font-family{font-family: var(--wp--preset--font-family--palanquin) !important;}.has-guardian-text-sans-bold-font-family{font-family: var(--wp--preset--font-family--guardian-text-sans-bold) !important;}.has-guardian-text-egyptian-bold-font-family{font-family: var(--wp--preset--font-family--guardian-text-egyptian-bold) !important;}.has-flama-medium-font-family{font-family: var(--wp--preset--font-family--flama-medium) !important;}.has-flama-semicond-extrabold-font-family{font-family: var(--wp--preset--font-family--flama-semicond-extrabold) !important;}.has-flama-cond-bold-font-family{font-family: var(--wp--preset--font-family--flama-cond-bold) !important;}.has-flama-cond-semibold-font-family{font-family: var(--wp--preset--font-family--flama-cond-semibold) !important;}.has-flama-semicond-book-font-family{font-family: var(--wp--preset--font-family--flama-semicond-book) !important;}.has-flama-semicond-semibold-font-family{font-family: var(--wp--preset--font-family--flama-semicond-semibold) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;} 91.post-donate-report .header-contributors__share{ 92 display: flex; 93 flex-grow: 1; 94} 95 96 97body.is-rakennusmaailma.home .wp-otavamedia-tuuma-section__heading-textfield { 98 border-left: 1px solid #1ab04d; 99 border-right: 1px solid #1ab04d; 100 border-bottom: 1px solid #1ab04d; 101} 102 103.wp-block-social-links { 104 gap: 0.5rem; 105} 106 107.wp-block-social-links .wp-social-link { 108 border-radius: 0.5rem; 109 transform: none; 110} 111 112.wp-block-social-links .wp-social-link .wp-block-social-link-anchor { 113 padding: 0.1875rem; 114} 115 116.wp-block-social-links .wp-social-link .wp-block-social-link-anchor svg { 117 height: 1.125rem; 118 width: 1.125rem; 119} 120 121.wp-block-social-links .wp-social-link.wp-social-link-threads .wp-block-social-link-anchor, 122.wp-block-social-links .wp-social-link.wp-social-link-instagram .wp-block-social-link-anchor { 123 padding: 0.125rem; 124} 125 126.wp-block-social-links .wp-social-link.wp-social-link-threads .wp-block-social-link-anchor svg, 127.wp-block-social-links .wp-social-link.wp-social-link-instagram .wp-block-social-link-anchor svg { 128 height: 1.25rem; 129 width: 1.25rem; 130} 131 132.wp-block-social-link { 133 background-color: transparent !important; 134 transition: none; 135} 136 137.wp-block-social-link:hover { 138 transform: unset; 139} 140 141.header-contributors__share-link.google-source { 142 display: none; 143} 144:root :where(.wp-block-button .wp-block-button__link){font-family: var(--wp--preset--font-family--flama-medium);} 145/*# sourceURL=global-styles-inline-css */ 146</style> 147<style id='block-style-variation-styles-inline-css'> 148:root :where(.wp-block-button.is-style-outline--1 .wp-block-button__link){background: transparent none;border-color: currentColor;border-width: 2px;border-style: solid;color: currentColor;padding-top: 0.667em;padding-right: 1.33em;padding-bottom: 0.667em;padding-left: 1.33em;} 149/*# sourceURL=block-style-variation-styles-inline-css */ 150</style> 151<style id='core-block-supports-inline-css'> 152.wp-container-core-group-is-layout-fd526d70{flex-wrap:nowrap;justify-content:flex-end;}.wp-container-content-9cfa9a5a{flex-grow:1;}.wp-container-core-navigation-is-layout-e0598304{flex-wrap:nowrap;justify-content:flex-start;}.wp-container-core-group-is-layout-0dfbf163{flex-wrap:nowrap;justify-content:space-between;}.wp-container-core-group-is-layout-48c2c4f0{flex-direction:column;align-items:center;justify-content:center;}.wp-container-core-buttons-is-layout-3d213aab{justify-content:space-between;}.wp-container-core-post-content-is-layout-f74b343f >
152 :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width:860px;margin-left:auto !important;margin-right:auto !important;}.wp-container-core-post-content-is-layout-f74b343f > .alignwide{max-width:1392px;}.wp-container-core-post-content-is-layout-f74b343f .alignfull{max-width:none;} 153/*# sourceURL=core-block-supports-inline-css */ 154</style> 155<style id='wp-block-template-skip-link-inline-css'> 156 157 .skip-link.screen-reader-text { 158 border: 0; 159 clip-path: inset(50%); 160 height: 1px; 161 margin: -1px; 162 overflow: hidden; 163 padding: 0; 164 position: absolute !important; 165 width: 1px; 166 word-wrap: normal !important; 167 } 168 169 .skip-link.screen-reader-text:focus { 170 background-color: #eee; 171 clip-path: none; 172 color: #444; 173 display: block; 174 font-size: 1em; 175 height: auto; 176 left: 5px; 177 line-height: normal; 178 padding: 15px 23px 14px; 179 text-decoration: none; 180 top: 5px; 181 width: auto; 182 z-index: 100000; 183 } 184/*# sourceURL=wp-block-template-skip-link-inline-css */ 185</style> 186<link rel='stylesheet' id='om-footer-css' href='https://rakennusmaailma.fi/wp-content/plugins/om-footer/assets/css/om-footer.css?ver=1.1.0' media='all' /> 187<link rel='stylesheet' id='style_login_widget-css' href='https://rakennusmaailma.fi/wp-content/plugins/miniorange-oauth-oidc-single-sign-on-multi/resources/css/style_login_widget.css?ver=6.9.9' media='all' /> 188<link rel='stylesheet' id='wp-block-cover-css' href='https://rakennusmaailma.fi/wp-includes/blocks/cover/style.min.css?ver=6.9.9' media='all' /> 189<link rel='stylesheet' id='om-main-css' href='https://rakennusmaailma.fi/wp-content/themes/om-block-theme/dist/build/assets/om-main.CWlbdzWR.css' media='all' /> 190<link rel='stylesheet' id='dashicons-css' href='https://rakennusmaailma.fi/wp-includes/css/dashicons.min.css?ver=6.9.9' media='all' /> 191<link rel='stylesheet' id='om-photoswipe-css' href='https://rakennusmaailma.fi/wp-content/themes/om-block-theme/dist/build/assets/om-photoswipe.BIjzua6G.css' media='all' /> 192<link rel='stylesheet' id='om-rm-theme-styles-css' href='https://rakennusmaailma.fi/wp-content/plugins/om-rakennusmaailma-theme-mods/build/theme-assets/index.css?ver=1790853005' media='all' /> 193<style id='rocket-lazyload-inline-css'> 194.rll-youtube-player{position:relative;padding-bottom:56.23%;height:0;overflow:hidden;max-width:100%;}.rll-youtube-player:focus-within{outline: 2px solid currentColor;outline-offset: 5px;}.rll-youtube-player iframe{position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;background:0 0}.rll-youtube-player img{bottom:0;display:block;left:0;margin:auto;max-width:100%;width:100%;position:absolute;right:0;top:0;border:none;height:auto;-webkit-transition:.4s all;-moz-transition:.4s all;transition:.4s all}.rll-youtube-player img:hover{-webkit-filter:brightness(75%)}.rll-youtube-player .play{height:100%;width:100%;left:0;top:0;position:absolute;background:url(https://rakennusmaailma.fi/wp-content/plugins/wp-rocket/assets/img/youtube.png) no-repeat center;background-color: transparent !important;cursor:pointer;border:none;}.wp-embed-responsive .wp-has-aspect-ratio .rll-youtube-player{position:absolute;padding-bottom:0;width:100%;height:100%;top:0;bottom:0;left:0;right:0} 195/*# sourceURL=rocket-lazyload-inline-css */ 196</style>
197<script id="om-website-analytics"> 198 window.dataLayer = window.dataLayer || []; 199 window.dataLayer.push( {"PageType":"Sivu","PaidUser":false,"UserLevel":1,"BlogName":"TM Rakennusmaailma","RequiredAccessLevel":1,"PaidContent":false,"PaywallState":"Open","Tags":"","externalMetadata":[]} ); 200</script>
vendor: 1 bytes, line 200
200
201<script src="https://rakennusmaailma.fi/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
vendor: 1 bytes, line 201
201
202<script src="https://rakennusmaailma.fi/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
vendor: 1 bytes, line 202
202
203<script src="https://rakennusmaailma.fi/wp-content/plugins/om-preact-components/dist/main.js?ver=1776147292" id="om-preact-components-js"></script>
vendor: 1 bytes, line 203
203
204<script id="om-photoswipe-data-js-before"> 205const photoSwipeSettings = {"translations":{"close":"Sulje","zoom":"Suurenna","previous":"Edellinen","next":"Seuraava","the_image_cannot_be_loaded":"Kuvaa ei voida ladata","toggle_fullscreen":"N\u00e4yt\u00e4 kokon\u00e4yt\u00f6ll\u00e4"}}; 206//# sourceURL=om-photoswipe-data-js-before 207</script>
207 208<meta name="generator" content="performance-lab 3.9.0; plugins: embed-optimizer"> 209<!-- Head tag start, do not remove --> 210 211<!-- // rakennusmaailma.fi --> 212
213<script type="text/javascript"> 214 const timerStart = Date.now(); 215 window.timerStart = timerStart; 216</script>
216 217
218<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous"></script>
vendor: 2 bytes, line 218
218
219<script src="https://storage.googleapis.com/om-gravito-cmp/om_gravito_stubScriptTag.js"></script>
219 220
221<script> 222 223 function waitForElement(selector) { 224 return new Promise(function(resolve, reject) { 225 var element = document.querySelector(selector); 226 if(element) { 227 resolve(element); 228 return; 229 } 230 var observer = new MutationObserver(function(mutations) { 231 mutations.forEach(function(mutation) { 232 var nodes = Array.from(mutation.addedNodes); 233 for(var node of nodes) { 234 if(node.matches && node.matches(selector)) { 235 observer.disconnect(); 236 resolve(node); 237 return; 238 } 239 }; 240 }); 241 }); 242 observer.observe(document.documentElement, { childList: true, subtree: true }); 243 }); 244 } 245 246 function waitForResource(type, key) { 247 return new Promise(function(resolve, reject) { 248 if (type === 'localStorage' && typeof localStorage !== 'undefined') { 249 var resource = localStorage.getItem(key); 250 if (resource !== null) { 251 resolve(resource); 252 return; 253 } else { 254 resolve(null); 255 } 256 } else { 257 reject('Type not supported'); 258 } 259 }); 260 } 261 262 function waitForVariable2_old(varName, interval = 50, timeout = 5000) { 263 return new Promise((resolve, reject) => { 264 const start = Date.now(); 265 const check = setInterval(() => { 266 if (window[varName]) { 267 clearInterval(check); 268 resolve(window[varName]); 269 } else if (Date.now() - start > timeout) { 270 clearInterval(check); 271 reject(new Error(`Timeout waiting for ${varName}`)); 272 } 273 }, interval); 274 }); 275 } 276 277 function waitForCondition(checkFn, interval = 50, timeout = 5000) { 278 return new Promise((resolve, reject) => { 279 try { 280 if (checkFn()) { 281 resolve(true); 282 return; 283 } 284 } catch (e) { 285 // ignore early errors (e.g., googletag not yet defined) 286 } 287 288 const start = Date.now(); 289 const timer = setInterval(() => { 290 try { 291 if (checkFn()) { 292 clearInterval(timer); 293 resolve(true); 294 } else if (Date.now() - start > timeout) { 295 clearInterval(timer); 296 reject(new Error('Timeout waiting for condition')); 297 } 298 } catch (e) { 299 // still ignore transient errors 300 } 301 }, interval); 302 }); 303 } 304 305 waitForElement("body").then(function(element) { 306 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 307 e.src='http'+('https:'===location.protocol?'s://':'://')+'storage.googleapis.com/om-gravito-cmp/otavaScript.js'; 308 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 309 }); 310 311 var articleCategory = ''; 312 var articleCategories = ''; 313 var recipeTheme = ''; 314 var articleTags = ''; 315 var articleSection = ''; 316 317 var cxContextualIds = []; 318 var cxSegmentIds = []; 319 var contextualIds = []; 320 var lsSegments = false; 321 var deliveryType = ''; 322 var adLocation = 'blogs'; 323 324 var adsmtag = adsmtag || {}; 325 adsmtag.cmd = adsmtag.cmd || []; 326 var googletag = googletag || {}; 327 googletag.cmd = googletag.cmd || []; 328 329 var dfpDebug = document.location.href.indexOf("dfpdebug=1") > -1 ? true : false; 330 var cmpDebug = document.location.href.indexOf("cmpdebug=1") > -1 ? true : false; 331 var testSRA = document.location.href.indexOf("testsra=1") > -1 ? true : true; 332 333 if (cmpDebug) { 334 335 console.time("gravitoCMP"); 336 console.time("consentReady"); 337 console.time("windowloaded"); 338 339 (function() { 340 document.addEventListener('gravito:tcfv2:client', function (event) { 341 console.log('Event:' + event); 342 if(gravitoCMP.currentState) { 343 console.log('%c Gravito currentState ready...', 'background: red; color: #fff'); 344 console.timeEnd("gravitoCMP"); 345 console.log('customPurposes: ' + gravitoCMP.currentState.customPurposes); 346 console.log('nonTCFVendors: ' + gravitoCMP.currentState.nonTCFVendors); 347 } 348 }, true); 349 })(); 350 351 __tcfapi("addEventListener", 2, function (TCData) { 352 console.log('tcString: ' + TCData.tcString); 353 console.log('eventStatus: ' + TCData.eventStatus); 354 if ( TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus ) { 355 console.log('%c CMP ready...', 'background: red; color: #fff'); 356 console.timeEnd("consentReady"); 357 } else { 358 console.log('CMP not ready...'); 359 console.timeEnd("consentReady"); 360 } 361 }); 362 363 window.onload = (event) => { 364 console.log('%c Window loaded...', 'background: red; color: #fff');
365 console.timeEnd("windowloaded"); 366 console.log('%c Gravito currentState on Window loaded...', 'background: red; color: #fff'); 367 console.log(gravitoCMP.currentState); 368 }; 369 370 } 371 372 // Async load of cx.js 373 (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; 374 e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js'; 375 t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); 376 377 var cX = cX || { options: { tcf20: true } }; cX.callQueue = cX.callQueue || []; 378 if (dfpDebug) {console.log('cXsegmentIds1: ' + cxSegmentIds)} 379 380 checkCMPConditions(tcstring_decoded, [1,3,4], [], [412], []).then(result => { 381 if (result) { 382 383 if (dfpDebug) {console.log("Consents met: PIANO IS GOOD TO GO...")} 384 if (dfpDebug) {console.log("cX can load via tcstring...")} 385 386 if (location.href.indexOf('testsetup=1') >= -1) { 387 388 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 389 if (dfpDebug) {console.log('CX: ls available, getting segments...')} 390 cxSegmentIds = localStorage.getItem('_cX_segmentInfo'); 391 if (cxSegmentIds && cxSegmentIds.trim().length > 0) { 392 cxSegmentIds = cxSegmentIds.split(','); 393 lsSegments = true; 394 if (dfpDebug) console.log('CX: DFP ready (lsSegments), initializing...'); 395 //initDFP(cxSegmentIds); 396 dfp.init(cxSegmentIds); 397 if (dfpDebug) console.log('CX: Calling initDfp() with lsSegments:', cxSegmentIds); 398 } 399 } 400 401 waitForCondition(() => window.cX && cX.loaded).then(() => { 402 403 cxSegmentIds = []; 404 contextualIds = []; 405 406 if (dfpDebug) {console.log('Calling cX.getSegments...')} 407 cX.getSegments('f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2', function(segments) { 408 409 if (dfpDebug) console.log('CX: cX.getSegments length: ' + segments.length); 410 if (!segments || !Array.isArray(segments) || !segments.length) { 411 if (dfpDebug) console.warn('CX: Segment fetch failed or empty:', segments); 412 return; 413 } 414 415 cX.Array.forEach(segments, function (cxTypedSegment, index) { 416 if (cxTypedSegment.type == 'contextual') { 417 cxContextualIds.push(cxTypedSegment.id); 418 } else if (cxTypedSegment.type == 'traffic') { 419 cxSegmentIds.push(cxTypedSegment.id); 420 } 421 }); 422 423 if(typeof window.localStorage === 'object' && typeof window.localStorage.getItem === 'function') { 424 localStorage.setItem('_cX_segmentInfo', cxSegmentIds.join(',')); 425 if (dfpDebug) console.log('CX: Segments fetched and stored:', cxSegmentIds); 426 } 427 428 if (dfpDebug) console.log('CX: DFP ready, initializing...'); 429 if (!lsSegments) { 430 //initDFP(cxSegmentIds); 431 dfp.init(cxSegmentIds); 432 } 433 434 }); 435 }).catch(err => console.warn(err.message)); 436 437 } else { 438 439 (async () => { 440 try { 441 await waitForCondition(() => window.cX && cX.loaded, 20, 1000); 442 if (dfpDebug) console.log("cX is loaded!"); 443 444 cX.getSegments("f1ab28b7c9202ce3defa8bb2979a88f90c7a5ab2", async (segments, status) => { 445 if (dfpDebug) {console.log('getSegments status: ' + cX.Array.httpStatus)} 446 if (status !== 200 || !segments || !Array.isArray(segments)) { 447 if (dfpDebug) console.warn("Segment fetch failed:", status, segments); 448 try { 449 await waitForCondition(() => window.adslotsDefined, 20, 1000); 450 if (dfpDebug) console.log("adslots has been defined, cx.getSegments failed..."); 451 initDFP(cxSegmentIds); 452 } catch (err) { 453 console.error(err.message); 454 } 455 return; 456 } 457 cX.Array.forEach(segments, function (cxTypedSegment, index) { 458 if (cxTypedSegment.type === "contextual") { 459 cxContextualIds.push(cxTypedSegment.id); 460 } else if (cxTypedSegment.type === "traffic") { 461 cxSegmentIds.push(cxTypedSegment.id); 462 } 463 }); 464 if (typeof window.localStorage === "object" && typeof window.localStorage.getItem === "function") { 465 localStorage.setItem("_cX_segmentInfo", cxSegmentIds.join(",")); 466 } 467 try { 468 await waitForCondition(() => window.adslotsDefined, 20, 1000); 469 if (dfpDebug) console.log("adslots has been defined..."); 470 initDFP(cxSegmentIds); 471 } catch (err) { 472 console.error(err.message); 473 } 474 });
475 } catch (err) { 476 console.error(err.message); 477 } 478 })(); 479 480 } 481 482 } else { 483 484 if (dfpDebug) {console.log("Consents NOT met: CAN NOT USE PIANO!!!")} 485 __tcfapi("addEventListener", 2, function (TCData) { 486 if (dfpDebug) {console.log('Got an answer from TCData...')} 487 if (TCData.tcString && "cmpuishown" === TCData.eventStatus || 'tcloaded' === TCData.eventStatus || 'useractioncomplete' === TCData.eventStatus) { 488 initDFP(cxSegmentIds); 489 } 490 }); 491 492 } 493 }); 494 495 if (window.dataLayer) { 496 497 dataLayer.forEach(function (dataLayerItem) { 498 if (dataLayerItem['PrimaryCategory'] !== '' && dataLayerItem['PrimaryCategory'] !== undefined) { 499 articleCategory = dataLayerItem['PrimaryCategory'].toLocaleString().toLowerCase().replace(/, /g, ','); 500 if (dfpDebug) {console.log('ArticleCategory: ' + articleCategory);} 501 } 502 if (dataLayerItem['Categories'] !== '' && dataLayerItem['Categories'] !== undefined) { 503 articleCategories = dataLayerItem['Categories'].toLocaleString().toLowerCase().replace(/, /g, ','); 504 if (dfpDebug) {console.log('Categories: ' + articleCategories);} 505 } 506 if (dataLayerItem['Tags'] !== '' && dataLayerItem['Tags'] !== undefined) { 507 articleTags = dataLayerItem['Tags'].toLocaleString().toLowerCase().replace(/, /g, ','); 508 if (dfpDebug) {console.log('Tags: ' + articleTags);} 509 } 510 if (dataLayerItem['Section'] !== '' && dataLayerItem['Section'] !== undefined) { 511 articleSection = dataLayerItem['Section'].toLowerCase().replace(/, /g, ','); 512 if (dfpDebug) {console.log('ArticleSection: ' + articleSection);} 513 } else if (location.href.indexOf('/reseptit/') > -1) { 514 articleSection = 'Resepti'; 515 dataLayerItem['Section'] = articleSection; 516 if (dfpDebug) {console.log('ArticleSection: ' + articleSection);} 517 } 518 if (dataLayerItem['RecipeTheme'] !== '' && dataLayerItem['RecipeTheme'] !== undefined) { 519 recipeTheme = dataLayerItem['RecipeTheme'].toLocaleString().toLowerCase().replace(/, /g, ','); 520 if (dfpDebug) {console.log('RecipeTheme: ' + recipeTheme);} 521 } 522 }); 523 524 } 525 526 checkCMPConditions(tcstring_decoded, [1,3,4], [2,7,9,10], [], [755]).then(result => { 527 if (result) { 528 if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE personalized ads...")} 529 //googletag.pubads().setTargeting("deliveryType", "normal"); 530 deliveryType = 'normal'; 531 } else { 532 checkCMPConditions(tcstring_decoded, [1], [2,7,9,10], [], [755]).then(result => { 533 if (result) { 534 if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Non-personalized ads...")} 535 //googletag.pubads().setTargeting("deliveryType", "npa"); 536 deliveryType = 'npa'; 537 } else { 538 checkCMPConditions(tcstring_decoded, [], [2,7,9,10], [], [755]).then(result => { 539 if (result) { 540 if (dfpDebug) {console.log("Consent met: GAM IS ALLOWED TO SERVE Limited ads...")} 541 //googletag.pubads().setTargeting("deliveryType", "lads"); 542 deliveryType = 'lads'; 543 useHBM = false; 544 } else { 545 if (dfpDebug) {console.log("Consent not met: GAM IS ALLOWED TO SERVE TAD...")} 546 //googletag.pubads().setTargeting("deliveryType", "tad"); 547 deliveryType = 'tad'; 548 useHBM = false; 549 } 550 }); 551 } 552 }); 553 } 554 }); 555 556 window.dfp = { 557 networkCode: '135812570', 558 serviceName: 'rakennusmaailma', 559 adLocation: 'blogs', 560 hideAllAds: false, 561 visibility: (document.documentElement.clientWidth >= 1024 ? 'desktop' : 'mobile'), 562 isAndroid: (navigator.userAgent.match(/Android/i) ? true : false), 563 showAds: true, 564 showVideo: true, 565 useHBM: true, 566 fpaBlockedUrls: ["/mainos/", "/mainoslehti/"], 567 rndMax: 50, 568 definedAds: {}, 569 serviceStarted: "", 570 adSlots: ["desk-1", "desk-2", "in-text", "rectangle-1", "rectangle-2", "sky-scraper-1", "interstitial", "mob-1", "mob-2", "mob-3", "native-card-1", "native-card-2"], 571 slots: { 572 'desk-1': {sizes: [[1, 1], [728, 90], [970, 250], [980, 120], [980, 400], [980, 552], [980, 600]], visibility: 'desktop'}, 573 'desk-2': {sizes: [[1, 2], [2, 2], [728, 90], [980, 120], [980, 400], [980, 552]], visibility: 'desktop'}, 574 'in-text': {sizes: [[300, 250], [300, 300], [300, 431], [300, 600], [468, 400], [560, 400], [620, 891], ['fluid']], visibility: 'desktop'}, 575 'rectangle-1': {sizes: [[300, 250], [300, 300], [300, 431], [300, 600], ['fluid']], visibility: 'desktop'}, 576 'rectangle-2': {sizes: [[300, 250], [300, 300], ['fluid']], visibility: 'desktop'}, 577 'sky-scraper-1': {sizes: [[140, 350], [160, 600], ['fluid']], visibility: 'desktop'}, 578 'interstitial': {sizes: [1, 1], visibility: 'all'}, 579 'mob-1': {sizes: [[300, 150], [300, 250], [300, 300], [300, 431], [300, 600], [320, 320], ['fluid']], visibility: 'mobile'}, 580 'mob-2': {sizes: [[300, 150], [300, 250], [300, 300], [300, 431], [300, 600], [320, 320], ['fluid']], visibility: 'mobile'}, 581 'mob-3': {sizes: [[300, 150], [300, 250], [300, 300], [300, 431], [300, 600], [320, 320], ['fluid']], visibility: 'mobile'}, 582 'native-card-1': {sizes: [[1, 1], ['fluid']], visibility: 'all'}, 583 'native-card-2': {sizes: [[1, 1], ['fluid']], visibility: 'all'} 584 }, 585 pbConfig: { 586 desktop: { 587 script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c3053ca952a90fa87fc.js", 588 configId: { 589 frontpage: "60b4ced8fa4d3b064a3f44d4", 590 content: "60b4cef9ca32e999203f44d5", 591 blogs: "60b4cef9ca32e999203f44d5" 592 } 593 }, 594 mobile: { 595 script: "https://otava-cdn.relevant-digital.com/static/tags/5e4c4c3053ca952a90fa87dd.js", 596 configId: { 597 frontpage: "60b4cf0a2653674af13f44d6", 598 content: "60b4cf13e9bbf0315f3f44d7", 599 blogs: "60b4cf13e9bbf0315f3f44d7" 600 } 601 } 602 }, 603 604 defineSlot: function (slotName, id) { 605 606 var id = id || 'dfp__' + slotName; 607 var path = this.networkCode + '/' + this.serviceName + '/' + this.adLocation + '/' + slotName; 608 if (slotName == 'interstitial' || slotName == 'interstitial2' || slotName.includes('topad-')) { 609 path = this.networkCode + '/' + this.serviceName + '/content/' + slotName; 610 } 611 this.definedAds[id] = true; 612 613 //console.log('ad slot: ' + slotName + ', slot sizes: ' + this.slots[slotName]['sizes'] + ', ' + typeof this.slots[slotName]['sizes']); 614 if (typeof this.slots[slotName]['sizes'] !== 'undefined') { 615 return googletag.defineSlot(path, this.slots[slotName]['sizes'], id).addService(googletag.pubads()).setTargeting('adslotid', id.replace('dfp__','')); 616 } else { 617 return googletag.defineOutOfPageSlot(path, id).addService(googletag.pubads()); 618 } 619 620 }, 621 622 displayAdslot: function (id) { 623 624 //if (!this.initialized) this.init(); 625 626 var that = this; 627 var parts = id.split('__'); 628 parts = parts[1].split('_'); 629 var slotName = parts[0]; 630 631 if (testSRA) { 632 //if (!(slotName.includes('native'))) { 633 // return; 634 //} 635 if (dfpDebug) {console.log('!SRA displayAdslot: ' + id)} 636 return; 637 } 638 639 // Checking that the native adslot is known and visibility matches 640 if (slotName.includes('native') && this.slots.hasOwnProperty(slotName)) { 641 642 googletag.cmd.push(function () { 643 var slot = that.defineNative(id, slotName); 644 googletag.display(id); 645 //googletag.pubads().refresh([slot], {changeCorrelator: false}); 646 }); 647 648 } else { 649 650 // Checking that the adslot is known and visibility matches 651 if (this.slots.hasOwnProperty(parts[0]) && ["all", this.visibility].indexOf(this.slots[parts[0]]['visibility'] || 'all') >= 0) { 652 googletag.cmd.push(function () { 653 var slot = that.defineSlot(slotName, id); 654 googletag.display(id); 655 //googletag.pubads().refresh([slot], {changeCorrelator: false}); 656 if (dfpDebug) {console.log('displayAdslot for ' + id + '...')} 657 });
658 } 659 } 660 661 }, 662 663 defineNative: function(opt_div, slotName) { 664 665 var opt_div = opt_div || 'dfp__' + slotName; 666 var adUnitPath = this.networkCode + '/rakennusmaailma/native/' + slotName; 667 this.definedAds[opt_div] = true; 668 //return googletag.defineSlot(adUnitPath, 'fluid', opt_div).addService(googletag.pubads()); 669 return googletag.defineSlot(adUnitPath, this.slots[slotName]['sizes'], opt_div).addService(googletag.pubads()).setTargeting('adslotid', opt_div.replace('dfp__','')); 670 671 }, 672 673 displayNative: function(id) { 674 675 //if (!this.initialized) this.init(); 676 677 var that = this; 678 var parts = id.split('__'); 679 parts = parts[1].split('_'); 680 681 var slotName = parts[0]; 682 683 // Checking that the adslot is known and visibility matches 684 if (this.slots.hasOwnProperty(slotName)) { 685 googletag.cmd.push(function () { 686 var slot = that.defineNative(id, slotName); 687 googletag.display(id); 688 googletag.pubads().refresh([slot]); 689 }); 690 } 691 692 }, 693 694 registerAdslots: function(i) { 695 for (adslot in this.slots) { 696 var v = this.slots[adslot].location || ["all"]; 697 if (v != "all" && v.indexOf(adLocation) < 0) { 698 delete this.slots[adslot]; 699 console.log(adslot + ' deleted!'); 700 } 701 } 702 }, 703 704 705 init: function (cXsegmentIds) { 706 707 //if (dfpDebug) {console.log('Initin segmentit: ' + cXsegmentIds)} 708 709 var that = this; 710 711 if (!this.hasOwnProperty('serviceName')) { 712 console.log('DFP service name not set'); 713 return; 714 } 715 716 this.registerAdslots(this.slots); 717 718 if (!dfp.serviceStarted) { 719 720 googletag.cmd.push(function () { 721 722 if (dfpDebug) { 723 googletag.pubads().addEventListener('slotRenderEnded', function(event) { 724 //if (event.slot.getSlotElementId() == 'dfp__interstitial') { 725 if (!event.isEmpty) { 726 console.log('Advertiser ID:', event.advertiserId); 727 console.log('Campaign ID: ', event.campaignId); 728 console.log('Line Item ID:', event.lineItemId); 729 console.log('Creative ID: ', event.creativeId); 730 console.log('Size:', event.size); 731 } 732 //} 733 }); 734 } 735 736 if ((dfpDebug || 1 == 2) && dfp.useHBM && 1 == 2) { 737 738 googletag.pubads().addEventListener('slotRenderEnded', function(event) { 739 if (event.slot.getSlotElementId().indexOf('dfp__mob-2_222') > -1 && event.slot.getSlotElementId().indexOf('_111') == -1) { 740 var origAdSlotId = event.slot.getSlotElementId(); 741 var adPath = 'rakennusmaailma'; 742 if (event.isEmpty) { 743 var newAdSlotId = origAdSlotId.replace("-","_") + '_111'; 744 var adSlotName = origAdSlotId.substr(origAdSlotId.indexOf("__")+2); 745 adSlotName = adSlotName.substr(0, adSlotName.indexOf("_")); 746 if (dfpDebug) {console.log('adSlotName: ' + adSlotName)}; 747 if (dfpDebug) {console.log('Creating new adslot: ' + '#' + origAdSlotId)}; 748 jQuery('#' + origAdSlotId).after('<div id="' + newAdSlotId + '" class="' + adSlotName + '-article">
748<script>var ' + newAdSlotId + '; googletag.cmd.push(function(){' + newAdSlotId + ' = googletag.defineSlot("/135812570/'+ adPath +'/' + dfp.adLocation + '/' + adSlotName + '", [[300,250],[300,300],[300,431],[300,600],[320,320]], "' + newAdSlotId + '").addService(googletag.pubads()).setTargeting("adslotid", "' + origAdSlotId.replace("dfp__","") + '-111")});googletag.cmd.push(function() {googletag.display("' + newAdSlotId + '")});<\/script><\/div>'); 749 relevantDigital.cmd.push(function() { 750 relevantDigital.loadPrebid({configId: pbjsConf, manageAdserver: false, collapseEmptyDivs: true, collapseBeforeAdFetch: false, noGpt: true, allowedDivIds: [newAdSlotId], noSlotReload: true}); 751 if (dfpDebug) {console.log('Requesting new ad to: #' + newAdSlotId)}; 752 }); 753 } else { 754 if (dfpDebug) {console.log('Ad slot ' + origAdSlotId + ' was not empty...')}; 755 } 756 } 757 }); 758 759 } 760 761 if ((dfpDebug || 1 == 2) && dfp.useHBM && 1 == 2) { 762 763 googletag.pubads().addEventListener('slotRenderEnded', function(event) { 764 765 var origAdSlotId = event.slot.getSlotElementId(); 766 //var acceptedSlotIds = ["1_1","2_1","2_222","3_1","3_2","3_3","3_4","3_5","3_6"]; 767 var acceptedSlotIds = ["_1","_2","_3","_4","_5","_6","_222"]; 768 769 //if (event.slot.getSlotElementId().indexOf('dfp__mob-') > -1 && acceptedSlotIds.some(value => origAdSlotId.endsWith(value))) { 770 if (event.slot.getSlotElementId().indexOf('dfp__native-') == -1 && event.slot.getSlotElementId().indexOf('sky') == -1 && acceptedSlotIds.some(value => origAdSlotId.endsWith(value))) { 771 if (dfpDebug) {console.log('adSlotId is allowed for FRB...')} 772 var adPath = 'rakennusmaailma'; 773 if (event.isEmpty) { 774 775 setTimeout(function() { 776 var newAdSlotId = origAdSlotId.replace("-","_") + '_111'; 777 var adSlotName = origAdSlotId.substr(origAdSlotId.indexOf("__")+2); 778 adSlotName = adSlotName.substr(0, adSlotName.indexOf("_")); 779 if (dfpDebug) {console.log('adSlotName: ' + adSlotName)}; 780 if (dfpDebug) {console.log('Creating new adslot: ' + '#' + origAdSlotId)}; 781 jQuery('#' + origAdSlotId).after('<div id="' + newAdSlotId + '" class="' + adSlotName + '-article">
781<script>var ' + newAdSlotId + '; googletag.cmd.push(function(){' + newAdSlotId + ' = googletag.defineSlot("/135812570/'+ adPath +'/' + dfp.adLocation + '/' + adSlotName + '", [[300,250],[300,300],[300,431],[300,600],[320,320]], "' + newAdSlotId + '").addService(googletag.pubads()).setTargeting("adslotid", ["' + origAdSlotId.replace("dfp__","") + '-111","frb"]).setTargeting("experiments","olddemandorder")});googletag.cmd.push(function() {googletag.display("' + newAdSlotId + '")});<\/script><\/div>'); 782 var pbjsConf =dfp.pbConfig[dfp.visibility].configId[dfp.adLocation]; 783 relevantDigital.cmd.push(function() { 784 relevantDigital.loadPrebid({configId: pbjsConf, manageAdserver: false, collapseEmptyDivs: true, collapseBeforeAdFetch: false, noGpt: true, allowedDivIds: [newAdSlotId], noSlotReload: true}); 785 if (dfpDebug) {console.log('Requesting new ad to: #' + newAdSlotId)}; 786 }); 787 }, 1000); 788 789 } else { 790 if (dfpDebug) {console.log('Ad slot ' + origAdSlotId + ' was not empty...')}; 791 } 792 } 793 794 }); 795 796 } 797 798 googletag.pubads().addEventListener('slotRenderEnded', function(event) { 799 800 if (event.slot.getSlotElementId().indexOf('dfp__native-card-1') > -1) { 801 if (event.isEmpty) { 802 const slotId = event.slot.getSlotElementId(); 803 //console.log('li length: ' + jQuery('#' + slotId).closest('ul').children().length) 804 if (jQuery('#' + slotId).closest('ul').children().length === 1) { 805 jQuery('#NativeAdHolder_native-card-1').remove(); 806 } else { 807 jQuery('#' + slotId).parent('li').remove(); 808 } 809 } 810 } 811 812 if (event.slot.getSlotElementId().indexOf('dfp__interstitial') > -1) { 813 if (event.isEmpty) { 814 if (dfpDebug) {console.log('Fpa is empty, calling webinterstitial...')} 815 window.canRunWebInterstitial = true; 816 } else { 817 if (dfpDebug) {console.log('BBW: preventing sticky player when fpa was shown...')} 818 window.bluebillywig = window.bluebillywig || {}; 819 window.bluebillywig.cmd = window.bluebillywig.cmd || []; 820 //window.bluebillywig.cmd.push(function($$api) { 821 // //const originalStickyMode = $$api.getPlayoutData().stickyMode; 822 // $$api.updatePlayout({stickyMode: 'none'}); 823 // //$$api.updatePlayout({stickyMode: originalStickyMode}); 824 //}); 825 window.bluebillywig.cmd.push({ 826 playerId: '/p/inarticle/a/rakennusmaailma', 827 callback: function($$api) { 828 $$api.updatePlayout({stickyMode: 'none'}); 829 } 830 });
831 } 832 } 833 834 }); 835 836 // Adding some targeting parameters for adOps 837 googletag.pubads().setTargeting('url_domain', window.location.host) 838 googletag.pubads().setTargeting('url_path', window.location.pathname) 839 googletag.pubads().setTargeting('url_params', window.location.search.substring(1)); 840 841 if (window.dataLayer) { 842 843 if (articleCategory != undefined && articleCategory != '') { 844 googletag.pubads().setTargeting("articlecategory", articleCategory.toLowerCase()); 845 if (dfpDebug) {console.log('Targeting for articlecategory: ' + articleCategory.toLowerCase());} 846 } 847 if (articleCategories != undefined && articleCategories != '') { 848 googletag.pubads().setTargeting("articlecategories", articleCategories.toLowerCase()); 849 if (dfpDebug) {console.log('Targeting for articlecategories: ' + articleCategories.toLowerCase());} 850 } 851 if (articleSection != undefined && articleSection != '') { 852 googletag.pubads().setTargeting("articlesection", articleSection.toLowerCase()); 853 if (dfpDebug) {console.log('Targeting for articlesection: ' + articleSection.toLowerCase());} 854 } 855 if (recipeTheme != undefined && recipeTheme != '') { 856 googletag.pubads().setTargeting("recipetheme", recipeTheme.toLowerCase().replace(/, /g, ',')); 857 if (dfpDebug) {console.log('Targeting for recipetheme: ' + recipeTheme.toLowerCase().replace(/, /g, ','));} 858 } else if (articleTags != undefined && articleTags != '') { 859 googletag.pubads().setTargeting("articlekeywords", articleTags.toLowerCase().replace(/, /g, ',')); 860 if (dfpDebug) {console.log('Targeting for articlekeywords: ' + articleTags.toLowerCase().replace(/, /g, ','));} 861 } 862 863 } else { 864 console.error('DataLayer not ready for targeting...') 865 } 866 867 if (cXsegmentIds !== null && cXsegmentIds !== undefined) { 868 869 var regexPattern = new RegExp("(\\b8nfapah6uu5t\\b|\\b8o1gwyxui6y1\\b)"); 870 if (!regexPattern.test(cXsegmentIds)) { 871 cXsegmentIds = (Array.isArray(cXsegmentIds) && cXsegmentIds.length === 0) ? '8o1gwyxui6y1,aavib3epzfey' : (cXsegmentIds !== '' ? cXsegmentIds + ',8o1gwyxui6y1,aavib3epzfey' : cXsegmentIds); 872 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8o1gwyxui6y1,aavib3epzfey"')} 873 } 874 var regexPattern = new RegExp("(\\b18hq77meo1fv5\\b)"); 875 if (!regexPattern.test(cXsegmentIds)) { 876 cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '18hq77meo1fv5'; 877 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "18hq77meo1fv5"')} 878 } 879 if (dfp.location == 'ruoka') { 880 var regexPattern = new RegExp("(\\b8nqech16gy6q\\b)"); 881 if (!regexPattern.test(cXsegmentIds)) { 882 cXsegmentIds = cXsegmentIds + (cXsegmentIds !== '' ? ',' : '') + '8nqech16gy6q'; 883 if (dfpDebug) {console.log('Additional DFP setTargeting CxSegments: "8nqech16gy6q"')} 884 } 885 } 886 887 if (dfpDebug) {console.log('DFP setTargeting CxSegments: ' + cXsegmentIds)} 888 googletag.pubads().setTargeting("CxSegments", cXsegmentIds); 889 890 } 891 892 googletag.pubads().setTargeting("CxContext", cxContextualIds.join()); 893 googletag.pubads().setTargeting("deliveryType", deliveryType); 894 895 (function () { 896 897 function generateNewPPID() { 898 return crypto.randomUUID().replace(/-/g, ''); 899 } 900 901 function parsePossiblyDoubleEncodedJSON(value) { 902 var parsed = value; 903 while (typeof parsed === 'string') { 904 parsed = JSON.parse(parsed); 905 } 906 return parsed; 907 } 908 909 function setPPID(ppid) { 910 if (!ppid) return; 911 localStorage.setItem('ppid', ppid); 912 googletag.pubads().setPublisherProvidedId(ppid); 913 } 914 915 var storedPPID = localStorage.getItem('ppid'); 916 917 if (storedPPID) { 918 if (dfpDebug) {console.log('ls storedPPID: ', storedPPID)} 919 googletag.pubads().setPublisherProvidedId(storedPPID); 920 return; 921 } 922 923 try { 924 var gravitoValue = localStorage.getItem('gravito-microprofile-data'); 925 if (gravitoValue) { 926 var parsed = parsePossiblyDoubleEncodedJSON(gravitoValue); 927 if (parsed && parsed.i) { 928 var migratedPPID = btoa(parsed.i); 929 if (dfpDebug) {console.log('gmd ls migratedPPID: ', migratedPPID)} 930 setPPID(migratedPPID); 931 return; 932 } 933 } 934 } catch (e) { 935 console.warn('Gravito migration failed:', e); 936 } 937 938 var newPPID = generateNewPPID(); 939 setPPID(newPPID); 940 if (dfpDebug) {console.log('created a newPPID: ', newPPID)} 941 942 })(); 943 944 //waitForResource('localStorage', 'gravito-microprofile-data').then(function (value) { 945 // if (value !== null) { 946 // if (dfpDebug) {console.log('gravito-microprofile-data exists in local storage with value: ', value)} 947 // var ppid = btoa(JSON.parse(JSON.parse(value)).i); 948 // if (ppid) { 949 // googletag.pubads().setPublisherProvidedId(ppid); 950 // if (dfpDebug) {console.log('ppid: ' + ppid)} 951 // } 952 // } 953 //}); 954 955 var adLocationTargeting = dfp.adLocation; 956 //if (adLocation == 'ruoka' && location.href.indexOf('/reseptit/') > -1) {adLocationTargeting = 'reseptit'} 957 googletag.pubads().setTargeting("adlocation", adLocationTargeting); 958 959 googletag.pubads().collapseEmptyDivs(); 960 googletag.pubads().setCentering(true); 961 962 var experimentsTargeting = ''; 963 //if (location.href.indexOf('testdemandorder') >= -1) { 964 // experimentsTargeting = 'newdemandorder,'; 965 //} 966 var renderMarginPercent = Math.random() < 1/3 ? 40 : Math.random() < 1/2 ? 50 : 60; 967 experimentsTargeting += 'lazyload_' + renderMarginPercent; 968 969 googletag.pubads().setTargeting("experiments", experimentsTargeting); 970 971 googletag.pubads().enableLazyLoad({ 972 fetchMarginPercent: 100, 973 renderMarginPercent: renderMarginPercent, 974 mobileScaling: 1 975 });
976 if (dfpDebug) {console.log('renderMarginPercent: ' + renderMarginPercent)} 977 978 if (!testSRA) { 979 googletag.pubads().enableSingleRequest(); 980 } 981 googletag.pubads().disableInitialLoad(); 982 googletag.enableServices(); 983 dfp.serviceStarted = true; 984 985 }); 986 987 } 988 989 this.initialized = true; 990 if (dfpDebug) {console.log('DFP initialized...')} 991 992 } 993 994 }; 995 996 var rnd = Math.floor(Math.random() * dfp.rndMax); 997 if (dfpDebug) {console.log('rnd: ' + rnd + ', fpa: ' + cmpGetCookie('fullpagead'));} 998 999</script>
999 1000 1001
1002<script type="text/javascript"> 1003 1004 var rdads = document.createElement('script'); 1005 rdads.async = true; 1006 var useSSL = 'https:' == document.location.protocol; 1007 rdads.src = dfp.pbConfig[dfp.visibility].script; 1008 var node = document.getElementsByTagName('script')[0]; 1009 node.parentNode.insertBefore(rdads, node); 1010 1011 var pbjsConf = dfp.pbConfig[dfp.visibility].configId[dfp.adLocation]; 1012 if (dfpDebug) {console.log('pbjsConf in use ' + pbjsConf);} 1013 1014 function initDFP(cXsegmentIds) { 1015 1016 //if (dfpDebug) {console.log('cSsegmentIds: ' + cXsegmentIds)} 1017 if(dfp !== undefined) { 1018 if (dfpDebug) {console.log('initDFP() called by cX.getUserSegmentIds ' + cXsegmentIds + '...')} 1019 setTimeout(function(){ 1020 dfp.init(cXsegmentIds); 1021 }, 1); 1022 setTimeout(function(){ 1023 if (dfp.useHBM) { 1024 if (!testSRA) { 1025 if (dfpDebug) {console.log('HBM initialized...')} 1026 initHBM(cXsegmentIds); 1027 } 1028 } else { 1029 console.log('HBM not in use!!!'); 1030 googletag.pubads().refresh(); 1031 } 1032 }, 1); 1033 } else { 1034 console.log('DFP init failed: window.dfp missing!'); 1035 } 1036 1037 } 1038 1039 function initHBM(cXsegmentIds) { 1040 1041 if (dfpDebug) {console.log('initHBM called...')} 1042 1043 var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : []; 1044 var hbArticleTags = articleTags != '' ? articleTags.split() : []; 1045 var hbArticleSection = articleSection != '' ? articleSection.split() : articleCategory != '' ? articleCategory.split() : []; 1046 1047 window.relevantDigital = window.relevantDigital || {}; 1048 relevantDigital.cmd = relevantDigital.cmd || []; 1049 relevantDigital.cmd.push(function() { 1050 relevantDigital.addPrebidConfig({ 1051 ortb2: { 1052 site: { 1053 //keywords: contextualIds.join(), 1054 ext: { 1055 data: { 1056 CxContext: Object.values(cxContextualIds), 1057 articleCategories: hbArticleCategories, 1058 articleTags: hbArticleTags, 1059 articleSection: hbArticleSection 1060 } 1061 } 1062 } 1063 } 1064 }); 1065 relevantDigital.loadPrebid({ 1066 configId: pbjsConf, 1067 manageAdserver: false, //Manage adserver set to off. 1068 collapseEmptyDivs: true, 1069 collapseBeforeAdFetch: false, 1070 noGpt: true, 1071 allowedDivIds: null, // set to an array to only load certain <div>s, example - ["divId1", "divId2"] 1072 noSlotReload: false, // set true to only load ad slots that have never been loaded 1073 onBeforeAuctionSetup: function(params) { 1074 params.auction.adUnits.forEach(function(unit) { 1075 unit.bids.forEach(function(bid){ 1076 if (bid.bidder == 'appnexus') { 1077 bid.params.keywords = {cxSegments: cXsegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories, hbArticleSection: hbArticleSection}; 1078 if (dfpDebug) {console.log('Setting params for Xandr bidder...')} 1079 } 1080 }) 1081 }) 1082 } 1083 }); 1084 }); 1085 1086 } 1087 1088 function loadAdSlot(adSlotId) { 1089 1090 if (dfpDebug) {console.log('HAS: runHeaderbid: ' + adSlotId + ', ' + (Date.now() - timerStart) + 'ms...')} 1091 observerHeaderbidRun = true; 1092 1093 var adUnit = adSlotId.split('__')[1].split('_')[0]; 1094 1095 var hbArticleTags = articleTags != '' ? articleTags.split(',').map(tag => tag.trim()) : []; 1096 var hbArticleCategories = articleCategories != '' ? [...new Set(articleCategory.split(',').concat(articleCategories.split(',')))] : []; 1097 1098 var takeOver = '', adSlotsNotAllowedForHBM = []; 1099 if (hbArticleTags.includes('hyvinvoiva minä')) { 1100 dfp.useHBM = false; 1101 takeOver = 'hyvinvoiva minä'; 1102 } 1103 if (['itsetuntemus', 'terveys', 'liikunta', 'ravinto'].some(cat => hbArticleCategories.includes(cat))) { 1104 dfp.useHBM = false; 1105 takeOver = 'hyvinvoiva minä'; 1106 } 1107 if (articleSection == 'hyvinvointi') { 1108 dfp.useHBM = false; 1109 takeOver = 'hyvinvoiva minä'; 1110 } 1111 1112 //if (!dfp.useHBM && takeOver == 'hyvinvoiva minä') { 1113 // adSlotsNotAllowedForHBM = ['mob-1', 'mob-2']; 1114 // if (dfpDebug) {console.log('HAS: takeOver: ' + takeOver + ', adSlotsNotAllowedForHBM: ' + adSlotsNotAllowedForHBM)} 1115 //} 1116 1117 googletag.cmd.push(function() { 1118 if (dfp.slots[adUnit] && ['all', dfp.visibility].includes(dfp.slots[adUnit].visibility)) { 1119 if (adUnit.includes('native')) { 1120 googletag.defineSlot('/' + dfp.networkCode + '/' + dfp.serviceName + '/native/' + adUnit + '', dfp.slots[adUnit].sizes, adSlotId).addService(googletag.pubads()).setTargeting('adslotid', adSlotId.replace('dfp__','')); 1121 if (dfpDebug) {console.log('Defining slot: /' + dfp.networkCode + '/' + dfp.serviceName + '/native/' + adUnit)} 1122 } else if (adUnit.includes('topad') || adUnit.includes('interstitial')) { 1123 googletag.defineSlot('/' + dfp.networkCode + '/' + dfp.serviceName + '/content/' + adUnit + '', dfp.slots[adUnit].sizes, adSlotId).addService(googletag.pubads()).setTargeting('adslotid', adSlotId.replace('dfp__','')); 1124 if (dfpDebug) {console.log('Defining slot: /' + dfp.networkCode + '/' + dfp.serviceName + '/content/' + adUnit)} 1125 } else { 1126 googletag.defineSlot('/' + dfp.networkCode + '/' + dfp.serviceName + '/' + dfp.adLocation + '/' + adUnit + '', dfp.slots[adUnit].sizes, adSlotId).addService(googletag.pubads()).setTargeting('adslotid', adSlotId.replace('dfp__','')); 1127 if (dfpDebug) {console.log('Defining slot: /' + dfp.networkCode + '/' + dfp.serviceName + '/' + dfp.adLocation + '/' + adUnit)} 1128 } 1129 } 1130 }); 1131 1132 //if (['native', 'interstitial', 'topad-desk', 'desk-1', ...(adSlotsNotAllowedForHBM || [])].some(slot => adUnit.includes(slot))) { 1133 if (['native', 'interstitial', 'topad-desk', ...(adSlotsNotAllowedForHBM || [])].some(slot => adUnit.includes(slot))) { 1134 1135 if (dfpDebug) console.log('HAS: HBM blocked adslots:', adUnit, '| Match:',
1135(['native', 'interstitial', 'topad-desk', ...(adSlotsNotAllowedForHBM || [])].some(slot => adUnit.includes(slot)))); 1136 googletag.cmd.push(function() { 1137 const slot = googletag.pubads().getSlots().find(s => s.getSlotElementId() === adSlotId); 1138 if (slot) { 1139 googletag.pubads().refresh([slot], {changeCorrelator: false}); 1140 } 1141 }); 1142 1143 } else { 1144 1145 if (dfpDebug) { 1146 console.log('HAS: Existing slots: '); 1147 googletag.pubads().getSlots().forEach((slot) => { 1148 console.log('HAS: ' + slot.getSlotElementId()); 1149 }); 1150 } 1151 1152 window.relevantDigital = window.relevantDigital || {}; 1153 relevantDigital.cmd = relevantDigital.cmd || []; 1154 relevantDigital.cmd.push(function() { 1155 1156 relevantDigital.addPrebidConfig({ 1157 ortb2: { 1158 site: { 1159 ext: { 1160 data: { 1161 CxContext: Object.values(cxContextualIds), 1162 articleCategories: hbArticleCategories, 1163 articleTags: hbArticleTags 1164 } 1165 } 1166 } 1167 } 1168 }); 1169 1170 relevantDigital.loadPrebid({ 1171 configId: pbjsConf, 1172 manageAdserver: false, //Manage adserver set to off. 1173 collapseEmptyDivs: true, 1174 collapseBeforeAdFetch: false, 1175 noGpt: true, 1176 allowedDivIds: Array.isArray(adSlotId) ? adSlotId : [adSlotId], // set to an array to only load certain <div>s, example - ["divId1", "divId2"] 1177 noSlotReload: true, // set true to only load ad slots that have never been loaded 1178 googletagCalls: { 1179 refresh: (slots) => googletag.pubads().refresh(slots, { changeCorrelator: false }), 1180 }, 1181 onBeforeAuctionSetup: function(params) { 1182 params.auction.adUnits.forEach(function(unit) { 1183 unit.bids.forEach(function(bid){ 1184 if (bid.bidder == 'appnexus') { 1185 bid.params.keywords = {cxSegments: cxSegmentIds, CxContext: cxContextualIds, articleTags: hbArticleTags, articleCategories: hbArticleCategories}; 1186 if (dfpDebug) {console.log('Setting params for Xandr bidder...')} 1187 } 1188 }) 1189 }) 1190 } 1191 1192 }); 1193 }); 1194 1195 } 1196 1197 } 1198 1199 1200</script>
1200 1201 1202 1203<!-- Google Tag Manager -->
1204<script>
vendor: 331 bytes, lines 1204-1208
1204(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 1205new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 1206j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 1207'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 1208})(window,document,'script','dataLayer','
1208GTM-TW96FBK
vendor: 3 bytes, line 1208
1208');
1208</script>
1208 1209<!-- End Google Tag Manager --> 1210 1211<!-- // rakennusmaailma.fi --> 1212 1213<!-- Head tag end, do not remove -->
1214<script type="importmap" id="wp-importmap"> 1215{"imports":{"@wordpress/interactivity":"https://rakennusmaailma.fi/wp-includes/js/dist/script-modules/interactivity/index.min.js?ver=66c613f68580994bb00a"}} 1216</script>
vendor: 1 bytes, line 1216
1216
1217<script type="module" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/dist/build/assets/archives.0nx0-Jcl.js" id="archives-js-module"></script>
vendor: 1 bytes, line 1217
1217
1218<script type="module" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/dist/build/assets/om-photoswipe.CiGjYS-w.js" id="om-photoswipe-js-module"></script>
1218 1219<link rel="modulepreload" href="https://rakennusmaailma.fi/wp-includes/js/dist/script-modules/interactivity/index.min.js?ver=66c613f68580994bb00a" id="@wordpress/interactivity-js-modulepreload" data-wp-fetchpriority="low"> 1220<meta name="generator" content="optimization-detective 0.9.0"> 1221<meta name="generator" content="embed-optimizer 0.4.1"> 1222<style class='wp-fonts-local'> 1223@font-face{font-family:"Guardian Text Egyptian Web";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextEgyp-Regular-Web.woff2') format('woff2');} 1224@font-face{font-family:"Guardian Text Egyptian Web";font-style:italic;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextEgyp-RegularIt-Web.woff2') format('woff2');} 1225@font-face{font-family:"Guardian Text Egyptian Web";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextEgyp-Bold-Web.woff2') format('woff2');} 1226@font-face{font-family:"Guardian TextSans";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextSans-Regular-Web.woff2') format('woff2');} 1227@font-face{font-family:"Guardian TextSans";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextSans-Bold-Web.woff2') format('woff2');}
1228@font-face{font-family:Flama;font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Basic/Flama-Basic-A.woff') format('woff');} 1229@font-face{font-family:Flama;font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Medium/Flama-Medium-A.woff') format('woff');} 1230@font-face{font-family:"Flama Semicond";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Semicond-Book-Webfont/FlamaSemicond-Book.woff') format('woff');} 1231@font-face{font-family:"Flama Semicond";font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Semicond-Semibold-Webfont/FlamaSemicond-Semibold.woff') format('woff');} 1232@font-face{font-family:"Flama Semicond";font-style:normal;font-weight:800;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Semicond-Extrabold-Webfont/FlamaSemicond-Extrabold.woff') format('woff');} 1233@font-face{font-family:"Flama Cond";font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Cond-Semibold-Webfont/FlamaCond-Semibold.woff') format('woff');} 1234@font-face{font-family:"Flama Cond";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Cond-Bold-Webfont/FlamaCond-Bold.woff') format('woff');} 1235@font-face{font-family:"Noto Sans";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Noto-Sans/Noto-Sans-Regular.woff2') format('woff2');} 1236@font-face{font-family:"Noto Sans";font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Noto-Sans/Noto-Sans-600.woff2') format('woff2');} 1237@font-face{font-family:"Noto Sans";font-style:normal;font-weight:800;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Noto-Sans/Noto-Sans-800.woff2') format('woff2');} 1238@font-face{font-family:"Cadiz Web";font-style:normal;font-weight:300;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Light.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Light.woff') format('woff');} 1239@font-face{font-family:"Cadiz Web";font-style:italic;font-weight:300;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-LightItalic.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-LightItalic.woff') format('woff');} 1240@font-face{font-family:"Cadiz Web";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Regular.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Regular.woff') format('woff');} 1241@font-face{font-family:"Cadiz Web";font-style:italic;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-RegularItalic.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-RegularItalic.woff') format('woff');} 1242@font-face{font-family:"Cadiz Web";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Bold.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Bold.woff') format('woff');} 1243@font-face{font-family:"Cadiz Web";font-style:italic;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-BoldItalic.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-BoldItalic.woff') format('woff');} 1244@font-face{font-family:"Cadiz Web";font-style:normal;font-weight:900;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Black.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-Black.woff') format('woff');} 1245@font-face{font-family:"Cadiz Web";font-style:italic;font-weight:900;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-BlackItalic.woff2') format('woff2'), url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/CadizWeb/CadizWeb-BlackItalic.woff') format('woff');} 1246@font-face{font-family:"Playfair Display";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Playfair-Display/PlayfairDisplay-Regular.woff2') format('woff2');} 1247@font-face{font-family:"Playfair Display";font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Playfair-Display/PlayfairDisplay-Medium.woff2') format('woff2');} 1248@font-face{font-family:"Playfair Display";font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Playfair-Display/PlayfairDisplay-Semibold.woff2') format('woff2');} 1249@font-face{font-family:"Playfair Display";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Playfair-Display/PlayfairDisplay-Bold.woff2') format('woff2');} 1250@font-face{font-family:"Playfair Display";font-style:normal;font-weight:800;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Playfair-Display/PlayfairDisplay-Extrabold.woff2') format('woff2');} 1251@font-face{font-family:Palanquin;font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Palanquin/Palanquin-Regular.woff2') format('woff2');} 1252@font-face{font-family:Palanquin;font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Palanquin/Palanquin-Medium.woff2') format('woff2');} 1253@font-face{font-family:Palanquin;font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Palanquin/Palanquin-Semibold.woff2') format('woff2');} 1254@font-face{font-family:Palanquin;font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Palanquin/Palanquin-Bold.woff2') format('woff2');} 1255@font-face{font-family:"Guardian TextSans Bold";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextSans-Bold-Web.woff2') format('woff2');} 1256@font-face{font-family:"Guardian Text Egyptian Web Bold";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Guardian/GuardianTextEgyp-Bold-Web.woff2') format('woff2');} 1257@font-face{font-family:"Flama Medium";font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Medium/Flama-Medium-A.woff') format('woff');} 1258@font-face{font-family:"Flama Semicond Extrabold";font-style:normal;font-weight:800;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Semicond-Extrabold-Webfont/FlamaSemicond-Extrabold.woff') format('woff');} 1259@font-face{font-family:"Flama Cond Bold";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Cond-Bold-Webfont/FlamaCond-Bold.woff') format('woff');} 1260@font-face{font-family:"Flama Cond Semibold";font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Cond-Semibold-Webfont/FlamaCond-Semibold.woff') format('woff');} 1261@font-face{font-family:"Flama Semicond Book";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Semicond-Book-Webfont/FlamaSemicond-Book.woff') format('woff');} 1262@font-face{font-family:"Flama Semicond Semibold";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Flama-Semicond-Semibold-Webfont/FlamaSemicond-Semibold.woff') format('woff');} 1263@font-face{font-family:"DM Serif Display";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/DM_Serif_Display/DMSerifDisplay-Regular.woff2') format('woff2');} 1264@font-face{font-family:"DM Sans";font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/DM_Sans/DMSans-Regular.woff2') format('woff2');} 1265@font-face{font-family:"DM Sans";font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/DM_Sans/DMSans-Medium.woff2') format('woff2');} 1266@font-face{font-family:"DM Sans";font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/DM_Sans/DMSans-SemiBold.woff2') format('woff2');} 1267@font-face{font-family:"DM Sans";font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/DM_Sans/DMSans-Bold.woff2') format('woff2');} 1268@font-face{font-family:Lora;font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Lora/Lora-Regular.woff2') format('woff2');} 1269@font-face{font-family:Lora;font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Lora/Lora-Medium.woff2') format('woff2');} 1270@font-face{font-family:Lora;font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Lora/Lora-SemiBold.woff2') format('woff2');} 1271@font-face{font-family:Lora;font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Lora/Lora-Bold.woff2') format('woff2');} 1272@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Inter/Inter-Regular.woff2') format('woff2');} 1273@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Inter/Inter-Medium.woff2') format('woff2');} 1274@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Inter/Inter-SemiBold.woff2') format('woff2');} 1275@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:fallback;src:url('https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/fonts/Inter/Inter-Bold.woff2') format('woff2');} 1276</style> 1277<link rel="icon" href="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/10/cropped-rm_square-32x32.avif" sizes="32x32" /> 1278<link rel="icon" href="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/10/cropped-rm_square-192x192.avif" sizes="192x192" /> 1279<link rel="apple-touch-icon" href="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/10/cropped-rm_square-180x180.avif" /> 1280<meta name="msapplication-TileImage" content="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/10/cropped-rm_square-270x270.avif" /> 1281<style id="om-hide-questions">.wp-otavamedia-tuuma-section__examples-marquee, .wp-otavamedia-tuuma-section__examples{display:none !important;}</style><noscript><style id="rocket-lazyload-nojs-css">.rll-youtube-player, [data-lazy-src]{display:none !important;}</style></noscript><meta name="generator" content="WP Rocket 3.19.0.1" data-wpr-features="wpr_lazyload_iframes wpr_image_dimensions" /></head> 1282 1283<body class="wp-singular page-template-default page page-id-400429 page-parent wp-custom-logo wp-embed-responsive wp-theme-om-block-theme is-rakennusmaailma"> 1284<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 1284-1285
1284 1285<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1285GTM-TW96FBK
vendor: 85 bytes, lines 1285-1286
1285" 1286height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1287<!-- End Google Tag Manager (noscript) --> 1288
1289<script> 1290 dfp.adLocation = jQuery('body').attr('class').includes('home') ? 'frontpage' : 'content'; 1291</script>
1291 1292<div data-rocket-location-hash="059e3a0750ccb8acf148a210a883cc7e" class="wp-site-blocks"><header data-rocket-location-hash="7f0913a87c02db6f0726eba69c9bf391" class="wp-block-template-part"> 1293<div data-rocket-location-hash="1c69bb94e6348d35d21b2fa3208ca2a5" class="wp-block-group font-(family-name:--wp--preset--font-family--flama-medium) hidden lg:block is-layout-constrained wp-block-group-is-layout-constrained"> 1294<div class="wp-block-group alignwide site-top-bar is-content-justification-right is-nowrap is-layout-flex wp-container-core-group-is-layout-fd526d70 wp-block-group-is-layout-flex"> 1295<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex"> 1296<div class="wp-block-button is-style-no_background"><a class="wp-block-button__link wp-element-button" href="/toimituksen-yhteystiedot/">Toimitus</a></div> 1297 1298 1299 1300<div class="wp-block-button is-style-no_background"><a class="wp-block-button__link wp-element-button" href="https://tilaus.rakennusmaailma.fi/tilaus?promoID=OM_tilaa-painike&promoName=OM_RM&promoCreative=onlinetarjous&promoPosition=header-single">Tilaa lehti</a></div> 1301</div> 1302 1303 1304 1305<ul class="wp-block-social-links has-icon-background-color is-layout-flex wp-block-social-links-is-layout-flex"><li style="background-color:#979797;" class="wp-social-link wp-social-link-facebook has-dark-grey-background-color wp-block-social-link"><a href="https://www.facebook.com/tmrakennusmaailma/" class="wp-block-social-link-anchor"><img decoding="async" width="27" height="27" class="Icons_no-hover" role="presentation" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/footer-facebook.svg" alt=""> 1306 <img decoding="async" width="27" height="27" class="Icons_hover" role="presentation" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/footer-facebook-hover.svg" alt=""><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li> 1307 1308<li style="background-color:#979797;" class="wp-social-link wp-social-link-youtube has-dark-grey-background-color wp-block-social-link"><a href="https://www.youtube.com/@TMrakennusmaailma." class="wp-block-social-link-anchor"><img decoding="async" width="27" height="27" class="Icons_no-hover" role="presentation" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/footer-youtube.svg" alt=""> 1309 <img decoding="async" width="27" height="27" class="Icons_hover" role="presentation" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/footer-youtube-hover.svg" alt=""><span class="wp-block-social-link-label screen-reader-text">YouTube</span></a></li> 1310 1311<li style="background-color:#979797;" class="wp-social-link wp-social-link-instagram has-dark-grey-background-color wp-block-social-link"><a href="https://www.instagram.com/tm_rakennusmaailma/" class="wp-block-social-link-anchor"><img decoding="async" width="27" height="27" class="Icons_no-hover" role="presentation" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/footer-instagram.svg" alt=""> 1312 <img decoding="async" width="27" height="27" class="Icons_hover" role="presentation" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/footer-instagram-hover.svg" alt=""><span class="wp-block-social-link-label screen-reader-text">Instagram</span></a></li></ul> 1313 1314 1315 1316 1317<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex"> 1318 1319 <div class="wp-block-button font-bold is-style-outline is-style-outline--1"><a class="wp-block-button__link wp-element-button" href="https://rakennusmaailma.fi?option=oauthredirect&app_name=openid2&redirect_url=https%3A%2F%2Frakennusmaailma.fi%2Ftestit">Kirjaudu</a></div> 1320 1321</div> 1322 1323</div> 1324</div> 1325 1326 1327 1328<div data-rocket-location-hash="4c63b85b81fd72b02a30b6006a48c38a" class="wp-block-group js-header-sticky-group header-sticky-group font-(family-name:--wp--preset--font-family--flama-medium) !sticky top-0 z-50 has-primary-background-color has-background is-layout-constrained wp-block-group-is-layout-constrained"> 1329<div class="wp-block-group alignwide justify-end is-content-justification-right is-nowrap is-layout-flex wp-container-core-group-is-layout-fd526d70 wp-block-group-is-layout-flex"> 1330<div class="wp-block-group js-site-logo-group site-logo-group group/site-logo has-primary-background-color has-background is-layout-constrained wp-block-group-is-layout-constrained"><div class="aligncenter wp-block-site-logo"><a href="https://rakennusmaailma.fi/" class="custom-logo-link" rel="home"><img width="768" height="541" src="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/10/rakennusmaailma-mobile-logo.svg" class="js-desktop-scroll-logo desktop-scroll-logo hidden max-sm:block lg:hidden max-h-[40px] w-auto sm:ml-[3.5rem] group-[.use-scroll-logo]/site-logo:lg:block" alt="" decoding="async" fetchpriority="high" /><img width="768" height="541" src="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/10/rakennusmaailma-mobile-logo.svg" class="js-mobile-logo block max-sm:hidden lg:hidden max-h-[40px] w-auto" alt="" decoding="async" /><span class="sr-only">Siirry etusivulle</span><img width="120" height="84" src="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2025/09/tm-rm-1.svg" class="custom-logo js-desktop-logo hidden lg:block lg:w-[170px] group-[.use-scroll-logo]/site-logo:hidden" alt="TM Rakennusmaailma" decoding="async" /></a></div></div> 1331 1332 1333<nav class="is-responsive items-justified-left no-wrap wp-block-navigation wp-container-content-9cfa9a5a is-horizontal is-content-justification-left is-nowrap is-layout-flex wp-container-core-navigation-is-layout-e0598304 wp-block-navigation-is-layout-flex" aria-label="Navigaatio: Ylätunniste 3" 1334 data-wp-interactive="core/navigation" data-wp-context='{"overlayOpenedBy":{"click":false,"hover":false,"focus":false},"type":"overlay","roleAttribute":"","ariaLabel":"Valikko"}'><button aria-haspopup="dialog" aria-label="Avaa valikko" class="wp-block-navigation__responsive-container-open" 1335 data-wp-on--click="actions.openMenuOnClick" 1336 data-wp-on--keydown="actions.handleMenuKeydown" 1337 ><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
1337<path d="M5 5v1.5h14V5H5z"></path><path d="M5 12.8h14v-1.5H5v1.5z"></path><path d="M5 19h14v-1.5H5V19z"></path></svg></button><button aria-label="Sulje valikko" class="wp-block-navigation__responsive-container-close extra" data-wp-on--click="actions.closeMenuOnClick"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M5 5v1.5h14V5H5z"></path><path d="M5 12.8h14v-1.5H5v1.5z"></path><path d="M5 19h14v-1.5H5V19z"></path></svg></button> 1338 <div class="wp-block-navigation__responsive-container" id="modal-2" 1339 data-wp-class--has-modal-open="state.isMenuOpen" 1340 data-wp-class--is-menu-open="state.isMenuOpen" 1341 data-wp-watch="callbacks.initMenu" 1342 data-wp-on--keydown="actions.handleMenuKeydown" 1343 data-wp-on--focusout="actions.handleMenuFocusout" 1344 tabindex="-1" 1345 > 1346 <div class="wp-block-navigation__responsive-close" tabindex="-1"> 1347 <div class="wp-block-navigation__responsive-dialog" 1348 data-wp-bind--aria-modal="state.ariaModal" 1349 data-wp-bind--aria-label="state.ariaLabel" 1350 data-wp-bind--role="state.roleAttribute" 1351 > 1352 <button aria-label="Sulje valikko" class="wp-block-navigation__responsive-container-close" 1353 data-wp-on--click="actions.closeMenuOnClick" 1354 ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" focusable="false"><path d="m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z"></path></svg></button> 1355 <div class="wp-block-navigation__responsive-container-content" 1356 data-wp-watch="callbacks.focusFirstElement" 1357 id="modal-2-content"> 1358 <ul class="wp-block-navigation__container is-responsive items-justified-left no-wrap wp-block-navigation"><li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/kategoria/vinkit/"><span class="wp-block-navigation-item__label">Vinkit</span></a></li><li class=" wp-block-navigation-item current-menu-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://rakennusmaailma.fi/testit/" aria-current="page"><span class="wp-block-navigation-item__label">Testit</span></a></li><li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="/kategoria/rakentaminen"><span class="wp-block-navigation-item__label">Rakentaminen</span></a></li><li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://rakennusmaailma.fi/kategoria/remontointi/"><span class="wp-block-navigation-item__label">Remontointi</span></a></li><li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://rakennusmaailma.fi/kategoria/asuminen/"><span class="wp-block-navigation-item__label">Asuminen</span></a></li><li data-wp-context="{ "submenuOpenedBy": { "click": false, "hover": false, "focus": false }, "type": "submenu", "modal": null, "previousFocus": null }" data-wp-interactive="core/navigation" data-wp-on--focusout="actions.handleMenuFocusout" data-wp-on--keydown="actions.handleMenuKeydown" data-wp-on--mouseenter="actions.openMenuOnHover" data-wp-on--mouseleave="actions.closeMenuOnHover" data-wp-watch="callbacks.initMenu" tabindex="-1" class="wp-block-navigation-item has-child open-on-hover-click wp-block-navigation-submenu"><a class="wp-block-navigation-item__content" href="https://rakennusmaailma.fi/digilehdet/"><span class="wp-block-navigation-item__label">Digilehdet</span></a><button data-wp-bind--aria-expanded="state.isMenuOpen" data-wp-on--click="actions.toggleMenuOnClick" aria-label="Digilehdet alavalikko" class="wp-block-navigation__submenu-icon wp-block-navigation-submenu__toggle" ><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg></button><ul data-wp-on--focus="actions.openMenuOnFocus" class="wp-block-navigation__submenu-container wp-block-navigation-submenu"><li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://rakennusmaailma.fi/digilehdet/teemalehdet/"><span class="wp-block-navigation-item__label">Teemalehdet</span></a></li></ul></li><li class=" wp-block-navigation-item wp-block-navigation-link"><a class="wp-block-navigation-item__content" href="https://rakennusmaailma.fi/arkisto/"><span class="wp-block-navigation-item__label">Näköislehti</span></a></li></ul> 1359 </div> 1360 </div> 1361 </div>
1362 </div></nav> 1363 1364 1365 1366<div class="wp-block-buttons ml-auto is-layout-flex wp-block-buttons-is-layout-flex"> 1367 1368 <div class="wp-block-button is-style-no_background no-caret lg:!hidden"><a class="wp-block-button__link wp-element-button" href="https://rakennusmaailma.fi?option=oauthredirect&app_name=openid2&redirect_url=https%3A%2F%2Frakennusmaailma.fi%2Ftestit"><span class="sr-only">Kirjaudu sisään</span><img width="24" height="24" decoding="async" class="!mr-0" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/person.svg" alt=""></a></div> 1369 1370 1371<div class="wp-block-button is-style-no_background no-caret js-toggle-search toggle-search"><a class="wp-block-button__link wp-element-button" href="#"><span class="sr-only">Näytä hakupalkki</span><img decoding="async" width="32" height="23" class="!mr-0" style="width: 32px;" src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/assets/images/search-icon.svg" alt="Suurennuslasikuvake"></a></div> 1372 1373</div> 1374 1375</div> 1376</div> 1377 1378 1379 1380<div data-rocket-location-hash="362e89dc9e38f84f5a7e8c01b4521b43" class="wp-block-group alignfull js-header-search header-search has-primary-background-color has-background hidden is-layout-constrained wp-block-group-is-layout-constrained"> 1381<div data-rocket-location-hash="cb7825e92c34b35ea6d18d1a2179dae6" class="wp-block-group alignwide is-content-justification-space-between is-nowrap is-layout-flex wp-container-core-group-is-layout-0dfbf163 wp-block-group-is-layout-flex"> 1382 1383<div class="header-tuuma-toggle"> 1384 <label class="js-toggle-tuuma block" for="normal_search"> 1385 <input type="radio" id="normal_search" class="header-search-is-tuuma" name="is_tuuma_search" value="true" checked="checked"> 1386 1387 <img decoding="async" width="205" height="59" class="hidden lg:block" src="https://rakennusmaailma.fi/wp-content/plugins/om-rakennusmaailma-theme-mods/assets/images/tuuma-desktop-off.png" /> 1388 <img decoding="async" width="72" height="56" class="block lg:hidden max-w-[4.5rem]" src="https://rakennusmaailma.fi/wp-content/plugins/om-rakennusmaailma-theme-mods/assets/images/tuuma-mobile-off.png" /> 1389 1390 <span class="sr-only"> 1391 Do normal search </span> 1392 </label> 1393 1394 <label class="js-toggle-tuuma block hidden" for="tuuma_search"> 1395 <input type="radio" id="tuuma_search" class="header-search-is-tuuma" name="is_tuuma_search" value="false"> 1396 1397 <img decoding="async" width="205" height="59" class="hidden lg:block" src="https://rakennusmaailma.fi/wp-content/plugins/om-rakennusmaailma-theme-mods/assets/images/tuuma-desktop-on.png" /> 1398 <img decoding="async" width="72" height="56" class="block lg:hidden max-w-[4.5rem]" src="https://rakennusmaailma.fi/wp-content/plugins/om-rakennusmaailma-theme-mods/assets/images/tuuma-mobile-on.png" /> 1399 1400 <span class="sr-only"> 1401 Do tuuma search </span> 1402 </label> 1403</div> 1404 1405<div class="header-search-inputs flex"> 1406 <div class="js-form-container form-container" data-attr-search-type="normal_search"> 1407 <div id="dynamic-search-header" class="load-more__list"></div> 1408 1409
1409<script> 1410 window.omPreactComponents.renderComponent( 1411 "#dynamic-search-header", 1412 "Search", 1413 {"cache":{"responseId":"dcb44ee4b0c38040521527c09683bde5"},"api":{"baseUrl":"https:\/\/search-otava.fi\/search\/search","perPage":"10","brand":"Rakennusmaailma","preference":"_local","include":"ALL"},"form":{"formName":"AutocompleteSearchForm","allowMultipleTags":false,"formFiltersAreVisible":false,"componentVisibility":{"toggleFilters":false,"tagsField":false,"dateField":false,"sourceField":false,"buttons":false,"sortingWidget":false,"categoryDropdown":false},"sources":[],"tags":[],"categories":[]},"template":{"templateName":"ListItem","linkToPost":true}} ); 1414 </script>
1414 1415 1416 </div> 1417 1418 <div class="js-form-container form-container hidden" data-attr-search-type="tuuma_search"> 1419 <form action="https://rakennusmaailma.fi/tuuma" method="get"> 1420 <input type="text" name="question" /> 1421 1422 <button class="js-header-search-submit header-search-submit"> 1423 <span class="sr-only"> 1424 Search </span> 1425 1426 <svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="30 8 45 32"> 1427 <defs> 1428 <style> 1429 .st0 { 1430 fill: #E4001E; 1431 } 1432 1433 </style> 1434 </defs> 1435 <g class="st2"> 1436 <path class="st0" d="M44.1,31c-5.7,0-10.3-4.6-10.3-10.3s4.6-10.3,10.3-10.3,10.3,4.6,10.3,10.3-4.6,10.3-10.3,10.3ZM44.1,12.9c-4.3,0-7.8,3.5-7.8,7.8s3.5,7.8,7.8,7.8,7.8-3.5,7.8-7.8-3.5-7.8-7.8-7.8Z"/> 1437 <path class="st0" d="M60.2,37c-.3,0-.6-.1-.9-.4l-8.8-8.8c-.5-.5-.5-1.3,0-1.8.5-.5,1.3-.5,1.8,0l8.8,8.8c.5.5.5,1.3,0,1.8-.2.2-.6.4-.9.4Z"/> 1438 </g> 1439 </svg> 1440 </button> 1441 </form> 1442 </div> 1443 1444</div> 1445 1446<button class="js-toggle-search header-search-toggle hidden lg:flex"> 1447 <span class="x" aria-hidden="true"> 1448 + 1449 </span> 1450 1451 Sulje haku</button> 1452</div> 1453 1454<div class="js-mobile-white-overlay fixed block lg:hidden h-full w-full z-50 bg-(--white) !max-w-none"></div> 1455</div> 1456 1457 1458</header> <!-- wp:group {"className":"om-top-banner","layout":{"type":"constrained"}} --> 1459 <div data-rocket-location-hash="64c9b40943225849288b0d2aa4ac260a" class="wp-block-group om-top-banner"> 1460 <!-- wp:list --> 1461 <ul class="wp-block-list"> 1462 <!-- wp:list-item {"className":"om-top-banner__lift"} --> 1463 <li class="om-top-banner__lift"> 1464 <a href="https://rakennusmaailma.fi/tule-mukaan-tm-rakennusmaailman-lukijayhteisoon/"> 1465 <span class="om-top-banner__lift-vinjet"> 1466 Vaikuta lehden sisältöön! </span> 1467 <span class="om-top-banner__lift-title"> 1468 Tule mukaan TM Rakennusmaailman lukijayhteisöön! </span> 1469 </a> 1470 </li> 1471 <!-- /wp:list-item --> 1472 </ul> 1473 <!-- /wp:list --> 1474 </div> 1475 <!-- /wp:group --> 1476 1477 1478<div data-rocket-location-hash="e87b011eafc2c18746374d02f7fb31e3" id="main-content" class="entry-content alignfull aligndefault wp-block-post-content is-layout-constrained wp-container-core-post-content-is-layout-f74b343f wp-block-post-content-is-layout-constrained"> 1479<header data-rocket-location-hash="d39476310680e1f4115cf128bf5397a4" class="wp-block-group article-header alignfull article-header--text-below-media"> 1480 <figure class="wp-block-image article-featured-image alignfull"><img decoding="async" src="https://rakennusmaailma.fi/wp-content/uploads/sites/3/2000/06/vertailut-ja-testit-scaled.jpg" alt="" width="2560" height="1598" class="wp-image-329781" loading="eager" fetchpriority="high"/><figcaption class="wp-element-caption is-layout-flow wp-block-group-is-layout-flow">TM TESTI – Työkalupakit: Biltema 7102, FXA 62, Stanley STST1-72734, Wisent WHL 81, 8.6.2017. © Tommi Tuomi/Otavamedia</figcaption></figure> 1481 <div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained"> 1482 1483 <div class="wp-block-group article-over-cover"> 1484 <div class="extra-vignette is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-48c2c4f0 wp-block-group-is-layout-flex"></div> <h1 class="wp-block-post-title">Testit ja vertailut</h1> 1485 <div class="wp-block-post-excerpt"><p class="wp-block-post-excerpt__excerpt">Täältä löydät TM Rakennusmaailman pikakokeita, testejä ja vertailuja. </p></div> 1486 </div> 1487 1488 </div> 1489 1490</header> 1491 1492 1493 1494 1495<div data-rocket-location-hash="da48a6fff77d7f363f03f4804ae35aca" class="wp-block-group alignwide is-content-justification-space-between is-nowrap is-layout-flex wp-container-core-group-is-layout-0dfbf163 wp-block-group-is-layout-flex"> 1496<h2 class="wp-block-heading" style="margin-top:0">Työkalut ja rakentaminen</h2> 1497 1498 1499 1500<div class="wp-block-buttons is-content-justification-space-between is-layout-flex wp-container-core-buttons-is-layout-3d213aab wp-block-buttons-is-layout-flex"> 1501<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="/testit/tyokalut-ja-rakentaminen/">Näytä kaikki</a></div> 1502</div> 1503</div> 1504 1505 1506<section 1507 data-wp-context='{"posts":[],"page":1,"showButton":true,"order":"desc","selectedCategories":"2614","postsPerPage":12,"presetCategoryId":"","tagTermId":"","showFilters":false,"allTermIds":"2614","blockId":"om-test-filter-d7eff7fe-760c-4502-8ebb-3c632fe10c3a","categoryAndTermId":""}' 1508 class="wp-block-otavamedia-om-block-test-filter" data-wp-interactive="om-block-test-filter/posts" 1509 data-wp-init="actions.init" 1510> 1511 1512 <ul class="test-post-results"> 1513 <template data-wp-each--post="context.posts"> 1514 <li class="js-test-post-result wp-block-post" data-wp-bind--data-attr-post-id="context.post.id" data-wp-init="callbacks.postHtmlInit"> 1515 <a data-wp-bind--href="context.post.permalink"> 1516 <div class="js-test-post-result-header"></div> 1517 1518 <div class="text-content"> 1519 <div data-wp-bind--hidden="!context.post.digimagazine" class="magazine-label flex bg-(--wp--preset--color--primary) max-h-[1.125rem] rounded-[0.125rem] p-[0.25rem] font-(family-name:--wp--preset--font-family--flama) gap-[0.125rem] text-[0.625rem] leading-[1] tracking-[0.019rem] text-(--white)"> 1520 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 176 144" class="w-[1rem] h-[0.8125rem]"><defs><style>.cls-1{fill:#fff;}</style></defs><title>Artboard 1</title><path class="cls-1" d="M161,96.67a2.39,2.39,0,0,1-2.59,2.44H134.78V74l-16,22.86a6,6,0,0,1-4.27,2.23H90.16V74L74,96.88a5.87,5.87,0,0,1-4.54,2.23H42.84L93.18,22.68a4.89,4.89,0,0,1,4.06-2.09H115v32L137,22.69a5.4,5.4,0,0,1,4.34-2.1H161ZM11.38,43.93l6.23-20.36a4.49,4.49,0,0,1,4.33-3H80.43l-6.63,21a3.12,3.12,0,0,1-3.2,2.3H56.75L39,96.53a4,4,0,0,1-3.61,2.58H10.1L28.86,43.93Z"/></svg> 1521
1522 <span data-wp-text="context.post.digimagazine"></span> 1523 </div> 1524 1525 <div class="card-meta"> 1526 <div class="taxonomy-category wp-block-post-terms" data-wp-text="context.post.top_level_category.name"></div> 1527 1528 <div class="wp-block-post-date"> 1529 <time data-wp-bind--datetime="context.post.date.post_date" data-wp-text="context.post.date.post_date_string"></time> 1530 </div> 1531 1532 <div class="for-susbcribers flex items-center sm:!ml-auto gap-[0.25rem]" data-wp-bind--hidden="!context.post.is_paid"> 1533 <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"> 1534 <path fill="#009FE3" fill-rule="evenodd" d="M7.016 0l-.71 2.313H3.906L5.839 3.81l-.476 1.507H3.836L3.11 3.004l-.709 2.313H0l1.936 1.497-.751 2.373L3.11 7.724l1.232.936-.452 1.469h-2.4l1.934 1.498L2.675 14 4.6 12.538 6.528 14l-.759-2.373 1.22-.936 1.205.933-.75 2.374 1.926-1.463 1.927 1.463-.76-2.374 1.952-1.496h-2.394L9.63 8.64l1.251-.948 1.926 1.463-.76-2.374L14 5.284h-2.393L10.88 2.97l-.71 2.314H8.655L8.183 3.81l1.952-1.497H7.742L7.016 0zM4.308 6.533l2.738-2.091 2.687 2.06L8.69 9.847H5.356L4.308 6.534z"/> 1535 </svg> 1536 1537 <span class="text-(length:--font-size-step--2) text-(--dark-grey) font-(family-name:--wp--preset--font-family--flama-medium) tracking-[0.01875rem]">Tilaajille</span> 1538 </div> 1539 </div> 1540 1541 <h2 class="wp-block-post-title" data-wp-text="context.post.title"></h2> 1542 </div> 1543 </a> 1544 </li> 1545 </template> 1546 </ul> 1547 </section> 1548 1549 1550 1551<div class="wp-block-group alignwide is-content-justification-space-between is-nowrap is-layout-flex wp-container-core-group-is-layout-0dfbf163 wp-block-group-is-layout-flex"> 1552<h2 class="wp-block-heading" style="margin-top:0">Kodintekniikka</h2> 1553 1554 1555 1556<div class="wp-block-buttons is-content-justification-space-between is-layout-flex wp-container-core-buttons-is-layout-3d213aab wp-block-buttons-is-layout-flex"> 1557<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="/testit/kodintekniikka/">Näytä kaikki</a></div> 1558</div> 1559</div> 1560 1561 1562<section 1563 data-wp-context='{"posts":[],"page":1,"showButton":true,"order":"desc","selectedCategories":"2613","postsPerPage":12,"presetCategoryId":"","tagTermId":"","showFilters":false,"allTermIds":"2613","blockId":"om-test-filter-e4d4335a-91e2-4a26-95c0-e8796ca104f7","categoryAndTermId":""}' 1564 class="wp-block-otavamedia-om-block-test-filter" data-wp-interactive="om-block-test-filter/posts" 1565 data-wp-init="actions.init" 1566> 1567 1568 <ul class="test-post-results"> 1569 <template data-wp-each--post="context.posts"> 1570 <li class="js-test-post-result wp-block-post" data-wp-bind--data-attr-post-id="context.post.id" data-wp-init="callbacks.postHtmlInit"> 1571 <a data-wp-bind--href="context.post.permalink"> 1572 <div class="js-test-post-result-header"></div> 1573 1574 <div class="text-content"> 1575 <div data-wp-bind--hidden="!context.post.digimagazine" class="magazine-label flex bg-(--wp--preset--color--primary) max-h-[1.125rem] rounded-[0.125rem] p-[0.25rem] font-(family-name:--wp--preset--font-family--flama) gap-[0.125rem] text-[0.625rem] leading-[1] tracking-[0.019rem] text-(--white)"> 1576 <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 176 144" class="w-[1rem] h-[0.8125rem]"><defs><style>.cls-1{fill:#fff;}</style></defs><title>Artboard 1</title><path class="cls-1" d="M161,96.67a2.39,2.39,0,0,1-2.59,2.44H134.78V74l-16,22.86a6,6,0,0,1-4.27,2.23H90.16V74L74,96.88a5.87,5.87,0,0,1-4.54,2.23H42.84L93.18,22.68a4.89,4.89,0,0,1,4.06-2.09H115v32L137,22.69a5.4,5.4,0,0,1,4.34-2.1H161ZM11.38,43.93l6.23-20.36a4.49,4.49,0,0,1,4.33-3H80.43l-6.63,21a3.12,3.12,0,0,1-3.2,2.3H56.75L39,96.53a4,4,0,0,1-3.61,2.58H10.1L28.86,43.93Z"/></svg> 1577
1578 <span data-wp-text="context.post.digimagazine"></span> 1579 </div> 1580 1581 <div class="card-meta"> 1582 <div class="taxonomy-category wp-block-post-terms" data-wp-text="context.post.top_level_category.name"></div> 1583 1584 <div class="wp-block-post-date"> 1585 <time data-wp-bind--datetime="context.post.date.post_date" data-wp-text="context.post.date.post_date_string"></time> 1586 </div> 1587 1588 <div class="for-susbcribers flex items-center sm:!ml-auto gap-[0.25rem]" data-wp-bind--hidden="!context.post.is_paid"> 1589 <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"> 1590 <path fill="#009FE3" fill-rule="evenodd" d="M7.016 0l-.71 2.313H3.906L5.839 3.81l-.476 1.507H3.836L3.11 3.004l-.709 2.313H0l1.936 1.497-.751 2.373L3.11 7.724l1.232.936-.452 1.469h-2.4l1.934 1.498L2.675 14 4.6 12.538 6.528 14l-.759-2.373 1.22-.936 1.205.933-.75 2.374 1.926-1.463 1.927 1.463-.76-2.374 1.952-1.496h-2.394L9.63 8.64l1.251-.948 1.926 1.463-.76-2.374L14 5.284h-2.393L10.88 2.97l-.71 2.314H8.655L8.183 3.81l1.952-1.497H7.742L7.016 0zM4.308 6.533l2.738-2.091 2.687 2.06L8.69 9.847H5.356L4.308 6.534z"/> 1591 </svg> 1592 1593 <span class="text-(length:--font-size-step--2) text-(--dark-grey) font-(family-name:--wp--preset--font-family--flama-medium) tracking-[0.01875rem]">Tilaajille</span> 1594 </div> 1595 </div> 1596 1597 <h2 class="wp-block-post-title" data-wp-text="context.post.title"></h2> 1598 </div> 1599 </a> 1600 </li> 1601 </template> 1602 </ul> 1603 </section> 1604</div> 1605</div>
1606<script type="speculationrules"> 1607{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/3/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/om-block-theme/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 1608</script>
1608 1609
1609<script> 1610 function convert_to_url(obj) { 1611 return Object 1612 .keys(obj) 1613 .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`) 1614 .join('&'); 1615 } 1616 1617 function pass_to_backend() { 1618 if(window.location.hash) { 1619 var hash = window.location.hash; 1620 var elements = {}; 1621 hash.split("#")[1].split("&").forEach(element => { 1622 var vars = element.split("="); 1623 elements[vars[0]] = vars[1]; 1624 }); 1625 if(("access_token" in elements) || ("id_token" in elements) || ("token" in elements)) { 1626 if(window.location.href.indexOf("?") !== -1) { 1627 window.location = (window.location.href.split("?")[0] + window.location.hash).split('#')[0] + "?" + convert_to_url(elements); 1628 } else { 1629 window.location = window.location.href.split('#')[0] + "?" + convert_to_url(elements); 1630 } 1631 } 1632 } 1633 } 1634 1635 pass_to_backend(); 1636 </script>
1636 1637 1638
1639<script type="text/javascript"> 1640 jQuery( function() { 1641 try { 1642 AsteikkoAuth.init( "https:\/\/rakennusmaailma.fi\/" ); 1643 } catch( e ) { 1644 if ( window.console && console.error ) 1645 console.error( e ); 1646 } 1647 } ); 1648</script>
1648 1649<div data-rocket-location-hash="222b77c9e3b3be6faf35a8efb8bc8f94" class="om-footer"> 1650 <div data-rocket-location-hash="3e0e4c81c7cd3242d43480c7c0b859d2" class="om-footer__columns"> 1651 <div data-rocket-location-hash="7d8d3e49e3e61af1f1e014c9e9f3d50b" class="om-footer__columns-inner"> 1652 <div class="om-footer__column"> 1653 <h2 class="om-footer__column-title"> 1654 Asiakaspalvelu </h2> 1655 <div class="om-footer__column-content"> 1656 <p>Digipalvelut (09) 156 6227<br /> 1657Avoinna maâpe 8â19</p> 1658<p>Painettu lehti 010 190 094<br /> 1659Avoinna maâpe 8â19</p> 1660<p>Otavamedian vaihde (09) 156 61</p> 1661<p>Sähköposti (digi)<br /> 1662[email protected]<br /> 1663Sähköposti<br /> 1664[email protected]</p> 1665 </div> 1666 </div> 1667 <div class="om-footer__column"> 1668 <h2 class="om-footer__column-title"> 1669 Postiosoite </h2> 1670 <div class="om-footer__column-content"> 1671 <p>Pasilanraitio 5<br /> 167200015 OTAVAMEDIA</p> 1673<p><a href="https://otavamedia.fi/tietosuoja/?sid=ac131d13-aae6-cf97-cab7-ee4800240dab" target="_blank" rel="noreferrer noopener">Tietoa evästeiden käytöstä</a><br /> 1674<a href="http://www.youronlinechoices.com/fi/" target="_blank" rel="noreferrer noopener">Käyttäytymiseen perustuva mainonta</a><br /> 1675<a href="https://rakennusmaailma.fi/">Evästeasetukset</a></p> 1676 </div> 1677 </div> 1678 <div class="om-footer__column"> 1679 <h2 class="om-footer__column-title"> 1680 Mediatiedot </h2> 1681 <div class="om-footer__column-content"> 1682 <p><a href="https://yrityksille.otavamedia.fi/tekniset-tiedot-ja-hinnat/" target="_blank" rel="noreferrer noopener">Tekniset tiedot, aikataulut ja ilmoitushinnat</a><br /> 1683<a href="https://yrityksille.otavamedia.fi/reaaliaikainen-kayttajatieto/" target="_blank" rel="noreferrer noopener">Tietoa verkon kävijöistä</a><br /> 1684<a href="https://otavamedia.fi/tietosuoja/?sid=ac131d13-aae6-cf97-cab7-ee4800240dab" target="_blank" rel="noreferrer noopener">Rekisteriseloste</a><br /> 1685<a href="https://otavamedia.fi/tilaus-ja-kayttoehdot/" target="_blank" rel="noreferrer noopener">Käyttöehdot</a></p> 1686 </div> 1687 <h2 class="om-footer__column-title"> 1688 Tuotteet </h2> 1689 <div class="om-footer__column-content"> 1690 <p><a href="https://otavamedia.fi/tuotteet-ja-edut/tutustu-ja-tilaa/" target="_blank" rel="noreferrer noopener">Aikakauslehdet</a><br /> 1691<a href="https://otavamedia.fi/tuotteet-ja-edut/tutustu-ja-tilaa/?query-25-product_category=verkkopalvelut" target="_blank" rel="noreferrer noopener">Verkkopalvelut</a><br /> 1692<a href="https://otavamedia.fi/tuotteet-ja-edut/tutustu-ja-tilaa/?query-25-product_category=digipalvelut" target="_blank" rel="noreferrer noopener">Digilehdet</a></p> 1693 </div> 1694 </div> 1695 <div class="om-footer__column"> 1696 <h2 class="om-footer__column-title"> 1697 Ota yhteyttä </h2> 1698 <div class="om-footer__column-content"> 1699 <p><a href="https://asiointipalvelu.otavamedia.fi/omat/tilaukset" target="_blank" rel="noreferrer noopener">Tilausmuutokset</a><br /> 1700<a href="https://rakennusmaailma.fi/anna-palautetta" target="_blank" rel="noreferrer noopener">Palautelomake</a><br /> 1701<a href="https://rakennusmaailma.fi/usein-kysyttyja-kysymyksia-rmn-verkkopalvelusta/" target="_blank" rel="noreferrer noopener">Usein kysytyt kysymykset</a><br /> 1702Sähköpostiosoitteet:<br /> 1703[email protected]</p> 1704<h2 class="social-media-title">Sosiaalinen media</h2> 1705<div class="Footer_social-links"><a href="https://www.facebook.com/tmrakennusmaailma/" target="blank"><img loading="lazy" class="Icons_no-hover" role="presentation" src="/wp-content/themes/om-block-theme/assets/images/footer-facebook.svg" alt="" width="27" height="27" /><img loading="lazy" class="Icons_hover" role="presentation" src="/wp-content/themes/om-block-theme/assets/images/footer-facebook-hover.svg" alt="" width="27" height="27" /><span class="sr-only">Rakennusmaailma Facebookissa</span></a><a href="https://www.youtube.com/@TMrakennusmaailma" target="blank">
1705<img loading="lazy" class="Icons_no-hover" role="presentation" src="/wp-content/themes/om-block-theme/assets/images/footer-youtube.svg" alt="" width="27" height="27" /><img loading="lazy" class="Icons_hover" role="presentation" src="/wp-content/themes/om-block-theme/assets/images/footer-youtube-hover.svg" alt="" width="27" height="27" /><span class="sr-only">Rakennusmaailma YouTubessa</span></a><a href="https://www.instagram.com/tm_rakennusmaailma/" target="blank"><img loading="lazy" class="Icons_no-hover" role="presentation" src="/wp-content/themes/om-block-theme/assets/images/footer-instagram.svg" alt="" width="27" height="27" /><img loading="lazy" class="Icons_hover" role="presentation" src="/wp-content/themes/om-block-theme/assets/images/footer-instagram-hover.png" alt="" width="27" height="27" /><span class="sr-only">Rakennusmaailma Instagramissa</span></a></div> 1706<div class="wp-block-buttons is-layout-flex wp-container-core-buttons-is-layout-3 wp-block-buttons-is-layout-flex"> 1707<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://rakennusmaailma.fi/toimituksen-yhteystiedot/">Toimitus</a></div> 1708<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://rakennusmaailma.fi/tilaa/?sid=9ce9b26c-38f9-a9e2-c972-0ead2bd0fb56">Tilaa lehti</a></div> 1709</div> 1710 </div> 1711 </div> 1712 </div> 1713 </div> 1714 </div> 1715
1716<script type="module" src="https://rakennusmaailma.fi/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js?ver=b0f909c3ec791c383210" id="@wordpress/block-library/navigation/view-js-module" fetchpriority="low" data-wp-router-options="{"loadOnClientNavigation":true}"></script>
vendor: 1 bytes, line 1716
1716
1717<script type="module" src="https://rakennusmaailma.fi/wp-content/plugins/om-block-test-filter/build/om-block-test-filter/view.js?ver=69253973db1504325144" id="otavamedia-om-block-test-filter-view-script-module-js-module" fetchpriority="low" data-wp-router-options="{"loadOnClientNavigation":true}"></script>
vendor: 1 bytes, line 1717
1717
1718<script src="https://rakennusmaailma.fi/wp-content/cache/asauth/fi_blog3.js?ver=1" id="asteikko-auth-lang-fi-js"></script>
vendor: 1 bytes, line 1718
1718
1719<script src="https://rakennusmaailma.fi/wp-content/plugins/om-asteikko-auth-wp-plugin/js/asteikko-auth.js?ver=1.5.9" id="asteikko-auth-js"></script>
vendor: 1 bytes, line 1719
1719
1720<script src="https://rakennusmaailma.fi/wp-content/plugins/asteikko-mag/dist/wp-widgets/index.js?ver=6.21.2-0c797b1a9ed13eb8dd863a1165181f5f" id="asmag_widgets_js-js"></script>
vendor: 1 bytes, line 1720
1720
1721<script id="wp-block-template-skip-link-js-after"> 1722 ( function() { 1723 var skipLinkTarget = document.querySelector( 'main' ), 1724 sibling, 1725 skipLinkTargetID, 1726 skipLink; 1727 1728 // Early exit if a skip-link target can't be located. 1729 if ( ! skipLinkTarget ) { 1730 return; 1731 } 1732 1733 /* 1734 * Get the site wrapper. 1735 * The skip-link will be injected in the beginning of it. 1736 */ 1737 sibling = document.querySelector( '.wp-site-blocks' ); 1738 1739 // Early exit if the root element was not found. 1740 if ( ! sibling ) { 1741 return; 1742 } 1743 1744 // Get the skip-link target's ID, and generate one if it doesn't exist. 1745 skipLinkTargetID = skipLinkTarget.id; 1746 if ( ! skipLinkTargetID ) { 1747 skipLinkTargetID = 'wp--skip-link--target'; 1748 skipLinkTarget.id = skipLinkTargetID; 1749 } 1750 1751 // Create the skip link. 1752 skipLink = document.createElement( 'a' ); 1753 skipLink.classList.add( 'skip-link', 'screen-reader-text' ); 1754 skipLink.id = 'wp-skip-link'; 1755 skipLink.href = '#' + skipLinkTargetID; 1756 skipLink.innerText = 'Siirry sisältöön'; 1757 1758 // Inject the skip link. 1759 sibling.parentElement.insertBefore( skipLink, sibling ); 1760 }() ); 1761 1762//# sourceURL=wp-block-template-skip-link-js-after 1763</script>
vendor: 1 bytes, line 1763
1763
1764<script id="wp-postviews-cache-js-extra"> 1765var viewsCacheL10n = {"shortinit_wp_load_url":"https://rakennusmaailma.fi/wp-content/plugins/wp-postviews-aste/postviews-shortinit.php","post_id":"400429"}; 1766//# sourceURL=wp-postviews-cache-js-extra 1767</script>
vendor: 1 bytes, line 1767
1767
1768<script src="https://rakennusmaailma.fi/wp-content/plugins/wp-postviews-aste/postviews-cache.js?ver=1.68" id="wp-postviews-cache-js"></script>
vendor: 1 bytes, line 1768
1768
1769<script src="https://rakennusmaailma.fi/wp-includes/js/dist/hooks.min.js?ver=dd5603f07f9220ed27f1" id="wp-hooks-js"></script>
vendor: 1 bytes, line 1769
1769
1770<script src="https://rakennusmaailma.fi/wp-includes/js/dist/i18n.min.js?ver=c26c3dc7bed366793375" id="wp-i18n-js"></script>
vendor: 1 bytes, line 1770
1770
1771<script id="wp-i18n-js-after"> 1772wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 1773//# sourceURL=wp-i18n-js-after 1774</script>
vendor: 1 bytes, line 1774
1774
1775<script id="om-main-js-extra"> 1776var mainSettings = {"restUrl":"https://rakennusmaailma.fi/wp-json/","searchPageUrl":"https://rakennusmaailma.fi/haku/","headerInputPlaceholders":[{"placeholder_text":"Kokeile kirjoittaa esimerkiksi ty\u00f6kalun merkki ja malli"},{"placeholder_text":"Voit etsi\u00e4 tietoakodinkonetesteist\u00e4mme"},{"placeholder_text":"Kirjoita esimerkiksi akkuk\u00e4ytt\u00f6iset raivaussahat"},{"placeholder_text":"Etsi remonttivinkkej\u00e4: kirjoita esimerkiksi tapetti pois"}]}; 1777//# sourceURL=om-main-js-extra 1778</script>
vendor: 1 bytes, line 1778
1778
1779<script id="om-main-js-translations"> 1780( function( domain, translations ) { 1781 var localeData = translations.locale_data[ domain ] || translations.locale_data.messages; 1782 localeData[""].domain = domain; 1783 wp.i18n.setLocaleData( localeData, domain ); 1784} )( "om-block-theme", {"translation-revision-date":"","generator":"WP-CLI\/2.12.0","source":"dist\/build\/assets\/om-main.DuRH_Gvv.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"fi","plural-forms":"nplurals=2; plural=(n != 1);"},"wrote":["kirjoitti"]}}} ); 1785//# sourceURL=om-main-js-translations 1786</script>
vendor: 1 bytes, line 1786
1786
1787<script src="https://rakennusmaailma.fi/wp-content/themes/om-block-theme/dist/build/assets/om-main.y9ksohc7.js" id="om-main-js"></script>
vendor: 1 bytes, line 1787
1787
1788<script src="https://rakennusmaailma.fi/wp-content/plugins/om-rakennusmaailma-theme-mods/build/theme-assets/index.js?ver=1790853005" id="om-rm-theme-frontend-scripts-js"></script>
1788 1789<!-- Body end tag start, do not remove --> 1790 1791<style> 1792 1793 #cmp-modal p, #cmp-modal-two p { 1794 font-size: 14px; 1795 font-family: gravitoFont; 1796 line-height: 1.3; 1797 } 1798 1799 [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]):not(:empty) { 1800 background-image: linear-gradient(0deg, #d9f1fc 1px, #f9fdfe 0); 1801 background-size: 4px 4px; 1802 } 1803 body.home [id^="dfp__desk-"] iframe { 1804 max-width: 980px !important; 1805 } 1806 body.home #dfp__desk-2_1 { 1807 margin-bottom: var(--space-m); 1808 } 1809 1810 #dfp__interstitial { 1811 position: fixed; 1812 z-index: 1000000; 1813 width: 1px; 1814 height: 1px; 1815 margin: 0px; 1816 padding: 0px; 1817 left: 0px; 1818 top: 0px; 1819 } 1820 1821 @media (min-width: 1024px) { 1822/* 1823 body.home .entry-content { 1824 margin-block: 16px; 1825 } 1826*/ 1827 [id^="dfp__desk-"] { 1828 max-width: var(--alignwide); 1829 min-height: 400px; 1830 margin: 0px auto; 1831 display: flex; 1832 justify-content: center; 1833 } 1834 [id^="dfp__in-text"] { 1835 margin-bottom: var(--space-l); 1836 display: flex; 1837 justify-content: center; 1838 } 1839 body.category .in-text { 1840 margin-bottom: 0px; 1841 } 1842 [id^="dfp__rectangle-"] { 1843 margin-bottom: var(--space-m); 1844 display: flex; 1845 justify-content: center; 1846 } 1847 } 1848 1849 @media (max-width: 1024px) { 1850 [id^="dfp__mob-"] { 1851 display: flex; 1852 justify-content: center; 1853 margin-bottom: var(--space-m); 1854 } 1855 body.category .mob-1, body.category .mob-2 { 1856 margin-bottom: 0px; 1857 } 1858 } 1859 @media (max-width: 500px) { 1860 [id^="dfp__mob-"] { 1861 width: 100vw !important; 1862 margin-left: -1.5rem; 1863 margin-right: -1.5rem; 1864 } 1865 } 1866 1867 1868 #NativeAdHolder_native-card-1 { 1869 margin-top: var(--space-l); 1870 margin-bottom: var(--space-m); 1871 } 1872 body.single-om_digimag_post #NativeAdHolder_native-card-1 { 1873 margin-top: var(--space-l); 1874 margin-bottom: var(--space-m); 1875 max-width: 860px; 1876 margin-left: auto; 1877 margin-right: auto; 1878 width: calc(100% - 3rem); 1879 } 1880 #NativeAdHolder_native-card-1 h2 { 1881 display: inline-block; 1882 -ms-flex: 0 1 auto; 1883 flex: 0 1 auto; 1884 font-family: Flama, sans-serif; 1885 font-size: .875rem; 1886 text-transform: uppercase; 1887 color: #fff; 1888 margin-top: 0; 1889 margin-right: auto; 1890 background: #000f5a; 1891 padding: 8px 12px 1px 16px; 1892 margin-bottom: 0; 1893 border-top-left-radius: 5px; 1894 border-top-right-radius: 5px; 1895 position: relative; 1896 } 1897 #NativeAdHolder_native-card-1 h2:after { 1898 content: ""; 1899 width: 20px; 1900 background: linear-gradient(to left bottom, #fff 50%, #000f5a 0); 1901 display: inline-block; 1902 height: 100%; 1903 position: absolute; 1904 right: -19px; 1905 top: 0; 1906 } 1907 #NativeAdHolder_native-card-1 ul { 1908 border-top: 10px solid #000f5a; 1909 background-image: linear-gradient(0deg, #d9f1fc 1px, #f9fdfe 0); 1910 background-size: 4px 4px; 1911 min-height: 0; 1912 min-width: 0; 1913 width: 100%; 1914 overflow-x: scroll; 1915 display: -ms-flexbox; 1916 display: flex; 1917 -ms-flex-flow: row nowrap; 1918 flex-flow: row nowrap; 1919 list-style-type: none; 1920 margin-top: -3px; 1921 } 1922 #NativeAdHolder_native-card-1 ul li { 1923 width: calc(100% / 3 - (1rem / 3)); 1924 height: 100%; 1925 } 1926 #NativeAdHolder_native-card-1 ul li > div { 1927 background-size: 4px 4px; 1928 position: relative; 1929 margin: 1rem 0 1rem 1rem; 1930 } 1931 #NativeAdHolder_native-card-1:has(> ul:empty) { 1932 display: none; 1933 } 1934 @media (min-width: 768px) { 1935 #NativeAdHolder_native-card-1 ul li > div { 1936 height: 100%; 1937 } 1938 #NativeAdHolder_native-card-1 ul li > div iframe { 1939 min-height: 320px !important; 1940 } 1941 } 1942 @media (max-width: 768px) { 1943 #NativeAdHolder_native-card-1 ul { 1944 flex-flow: column; 1945 padding-bottom: 0px; 1946 } 1947 #NativeAdHolder_native-card-1 ul li { 1948 width: 100%; 1949 max-width: 100%; 1950 } 1951 #NativeAdHolder_native-card-1 ul li > div { 1952 margin: 0.8rem 0 0; 1953 } 1954 } 1955 1956 [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]):not([id^="dfp__interstitial"]):not(:empty) { 1957 clear: both; 1958 position: relative; 1959 margin-top: 3rem; 1960 margin-bottom: 3rem; 1961 padding: 1rem 0rem 1rem; 1962 } 1963 [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]):not([id^="dfp__interstitial"]):not(:empty) > div::before { 1964 display: block; 1965 content: "Mainos"; 1966 font-size: 12px !important; 1967 line-height: 1; 1968 text-align: center; 1969 text-transform: uppercase; 1970 position: absolute; 1971 left: 50%; 1972 top: -12px; 1973 transform: translateX(-50%); 1974 white-space: nowrap; 1975 color: rgb(136, 136, 136); 1976 padding: 0px 15px; 1977 font-family: helvetica, georgia, sans-serif; 1978 letter-spacing: .045em; 1979 }
1980 body.home [id^=dfp__desk-1][data-google-query-id]:not(:empty) { 1981 margin-top: 0 !important; 1982 margin-bottom: 1.9rem !important; 1983 } 1984 1985/* 1986 body.single-post #main-content [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]):not(:empty) { 1987 clear: both; 1988 position: relative; 1989 margin-top: 3rem !important; 1990 margin-bottom: 3rem !important; 1991 padding: 1rem 0rem 1rem !important; 1992 border-top-width: 1px !important; 1993 border-top-style: solid !important; 1994 border-top-color: rgb(235, 235, 235) !important; 1995 border-bottom-width: 1px !important; 1996 border-bottom-style: solid !important; 1997 border-bottom-color: rgb(235, 235, 235) !important; 1998 } 1999 body.single-post #main-content [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]):not(:empty) > div::before { 2000 display: block; 2001 content: "Mainos"; 2002 font-size: 12px !important; 2003 line-height: 1; 2004 text-align: center; 2005 text-transform: uppercase; 2006 position: absolute; 2007 left: 50%; 2008 top: -12px; 2009 transform: translateX(-50%); 2010 white-space: nowrap; 2011 color: rgb(136, 136, 136); 2012 background: rgb(255, 255, 255); 2013 padding: 0px 15px; 2014 font-family: helvetica, georgia, sans-serif; 2015 letter-spacing: .045em; 2016 } 2017 body.single-post #main-content [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]):not(:empty) > div::after { 2018 display: block; 2019 content: "Mainos päättyy"; 2020 font-size: 12px !important; 2021 line-height: 1; 2022 text-align: center; 2023 text-transform: uppercase; 2024 position: absolute; 2025 left: 50%; 2026 bottom: -17px; 2027 transform: translateX(-50%); 2028 white-space: nowrap; 2029 color: rgb(136, 136, 136); 2030 background: rgb(255, 255, 255); 2031 padding: 0px 15px; 2032 font-family: helvetica, georgia, sans-serif; 2033 letter-spacing: .045em; 2034 } 2035 .content__wrapper [id^=dfp__desk-1][data-google-query-id]::before { 2036 content: ""; 2037 } 2038*/ 2039 div [id^=yoc_advertisement_message_above] { 2040 display: none; 2041 } 2042 2043 /* Debugging purposes only, will be removed before launch */ 2044/* 2045 .ad, [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]) { 2046 display: flex !important; 2047 } 2048 .ad > div, [id^="dfp__"][data-google-query-id]:not([id^="dfp__native"]) > div { 2049 min-height: 50px; 2050 } 2051 .bbwad { 2052 padding: 15px; 2053 margin: 30px 0; 2054 background-color: #ffefc4; 2055 border: 2px dashed #ffa500; 2056 text-align: center; 2057 min-height: 50px; 2058 } 2059 .bbwad::before { 2060 content: 'BBW outstream'; 2061 } 2062*( 2063 /* Debugging purposes only, will be removed before launch */ 2064 2065</style> 2066
2067<script> 2068 2069 const bodyClass = document.body.className; 2070 2071 async function waitForVariable2(variableName, timeoutMs = 30000, intervalMs = 1000) { 2072 const startTime = Date.now(); 2073 for (; !window[variableName]; ) { 2074 if (Date.now() - startTime >= timeoutMs) { 2075 console.warn(`waitForVariable2: Timeout of ${timeoutMs / 1000}s reached for variable "${variableName}".`); 2076 return false; 2077 } 2078 await new Promise(resolve => setTimeout(resolve, intervalMs)); 2079 } 2080 return true; 2081 } 2082 2083 function insertAdDiv(id, className, target, fallbackTarget, position = 'after', scriptContent = null) { 2084 const adDiv = document.createElement('div'); 2085 adDiv.id = id; 2086 if (className !== '') {adDiv.className = className} 2087 2088 if (scriptContent) { 2089 const script = document.createElement('script'); 2090 script.text = scriptContent; 2091 adDiv.appendChild(script); 2092 } 2093 2094 const referenceElement = target ?? fallbackTarget; 2095 if (!referenceElement) { 2096 console.error('No valid target or fallback target provided.'); 2097 return adDiv; 2098 } 2099 2100 if (position === 'before') { 2101 referenceElement.before(adDiv); 2102 } else { 2103 referenceElement.after(adDiv); 2104 } 2105 2106 return adDiv; 2107 } 2108 2109 if (dfp.showAds && !dfp.hideAllAds) { 2110 2111 //const interstitialDiv = document.createElement('div'); 2112 //interstitialDiv.id = 'dfp__interstitial'; 2113 // 2114 //const interstitialScript = document.createElement('script'); 2115 //interstitialScript.text = 'dfp.displayAdslot("dfp__interstitial")'; 2116 //interstitialDiv.appendChild(interstitialScript); 2117 // 2118 //document.body.insertBefore(interstitialDiv, document.body.firstChild); 2119 2120 const interstitialDiv = insertAdDiv( 2121 'dfp__interstitial', 2122 '', 2123 document.body.firstChild, 2124 document.body, 2125 'before', 2126 'dfp.displayAdslot("dfp__interstitial")' 2127 ); 2128 2129 2130 if (dfp.visibility == 'desktop') { 2131 2132 if (bodyClass.match(/category|single-post/)) { 2133 2134 //const header = document.querySelector('.wp-site-blocks > header'); 2135 //const topBanner = header?.nextElementSibling; 2136 // 2137 //const adDiv = document.createElement('div'); 2138 //adDiv.id = 'dfp__desk-1_1'; 2139 //adDiv.className = 'desk-1'; 2140 // 2141 //const script = document.createElement('script'); 2142 //script.text = 'dfp.displayAdslot("dfp__desk-1_1")'; 2143 //adDiv.appendChild(script); 2144 // 2145 //if (/category|single-post/.test(bodyClass)) { 2146 // const target = topBanner?.classList.contains('om-top-banner') ? topBanner : header; 2147 // target.after(adDiv); 2148 //} 2149 2150 const header = document.querySelector('.wp-site-blocks > header'); 2151 const topBanner = header?.nextElementSibling; 2152 const adDiv = insertAdDiv( 2153 'dfp__desk-1_1', 2154 'desk-1', 2155 topBanner?.classList.contains('om-top-banner') ? topBanner : header, 2156 header, 2157 'after', 2158 'dfp.displayAdslot("dfp__desk-1_1")' 2159 ); 2160 2161 } 2162 2163 } 2164 2165 jQuery(document).ready(function() { 2166 2167 2168 //jQuery('body').prepend('<div id="dfp__interstitial">
2168<script>dfp.displayAdslot("dfp__interstitial")<\/script></div>'); 2169 2170 if (location.href.indexOf('webinterstitial') >= -1) { 2171 waitForVariable2("canRunWebInterstitial", 30000, 1000) 2172 .then((success) => { 2173 if (success) { 2174 if (dfpDebug) {console.log('Defining webinterstitial...')} 2175 var webinterstitialSlot; 2176 googletag.cmd.push(function() { 2177 webinterstitialSlot = googletag.defineOutOfPageSlot('/135812570/rakennusmaailma/content/webinterstitial', googletag.enums.OutOfPageFormat.INTERSTITIAL); 2178 if (webinterstitialSlot) {webinterstitialSlot.addService(googletag.pubads()); googletag.pubads().refresh([webinterstitialSlot], {changeCorrelator: false});} 2179 }); 2180 } else { 2181 if (dfpDebug) { console.log('waitForVariable2 "canRunWebInterstitial" timed out or variable was not found.'); } 2182 } 2183 }) 2184 .catch(error => { 2185 if (dfpDebug) { console.error('Error in waitForVariable2:', error); } 2186 }); 2187 } 2188 2189 2190 if (dfp.visibility == 'desktop') { 2191 2192 //let desk1template = '<div id="dfp__desk-1_1" class="desk-1">
2192<script>dfp.displayAdslot("dfp__desk-1_1")<\/script></div>'; 2193 let desk2template = '<div id="dfp__desk-2_1" class="desk-2">
2193<script>dfp.displayAdslot("dfp__desk-2_1")<\/script></div>'; 2194 let rect1template = '<div id="dfp__rectangle-1_1" class="rectangle-1">
2194<script>dfp.displayAdslot("dfp__rectangle-1_1")<\/script></div>'; 2195 let rect2template = '<div id="dfp__rectangle-2_1" class="rectangle-2">
2195<script>dfp.displayAdslot("dfp__rectangle-2_1")<\/script></div>'; 2196 let intext1template = '<div id="dfp__in-text_1" class="in-text">
2196<script>dfp.displayAdslot("dfp__in-text_1")<\/script></div>'; 2197 2198 if (bodyClass.match(/category|single-post/)) { 2199 //jQuery('.wp-site-blocks > header').next('div.om-top-banner').length ? jQuery('.wp-site-blocks > header').next('div.om-top-banner').after(desk1template) : jQuery('.wp-site-blocks > header').after(desk1template); 2200 jQuery('aside.wp-block-template-part div.wp-block-template-part').has('.newsletter-box').before(rect1template); 2201 jQuery('aside.wp-block-template-part > .post-most-popular').has('.wp-block-group').after(rect2template); 2202 } 2203 2204 if (bodyClass.match(/category/)) { 2205 waitForElement('ul.wp-block-post-template-is-layout-flow li').then(function(element) { 2206 jQuery('.wp-block-column.is-layout-flow .wp-block-post-template-is-layout-flow > li').eq(2).after(intext1template); 2207 }); 2208 } 2209 2210 if (bodyClass.match(/single-post/)) { 2211 //jQuery('.wp-block-otavamedia-tuuma-block').after(desk2template); 2212 } 2213 2214 } 2215 2216 2217 if (dfp.visibility == 'mobile') { 2218 2219 let mob1template = '<div id="dfp__mob-1_1" class="mob-1">
2219<script>dfp.displayAdslot("dfp__mob-1_1")<\/script></div>'; 2220 let mob21template = '<div id="dfp__mob-2_1" class="mob-2">
2220<script>dfp.displayAdslot("dfp__mob-2_1")<\/script></div>'; 2221 let mob22template = '<div id="dfp__mob-2_2" class="mob-2">
2221<script>dfp.displayAdslot("dfp__mob-2_2")<\/script></div>'; 2222 let mob23template = '<div id="dfp__mob-2_3" class="mob-2">
2222<script>dfp.displayAdslot("dfp__mob-2_3")<\/script></div>'; 2223 2224 if (bodyClass.match(/single-post/)) { 2225 2226 } 2227 2228 if (bodyClass.match(/category/)) { 2229 waitForElement('ul.wp-block-post-template-is-layout-flow li').then(function(element) { 2230 jQuery('.wp-block-column.is-layout-flow .wp-block-post-template-is-layout-flow > li').eq(0).after(mob1template); 2231 jQuery('.wp-block-column.is-layout-flow .wp-block-post-template-is-layout-flow > li').eq(3).after(mob21template); 2232 jQuery('.wp-block-column.is-layout-flow .wp-block-post-template-is-layout-flow > li').eq(6).after(mob22template); 2233 }); 2234 } 2235 2236 if (bodyClass.match(/single-post/)) { 2237 //jQuery('.wp-block-otavamedia-tuuma-block').after(desk2template); 2238 } 2239 2240 } 2241 2242 2243 //if(bodyClass.match(/single-post/) || (bodyClass.match(/single-om_digimag_post/) && dfp.visibility === 'mobile')) { 2244 if(bodyClass.match(/single-post/) || bodyClass.match(/single-om_digimag_post/)) { 2245 const nativecard1Template = `<aside id='NativeAdHolder_native-card-1' class='wp-block-otavamedia-google-ad-slot'> 2246 <h2>Mainos</h2> 2247 <ul> 2248 <li><div id="dfp__native-card-1_1">
2248<script>if('undefined'!==typeof dfp){dfp.displayAdslot("dfp__native-card-1_1");}<\/script></div></li> 2249 <li><div id="dfp__native-card-1_2">
2249<script>if('undefined'!==typeof dfp){dfp.displayAdslot("dfp__native-card-1_2");}<\/script></div></li> 2250 <li><div id="dfp__native-card-1_3">
2250<script>if('undefined'!==typeof dfp){dfp.displayAdslot("dfp__native-card-1_3");}<\/script></div></li> 2251 </ul> 2252 </aside>`; 2253 //jQuery('.wp-block-template-part').has('h3#comments').after(nativecard1Template); 2254 jQuery('.is-style-tuuma-block-heading').before(nativecard1Template); 2255 } 2256 2257 if(bodyClass.match(/single-post/)){ 2258 2259 if(dfp.showVideo){ 2260 2261 (function() { 2262 var t = new Date().getTime(); t -= t % (1000*60*60*24*30); 2263 var l = document.createElement('script'); l.type = 'text/javascript'; l.async = true; 2264 l.src = '//otavamedia.bbvms.com/a/rakennusmaailma.js?t='+t; 2265 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(l, s); 2266 })(); 2267 if (dfpDebug) {console.log('BBW initialized without waiting CMP ready...');} 2268 2269 } 2270 2271 const contentWrapper = jQuery('#main-content'); 2272 //contentWrapper.children('p').eq(1).after('<p><img src""></p>'); 2273 const viewportH = window.innerHeight; 2274 const visualViewportH = window.visualViewport.height 2275 const isMobile = window.innerWidth < 1024 ? true : false; 2276 2277 if (dfpDebug) {console.log('isMobile: ' + isMobile + ', ' + window.innerWidth + ', ' + dfp.visibility)} 2278 2279 const contentElements = contentWrapper.children(); 2280 const contentHeadings = contentWrapper.children('h2, h3'); 2281 const contentParagraphs = contentWrapper.children('p'); 2282 const forceParagraphsMode = false; 2283 const headingsModeRequirement = 5; 2284 let maxAdsCount = 10; 2285 2286 let adCount = 0; 2287 let mob2Index = 1; 2288 let mob3Index = 1; 2289 let intextIndex = 1; 2290 let lastAdBottom = null; 2291 2292 const adMaxHeight = 600; 2293 const adSafetyMargin = -300; 2294 2295 const checkPrevElement = true; 2296 const fallbackToParagraph = true; 2297 2298 function getElementInfo(elem) { 2299 if (!elem || !elem.length) return '[null]'; 2300 let tag = elem.prop('tagName').toLowerCase(); 2301 let text = elem.text().trim().replace(/\s+/g, ' '); 2302 if (text.length > 50) text = text.slice(0, 50) + '...'; 2303 return `<${tag}> "${text}"`; 2304 } 2305 2306 function generateAdId(adUnit) { 2307 if (adUnit === 'mob-1') return 'dfp__mob-1_1'; 2308 //if (adUnit === 'mob-2') return 'dfp__mob-2_1'; 2309 if (adUnit === 'mob-2') { 2310 return 'dfp__mob-2_' + (mob2Index); 2311 } 2312 if (adUnit === 'bbwad') return 'bbwvideo'; 2313 if (adUnit === 'mob-3') { 2314 return 'dfp__mob-3_' + (mob3Index); 2315 } 2316 //if (adSlot.startsWith('in-text')) { 2317 if (adUnit === 'in-text') { 2318 return 'dfp__in-text_' + (intextIndex); 2319 } 2320 return ''; 2321 } 2322 2323 function insertAdAfter(elem, adUnit) { 2324 const adSlotId = generateAdId(adUnit); 2325 let adSlotCode = jQuery('<div>', { 2326 class: 'ad ' + adUnit, 2327 id: adSlotId, 2328 //text: adSlot + ' (' + adId + ')' 2329 html: '
2329<script>dfp.displayAdslot("' + adSlotId + '")<\/script>' 2330 }); 2331 if (adUnit === 'bbwad') adSlotCode = jQuery('<div class="ad bbwad" id="bbwvideo"></div>'); 2332 elem.after(adSlotCode); 2333 adCount++; 2334 lastAdBottom = adSlotCode.offset().top + adMaxHeight; 2335 if (dfpDebug) {console.log(`[AD] ${adSlotId} sijoitettiin AFTER `, getElementInfo(elem))} 2336 return adSlotCode; 2337 } 2338 2339 function insertAdBefore(elem, adUnit) { 2340 const adSlotId = generateAdId(adUnit); 2341 const adSlotCode = jQuery('<div>', { 2342 class: 'ad ' + adUnit, 2343 id: adSlotId, 2344 //text: adSlot + ' (' + adId + ')' 2345 html: '
2345<script>dfp.displayAdslot("' + adSlotId + '")<\/script>' 2346 }); 2347 elem.before(adSlotCode); 2348 adCount++; 2349 lastAdBottom = adSlotCode.offset().top + adMaxHeight; 2350 if (dfpDebug) {console.log(`[AD] ${adSlotId} sijoitettiin BEFORE `, getElementInfo(elem))} 2351 return adSlotCode; 2352 } 2353 2354 function isBadParagraph(p) { 2355 if (!p.is('p')) return false; 2356 const firstElem = p.contents().first(); 2357 const isFirstImg = firstElem.is('img'); 2358 const isFirstLinkImgOnly = firstElem.is('a') && firstElem.contents().length == 1 && firstElem.contents().first().is('img'); 2359 2360 const cloneElem = p.clone(); 2361 cloneElem.find('a').filter(function() { 2362 const ahrefElem = jQuery(this); 2363 return ahrefElem.contents().length === 1 && ahrefElem.contents().first().is('img'); 2364 }).replaceWith(function() {return jQuery(this).contents();}); 2365 cloneElem.find('img').remove(); 2366 2367 const textElem = cloneElem.text().trim(); 2368 const isEmpty = textElem.length === 0; 2369 2370 return isEmpty || isFirstImg || isFirstLinkImgOnly; 2371 } 2372 2373 function endsWithImage(p) { 2374 if (!p.is('p')) return false; 2375 const lastElem = p.contents().filter(function() {return this.nodeType === 1;}).last(); //return last html node 2376 if (!lastElem.length) return false; 2377 if (lastElem.is('img')) return true; 2378 if (lastElem.is('a') && lastElem.contents().length === 1 && lastElem.contents().first().is('img')) return true; 2379 return false; 2380 } 2381 2382 function isForbiddenElement(elem, opts = {}) { 2383 //if (dfpDebug) {console.log(elem.prop('tagName') + ', ' + elem.length + ' isForbiddenElement: ', opts)} 2384 const {ignoreBadParagraph = false} = opts; 2385 if (!ignoreBadParagraph && elem.is('iframe, blockquote, figure, p') && isBadParagraph(elem)) return true; 2386 //if (!ignoreBadParagraph && elem.is('iframe, blockquote, figure')) return true; 2387 //if (!ignoreBadParagraph && elem.is('p') && isBadParagraph(elem)) return true; 2388 return false; 2389 } 2390 2391 function canPlaceBefore(elem, opts = {}) { 2392 const {ignoreBadParagraphPrev = false} = opts; 2393 if (!elem || !elem.length) return false; 2394 if (isForbiddenElement(elem)) return false; 2395 const prevElem = elem.prev(); 2396 if (prevElem.length && isForbiddenElement(prevElem, {ignoreBadParagraph: ignoreBadParagraphPrev})) return false; 2397 return true; 2398 } 2399 2400 function canPlaceAfter(elem) { 2401 if (!elem || !elem.length) return false; 2402 if (isForbiddenElement(elem)) return false; 2403 const nextElem = elem.next(); 2404 if (nextElem.length && isForbiddenElement(nextElem)) return false; 2405 return true; 2406 } 2407 2408 function distanceFromLastAd(candidateOffsetTop, elem) { 2409 if (lastAdBottom == null) { 2410 if (dfpDebug) {console.log('[DEBUG] Spacing OK (first ad) ', getElementInfo(elem))} 2411 return true; 2412 } 2413 const requiredDistance = viewportH + adSafetyMargin; 2414 // distance from previous ad bottom (default ad height 600px) to possible element top 2415 const distance = candidateOffsetTop - lastAdBottom; 2416 const isGoodDistance = distance > requiredDistance; 2417 2418 if (dfpDebug) {console.log('[DEBUG] Spacing check', { 2419 element: getElementInfo(elem), 2420 candidateOffsetTop, 2421 lastAdBottom, 2422 distanceToLastAdBottom: distance, 2423 requiredDistance: requiredDistance, 2424 isGoodDistance: isGoodDistance 2425 })} 2426 return isGoodDistance; 2427 } 2428 2429 function findNextSuitableParagraph(p) { 2430 return p.nextAll('p').filter(function() { 2431 const elem = jQuery(this); 2432 return !isBadParagraph(elem) && canPlaceAfter(elem); 2433 }).first(); 2434 } 2435 2436 function findNextSuitableHeading(h, opts = {}) { 2437 const {ignoreBadParagraphPrev = false} = opts; 2438 return h.nextAll('h2, h3').filter(function() { 2439 const elem = jQuery(this); 2440 return canPlaceBefore(elem, {ignoreBadParagraphPrev}); 2441 }).first(); 2442 } 2443 2444 function insertInArticleAd(paragraphIndex, minParagraphs, adSlotId) { 2445 if (contentParagraphs.length >= minParagraphs) { 2446 let targetParagraph = contentParagraphs.eq(paragraphIndex); 2447 if (endsWithImage(targetParagraph) && contentParagraphs.length > paragraphIndex + 1) { 2448 targetParagraph = contentParagraphs.eq(paragraphIndex + 1); 2449 } 2450 if (!isBadParagraph(targetParagraph) && canPlaceAfter(targetParagraph)) { 2451 insertAdAfter(targetParagraph, adSlotId); 2452 } else { 2453 const nextSuitableParagraph = findNextSuitableParagraph(targetParagraph); 2454 if (nextSuitableParagraph.length) insertAdAfter(nextSuitableParagraph, adSlotId); 2455 } 2456 } 2457 } 2458 2459 if (dfpDebug) {console.log('isMobile: ' + isMobile + ', ' + window.innerWidth + ', ' + dfp.visibility)} 2460 2461 // --- mob-1 / in-text_1 --- 2462 if (isMobile) { 2463 insertInArticleAd(1, 2, 'mob-1'); 2464 } else { 2465 insertInArticleAd(4, 10, 'in-text'); 2466 intextIndex++; 2467 } 2468 2469 // --- HEADING-MODE --- 2470 if (contentHeadings.length >= headingsModeRequirement && !forceParagraphsMode) { 2471 2472 if (dfpDebug) {console.log('[MODE] Heading-based mode')} 2473 contentHeadings.each(function(index, h) { 2474 if (dfpDebug) {console.log('h: ' + jQuery(h).text())} 2475 2476 if (adCount >= maxAdsCount) { 2477 if (dfpDebug) {console.log('Maximum number of ads ' + maxAdsCount + ' inserted...')} 2478 return; 2479 } 2480 2481 const heading = jQuery(h); 2482 const prevHeading = heading.prev(); 2483 const candidateOffsetTop = heading.offset().top; 2484 2485 //let adSlot = (adCount === 1) ? 'mob-2' : (adCount === 2) ? 'bbwad' : 'mob-3_' + (mob3Index); 2486 //let adSlot = (adCount === 1) ? 'mob-2' : (adCount === 2) ? 'bbwad' : 'mob-3'; 2487 let adSlot = (adCount === 1) ? 'mob-2' : (adCount === 2) ? 'bbwad' : 'mob-2'; 2488 if (!isMobile) { 2489 //adSlot = 'in-text_' + (intextIndex); 2490 //adSlot = 'in-text'; 2491 adSlot = (adCount === 1) ? 'bbwad' : (adCount === 2) ? 'in-text' : 'in-text'; 2492 } 2493 2494 // --- Other heading-mode -ads (mob-2, mob-3_x) --- 2495 const canUseBefore = canPlaceBefore(heading, {ignoreBadParagraphPrev: !checkPrevElement}) && distanceFromLastAd(candidateOffsetTop, heading); 2496 2497 if (canUseBefore) { 2498 if (dfpDebug) {console.log(`[HEADING] jQuery{adSlot} ennen otsikkoa `, getElementInfo(heading))} 2499 insertAdBefore(heading, adSlot); 2500 if (adSlot === 'mob-2') mob2Index++; 2501 //if (adSlot.startsWith('mob-3_')) mob3Index++; 2502 if (adSlot === 'mob-3') mob3Index++; 2503 if (adSlot === 'in-text') intextIndex++; 2504 return; 2505 } 2506 2507 if (fallbackToParagraph) { 2508 // Inserting after the next paragraph 2509 const nextSuitableParagraph = findNextSuitableParagraph(heading); 2510 if (nextSuitableParagraph.length && distanceFromLastAd(nextSuitableParagraph.offset().top + nextSuitableParagraph.outerHeight(), nextSuitableParagraph)) { 2511 if (dfpDebug) {console.log(`[HEADING] ${adSlot} fallback after paragraph: `, getElementInfo(nextSuitableParagraph))} 2512 insertAdAfter(nextSuitableParagraph, adSlot); 2513 if (adSlot === 'mob-2') mob2Index++; 2514 //if (adSlot.startsWith('mob-3_')) mob3Index++; 2515 if (adSlot === 'mob-3') mob3Index++; 2516 if (adSlot === 'in-text') intextIndex++; 2517 return; 2518 } 2519 } else { 2520 const nextSuitableHeading = findNextSuitableHeading(heading, {ignoreBadParagraphPrev: !checkPrevElement}); 2521 if (nextSuitableHeading.length && distanceFromLastAd(nextSuitableHeading.offset().top, nextSuitableHeading)) { 2522 if (dfpDebug) {console.log(`[HEADING] ${adSlot} fallback before next heading: `, getElementInfo(nextSuitableHeading))} 2523 insertAdBefore(nextSuitableHeading, adSlot); 2524 if (adSlot === 'mob-2') mob2Index++; 2525 //if (adSlot.startsWith('mob-3_')) mob3Index++; 2526 if (adSlot === 'mob-3') mob3Index++; 2527 if (adSlot === 'in-text') intextIndex++; 2528 return; 2529 } 2530 } 2531 2532 if (dfpDebug) {console.log(`[HEADING] Did not find a place for ${adSlot} `, getElementInfo(heading))} 2533 2534 });
2535 2536 if (dfpDebug) {console.log('[MODE] Heading-based mode ends')} 2537 //return; 2538 2539 } else { 2540 2541 // --- paragraph-mode --- 2542 if (dfpDebug) {console.log('[MODE] Paragraph-based mode')} 2543 contentElements.each(function(index, p) { 2544 if (adCount >= maxAdsCount) { 2545 if (dfpDebug) {console.log('Maximum number of ads ' + maxAdsCount + ' inserted...')} 2546 return; 2547 } 2548 2549 const paragraph = jQuery(p); 2550 //let adSlot = (adCount === 1) ? 'mob-2' : (adCount === 2) ? 'bbwad' : 'mob-3_' + (mob3Index); 2551 //let adSlot = (adCount === 1) ? 'mob-2' : (adCount === 2) ? 'bbwad' : 'mob-3'; 2552 let adSlot = (adCount === 1) ? 'mob-2' : (adCount === 2) ? 'bbwad' : 'mob-2'; 2553 if (!isMobile) { 2554 //adSlot = 'in-text_' + (intextIndex); 2555 //adSlot = 'in-text'; 2556 adSlot = (adCount === 1) ? 'bbwad' : (adCount === 2) ? 'in-text' : 'in-text'; 2557 } 2558 2559 const candidateOffsetBottom = paragraph.offset().top + paragraph.outerHeight(); 2560 2561 if (!distanceFromLastAd(candidateOffsetBottom, paragraph)) return; 2562 2563 const prevElem = paragraph.prev(); 2564 if ((prevElem.is('h2, h3')) || (prevElem.is('p') && endsWithImage(prevElem))) { 2565 const nextSuitableParagraph = findNextSuitableParagraph(paragraph); 2566 if (nextSuitableParagraph.length && distanceFromLastAd(nextSuitableParagraph.offset().top + nextSuitableParagraph.outerHeight(), nextSuitableParagraph)) { 2567 if (dfpDebug) {console.log(`[PARA] ${adSlot} after the next paragraph (prev was not suitable pga picture/heading): `, getElementInfo(nextSuitableParagraph))} 2568 insertAdAfter(nextSuitableParagraph, adSlot); 2569 if (adSlot === 'mob-2') mob2Index++; 2570 //if (adSlot.startsWith('mob-3_')) mob3Index++; 2571 if (adSlot === 'mob-3') mob3Index++; 2572 if (adSlot === 'in-text') intextIndex++; 2573 } 2574 return; 2575 } 2576 2577 if (paragraph.is('p') && !isBadParagraph(paragraph) && canPlaceAfter(paragraph)) { 2578 if (dfpDebug) {console.log(`[PARA] ${adSlot} aftrer paragraph: `, getElementInfo(paragraph))} 2579 insertAdAfter(paragraph, adSlot); 2580 if (adSlot === 'mob-2') mob2Index++; 2581 //if (adSlot.startsWith('mob-3_')) mob3Index++; 2582 if (adSlot === 'mob-3') mob3Index++; 2583 if (adSlot === 'in-text') intextIndex++; 2584 return; 2585 } 2586 2587 const nextSuitableParagraph = findNextSuitableParagraph(paragraph); 2588 if (nextSuitableParagraph.length && distanceFromLastAd(nextSuitableParagraph.offset().top + nextSuitableParagraph.outerHeight(), nextSuitableParagraph)) { 2589 if (dfpDebug) {console.log(`[PARA] ${adSlot} fallback after paragraph: `, getElementInfo(nextSuitableParagraph))} 2590 insertAdAfter(nextSuitableParagraph, adSlot); 2591 if (adSlot === 'mob-2') mob2Index++; 2592 //if (adSlot.startsWith('mob-3_')) mob3Index++; 2593 if (adSlot === 'mob-3') mob3Index++; 2594 if (adSlot === 'in-text') intextIndex++; 2595 } 2596 }); 2597 2598 if (dfpDebug) {console.log('[MODE] Paragraph-based mode ends')} 2599 2600 } 2601 2602 } 2603 2604 if (dfpDebug) {console.log('visibility: ' + dfp.visibility)} 2605 2606 2607 }); 2608 2609 2610 if (testSRA) { 2611 2612 const observers = new Map(); 2613 2614 function observeDFPElements() { 2615 2616 //const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222' && !el.id.includes('native')); 2617 const targets = [...document.querySelectorAll('[id^="dfp__"]:not([data-observed])')].filter(el => el.id !== 'dfp__mob-2_222'); 2618 2619 targets.forEach(target => { 2620 2621 target.setAttribute('data-observed', 'true'); 2622 let thresholdValue = parseFloat(target.getAttribute('data-threshold')) || 1; 2623 if (dfp.visibility == 'desktop') { 2624 thresholdValue = 0.7; 2625 }; 2626 if (target.getAttribute('id').includes('dfp__native')) { 2627 thresholdValue = 0.2; 2628 }; 2629 2630 let observer = observers.get(thresholdValue); 2631 if (!observer) { 2632 if (dfpDebug) console.log(`Creating new observer for threshold: ${thresholdValue}`); 2633 //const rootMargin = `0px 0px ${thresholdValue * 100}% 0px`; 2634 const rootMargin = `${thresholdValue * 100}% 0px ${thresholdValue * 100}% 0px`; 2635 2636 observer = new IntersectionObserver( 2637 (entries, obs) => {
2638 entries.forEach(entry => { 2639 if (entry.isIntersecting) { 2640 if (dfpDebug) { 2641 console.log('entry.boundingClientRect.height: ' + entry.boundingClientRect.height); 2642 console.log('HAS: calling runHeaderbid: ' + entry.target.id); 2643 } 2644 loadAdSlot(entry.target.id); 2645 obs.unobserve(entry.target); 2646 } 2647 }); 2648 }, 2649 { 2650 root: null, // relative to the viewport 2651 rootMargin: rootMargin, 2652 threshold: 0.0 // Fire as soon as it enters the margin 2653 } 2654 ); 2655 observers.set(thresholdValue, observer); 2656 } 2657 2658 observer.observe(target); 2659 if (dfpDebug) console.log('Observing element: ', target.id, 'with threshold:', thresholdValue); 2660 }); 2661 } 2662 2663 let debounceTimeout; 2664 function debouncedObserve() { 2665 clearTimeout(debounceTimeout); 2666 debounceTimeout = setTimeout(observeDFPElements, 100); 2667 } 2668 2669 var dfpReady = setInterval(function() { 2670 if(window.googletag && googletag.pubadsReady) { 2671 if (dfpDebug) {console.log('DFP ready, starting observation...')} 2672 2673 observeDFPElements(); 2674 2675 const mutationObserver = new MutationObserver(debouncedObserve); 2676 mutationObserver.observe(document.body, {childList: true, subtree: true}); 2677 2678 clearInterval(dfpReady); 2679 2680 } 2681 }, 50) 2682 2683 } 2684 2685 if (window.dfp.visibility == 'desktop') { 2686 checkCMPConditions(tcstring_decoded, [1], [], [732], []).then(result => { 2687 if (result) { 2688 if (dfpDebug) {console.log("Consents met: PERFORMAX IS GOOD TO GO...")} 2689 jQuery("body").append('<iframe srcdoc=\"\
2689<script src=\'https:\/\/cdn.performax.cz\/acc\/loader.js?aab=loader\'\>\<\/script\>\" style=\"display: none\" data-web=\"rakennusmaailma.fi\" data-hash=\"acecdebc89b43440b562e5a256f4c0c2\"><\/iframe>'); 2690 } else { 2691 if (dfpDebug) {console.log("Consents NOT met: CAN NOT USE PERFORMAX!!!")} 2692 } 2693 }); 2694 } 2695 2696 } 2697 2698 var adslotsDefined = true; 2699 if (dfpDebug) {console.log('adslotsDefined...')} 2700 2701 jQuery("a:contains('Evästeasetukset')").attr("href", "javascript:void(0);").attr("onclick","javascript:window.gravitoCMP.openPreferences()"); 2702 2703</script>
2703 2704 2705<!-- // rakennusmaailma.fi --> 2706 2707<!-- Body end tag end, do not remove -->
2707<script>window.lazyLoadOptions={elements_selector:"iframe[data-lazy-src]",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}};window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(var i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){continue} 2708if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){continue} 2709images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1} 2710if(is_iframe){iframe_count+=1}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update()}});var b=document.getElementsByTagName("body")[0];var config={childList:!0,subtree:!0};observer.observe(b,config)}},!1)</script>
2710<script data-no-minify="1" async src="https://rakennusmaailma.fi/wp-content/plugins/wp-rocket/assets/js/lazyload/17.8.3/lazyload.min.js"></script>
2710<script>function lazyLoadThumb(e,alt,l){var t='<img src="https://i.ytimg.com/vi/ID/hqdefault.jpg" alt="" width="480" height="360">',a='<button class="play" aria-label="Soita Youtube-video"></button>';if(l){t=t.replace('data-lazy-','');t=t.replace('loading="lazy"','');t=t.replace(/<noscript>.*?<\/noscript>/g,'');}t=t.replace('alt=""','alt="'+alt+'"');return t.replace("ID",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement("iframe"),t="ID?autoplay=1";t+=0===this.parentNode.dataset.query.length?"":"&"+this.parentNode.dataset.query;e.setAttribute("src",t.replace("ID",this.parentNode.dataset.src)),e.setAttribute("frameborder","0"),e.setAttribute("allowfullscreen","1"),e.setAttribute("allow","accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),this.parentNode.parentNode.replaceChild(e,this.parentNode)}document.addEventListener("DOMContentLoaded",function(){var exclusions=[];var e,t,p,u,l,a=document.getElementsByClassName("rll-youtube-player");for(t=0;t<a.length;t++)(e=document.createElement("div")),(u='https://i.ytimg.com/vi/ID/hqdefault.jpg'),(u=u.replace('ID',a[t].dataset.id)),(l=exclusions.some(exclusion=>u.includes(exclusion))),e.setAttribute("data-id",a[t].dataset.id),e.setAttribute("data-query",a[t].dataset.query),e.setAttribute("data-src",a[t].dataset.src),(e.innerHTML=lazyLoadThumb(a[t].dataset.id,a[t].dataset.alt,l)),a[t].appendChild(e),(p=e.querySelector(".play")),(p.onclick=lazyLoadYoutubeIframe)});</script>
2710<script type="module"> 2711import detect from "https:\/\/rakennusmaailma.fi\/wp-content\/plugins\/optimization-detective\/detect.min.js?ver=0.9.0"; detect( {"minViewportAspectRatio":0.4,"maxViewportAspectRatio":2.5,"isDebug":false,"extensionModuleUrls":[],"restApiEndpoint":"https:\/\/rakennusmaailma.fi\/wp-json\/optimization-detective\/v1\/url-metrics:store","currentETag":"075e3cc8a047a29245ac4b6393a594a2","currentUrl":"https:\/\/rakennusmaailma.fi\/testit\/","urlMetricSlug":"c395a5dd1d4947add0efdea0b0af487c","cachePurgePostId":400429,"urlMetricHMAC":"cd21cb7e28896867511107c549e47564","urlMetricGroupStatuses":[{"minimumViewportWidth":0,"complete":false},{"minimumViewportWidth":481,"complete":false},{"minimumViewportWidth":601,"complete":false},{"minimumViewportWidth":783,"complete":true}],"storageLockTTL":60,"webVitalsLibrarySrc":"https:\/\/rakennusmaailma.fi\/wp-content\/plugins\/optimization-detective\/build\/web-vitals.js?ver=4.2.4"} ); 2712</script>
vendor: 1 bytes, line 2712
2712
2713<script>var rocket_beacon_data = {"ajax_url":"https:\/\/rakennusmaailma.fi\/wp-admin\/admin-ajax.php","nonce":"5266567f9e","url":"https:\/\/rakennusmaailma.fi\/testit","is_mobile":false,"width_threshold":1600,"height_threshold":700,"delay":500,"debug":null,"status":{"atf":true,"lrc":true,"preload_fonts":true,"preconnect_external_domain":true},"elements":"img, video, picture, p, main, div, li, svg, section, header, span","lrc_threshold":1800,"preload_fonts_exclusions":["api.fontshare.com","cdn.fontshare.com"],"processed_extensions":["woff2","woff","ttf"],"preconnect_external_domain_elements":["link","script","iframe"],"preconnect_external_domain_exclusions":["static.cloudflareinsights.com","rel=\"profile\"","rel=\"preconnect\"","rel=\"dns-prefetch\"","rel=\"icon\""]}</script>
2713<script data-name="wpr-wpr-beacon" src='https://rakennusmaailma.fi/wp-content/plugins/wp-rocket/assets/js/wpr-beacon.min.js' async></script>
2713</body> 2714</html> 2715 2716<!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1790940052 -->
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.