PageSourceSearch

https://rakennusmaailma.fi/testit/

html rakennusmaailma.fi collected 2026-10-02 12:52:31 UTC 201,343 bytes, 2,716 lines download raw bytes

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 &raquo; 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&#038;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&amp;promoName=OM_RM&amp;promoCreative=onlinetarjous&amp;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&#038;app_name=openid2&#038;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="{ &quot;submenuOpenedBy&quot;: { &quot;click&quot;: false, &quot;hover&quot;: false, &quot;focus&quot;: false }, &quot;type&quot;: &quot;submenu&quot;, &quot;modal&quot;: null, &quot;previousFocus&quot;: 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&#038;app_name=openid2&#038;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 &#8211; 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="{&quot;loadOnClientNavigation&quot;: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="{&quot;loadOnClientNavigation&quot;: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.