{"id":43680,"date":"2025-11-27T18:48:21","date_gmt":"2026-03-04T06:47:00","guid":{"rendered":"https:\/\/gruble.net\/?page_id=43680"},"modified":"2026-05-08T08:00:20","modified_gmt":"2026-05-08T06:00:20","slug":"forside-kopi","status":"publish","type":"page","link":"https:\/\/gruble.net\/","title":{"rendered":"Forsiden"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"43680\" class=\"elementor elementor-43680\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e18d0f9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e18d0f9\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f82f92a\" data-id=\"f82f92a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c70af29 elementor-widget elementor-widget-html\" data-id=\"c70af29\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- \n  LIM INN I ELEMENTOR HTML-WIDGET\n  Kopier ALT under denne linjen og lim inn i HTML-widgeten.\n  Ikke lim inn DOCTYPE, html, head eller body \u2013 kun dette fragmentet.\n-->\n\n<div class=\"gruble-banner-wrap\" role=\"navigation\" aria-label=\"Gruble-kategorier\">\n  <div class=\"gruble-banner-inner\">\n\n    <a class=\"gruble-banner-tile\" data-idx=\"0\" href=\"https:\/\/gruble.net\/kunnskap\/\" aria-label=\"Kunnskap\"\n       style=\"--grb-img:url('https:\/\/gruble.net\/wp-content\/uploads\/grublemeny-kunnskap.jpg');\"><\/a>\n\n    <a class=\"gruble-banner-tile\" data-idx=\"1\" href=\"https:\/\/gruble.net\/grubleoppgaver\/\" aria-label=\"Grubleoppgaver\"\n       style=\"--grb-img:url('https:\/\/gruble.net\/wp-content\/uploads\/grublemeny-grubling.jpg');\"><\/a>\n\n    <a class=\"gruble-banner-tile\" data-idx=\"2\" href=\"https:\/\/gruble.net\/quiz\/\" aria-label=\"Quiz\"\n       style=\"--grb-img:url('https:\/\/gruble.net\/wp-content\/uploads\/grublemeny-quiz.jpg');\"><\/a>\n\n    <a class=\"gruble-banner-tile\" data-idx=\"3\" href=\"https:\/\/gruble.net\/spill\/\" aria-label=\"Spill\"\n       style=\"--grb-img:url('https:\/\/gruble.net\/wp-content\/uploads\/grublemeny-spill.jpg');\"><\/a>\n  <\/div>\n\n  <div class=\"gruble-banner-headline\" aria-hidden=\"true\">\n    <span id=\"grubleBannerPrompt\" class=\"gruble-banner-headline-text\">Hva har du lyst til \u00e5 gj\u00f8re i dag?<\/span>\n  <\/div>\n<\/div>\n\n<style>\n  .gruble-banner-wrap{\n    --grb-r: 18px;\n    --grb-gap: 10px;\n    --grb-stroke: rgba(255,255,255,.18);\n    --grb-shadow: 0 18px 50px rgba(0,0,0,.26);\n    --grb-shadow2: 0 10px 28px rgba(0,0,0,.18);\n    max-width: 1400px;\n    margin: 0 auto;\n    padding: 0;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n  }\n\n  .gruble-banner-inner{\n    aspect-ratio: 4 \/ 1;\n    width: 100%;\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: var(--grb-gap);\n    border-radius: var(--grb-r);\n    overflow: hidden;\n    box-shadow: var(--grb-shadow);\n    background: rgba(0,0,0,.08);\n    border: 1px solid rgba(255,255,255,.10);\n    position: relative;\n  }\n\n  @supports not (aspect-ratio: 4 \/ 1){\n    .gruble-banner-inner{ height: 0; padding-top: 25%; position: relative; }\n    .gruble-banner-inner > .gruble-banner-tile{ position: absolute; top:0; bottom:0; }\n    .gruble-banner-inner > .gruble-banner-tile:nth-child(1){ left:0; width:25%; }\n    .gruble-banner-inner > .gruble-banner-tile:nth-child(2){ left:25%; width:25%; }\n    .gruble-banner-inner > .gruble-banner-tile:nth-child(3){ left:50%; width:25%; }\n    .gruble-banner-inner > .gruble-banner-tile:nth-child(4){ left:75%; width:25%; }\n  }\n\n  .gruble-banner-headline{\n    position: static;\n    z-index: 5;\n    pointer-events: none;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 14px;\n    text-align: center;\n  }\n\n  .gruble-banner-headline-text{\n    margin: 0;\n    font-size: clamp(18px, 2.4vw, 38px);\n    line-height: 1.1;\n    letter-spacing: 0.2px;\n    color: rgba(255,255,255,.96);\n    text-shadow: 0 2px 10px rgba(0,0,0,.55), 0 10px 28px rgba(0,0,0,.35);\n    background: linear-gradient(to bottom, rgba(0,0,0,.40), rgba(0,0,0,.18));\n    border: 1px solid rgba(255,255,255,.14);\n    border-radius: 999px;\n    padding: 10px 16px;\n    backdrop-filter: blur(6px);\n    -webkit-backdrop-filter: blur(6px);\n    transition: opacity 420ms ease, transform 420ms ease;\n  }\n\n  .gruble-banner-headline-text.is-out{\n    opacity: 0;\n    transform: translateY(6px);\n  }\n\n  @media (min-width: 901px){\n    .gruble-banner-wrap{ gap: 0; }\n    .gruble-banner-headline{\n      position: absolute;\n      inset: 0;\n      align-items: flex-end;\n      justify-content: center;\n      padding: 0 14px 14px;\n    }\n  }\n\n  @media (max-width: 900px){\n    .gruble-banner-inner{ --grb-gap: 8px; border-radius: 14px; }\n    .gruble-banner-tile{ border-radius: 10px; }\n    .gruble-banner-headline-text{ padding: 8px 12px; font-size: clamp(16px, 4vw, 22px); }\n  }\n\n  .gruble-banner-tile{\n    position: relative;\n    display: block;\n    height: 100%;\n    width: 100%;\n    text-decoration: none;\n    border-radius: calc(var(--grb-r) - 8px);\n    overflow: hidden;\n    border: 1px solid var(--grb-stroke);\n    background-image: var(--grb-img);\n    background-size: cover;\n    background-position: center;\n    transform: translateZ(0);\n    transition: transform .35s ease, filter .35s ease, box-shadow .35s ease, border-color .35s ease;\n    box-shadow: var(--grb-shadow2);\n    outline: none;\n  }\n\n  .gruble-banner-tile::before{\n    content:\"\";\n    position:absolute; inset:0;\n    background:\n      radial-gradient(140px 90px at 18% 28%, rgba(255,255,255,.22), transparent 55%),\n      radial-gradient(170px 110px at 85% 30%, rgba(255,255,255,.14), transparent 60%),\n      linear-gradient(to bottom, rgba(0,0,0,.05), rgba(0,0,0,.32));\n    opacity: .95;\n    pointer-events:none;\n    transition: opacity .35s ease;\n  }\n\n  .gruble-banner-tile::after{\n    content:\"\";\n    position:absolute; inset:-20%;\n    background: linear-gradient(120deg, transparent 35%, rgba(255,255,255,.22) 50%, transparent 65%);\n    transform: translateX(-60%) rotate(0deg);\n    opacity: 0;\n    pointer-events:none;\n  }\n\n  .gruble-banner-tile{\n    filter: saturate(.92) contrast(.96) brightness(.90);\n  }\n\n  .gruble-banner-tile.is-active{\n    transform: scale(1.03);\n    filter: saturate(1.18) contrast(1.04) brightness(1.03);\n    border-color: rgba(255,255,255,.32);\n    box-shadow: 0 20px 60px rgba(0,0,0,.32);\n    z-index: 2;\n  }\n  .gruble-banner-tile.is-active::before{ opacity: .78; }\n  .gruble-banner-tile.is-active::after{\n    opacity: 1;\n    animation: gruble-banner-sweep 1.25s ease-out 0.1s 1;\n  }\n\n  .gruble-banner-tile.is-near{\n    filter: saturate(1.00) contrast(.98) brightness(.95);\n    transform: scale(1.01);\n  }\n\n  .gruble-banner-tile:hover,\n  .gruble-banner-tile:focus-visible{\n    transform: scale(1.035);\n    filter: saturate(1.22) contrast(1.05) brightness(1.05);\n    border-color: rgba(255,255,255,.42);\n    z-index: 3;\n  }\n\n  @keyframes gruble-banner-sweep{\n    from{ transform: translateX(-70%); }\n    to{ transform: translateX(70%); }\n  }\n\n  @media (prefers-reduced-motion: reduce){\n    .gruble-banner-tile, .gruble-banner-tile::before{ transition: none !important; }\n    .gruble-banner-tile::after{ animation: none !important; }\n    .gruble-banner-headline-text{ transition: none !important; }\n  }\n<\/style>\n\n<script>\n(function(){\n  var root = document.querySelector('.gruble-banner-inner');\n  if(!root) return;\n  var tiles = [].slice.call(root.querySelectorAll('.gruble-banner-tile'));\n  if(!tiles.length) return;\n  var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var idx = 0, timer = null, paused = false;\n  function setClasses(activeIndex){\n    tiles.forEach(function(t, i){\n      t.classList.toggle('is-active', i === activeIndex);\n      t.classList.toggle('is-near', Math.abs(i - activeIndex) === 1);\n    });\n  }\n  function next(){ idx = (idx + 1) % tiles.length; setClasses(idx); }\n  function start(){\n    if(reduceMotion){ setClasses(idx); return; }\n    if(timer) clearInterval(timer);\n    timer = setInterval(function(){ if(!paused) next(); }, 2600);\n    setClasses(idx);\n  }\n  function stop(){ if(timer) clearInterval(timer); timer = null; }\n  tiles.forEach(function(t, i){\n    t.addEventListener('pointerenter', function(){ paused = true; idx = i; setClasses(idx); });\n    t.addEventListener('pointerleave', function(){ paused = false; });\n    t.addEventListener('focus', function(){ paused = true; idx = i; setClasses(idx); });\n    t.addEventListener('blur', function(){ paused = false; });\n  });\n  start();\n  document.addEventListener('visibilitychange', function(){\n    if(document.hidden) stop();\n    else start();\n  });\n})();\n<\/script>\n\n<script>\n(function(){\n  var el = document.getElementById('grubleBannerPrompt');\n  if(!el) return;\n  var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var prompts = [\n    \"Hva har du lyst til \u00e5 gj\u00f8re i dag?\",\n    \"Hva vil du utforske i dag?\",\n    \"Klar for litt p\u00e5fyll?\",\n    \"Skal vi l\u00e6re noe nytt?\",\n    \"Hva frister i dag?\",\n    \"Litt klokere i dag?\",\n    \"Klar, ferdig, tenk!\",\n    \"Et lite eventyr for hjernen?\",\n    \"Start dagen med en tanke.\",\n    \"Hva skal vi bryne oss p\u00e5 i dag?\"\n  ];\n  var d = new Date();\n  var seed = d.getFullYear() * 10000 + (d.getMonth()+1) * 100 + d.getDate();\n  function shuffleWithSeed(array, seed){\n    var a = array.slice(), s = seed;\n    function random(){ s = (s * 9301 + 49297) % 233280; return s \/ 233280; }\n    for(var i = a.length - 1; i > 0; i--){\n      var j = Math.floor(random() * (i + 1));\n      var tmp = a[i]; a[i] = a[j]; a[j] = tmp;\n    }\n    return a;\n  }\n  var daily = shuffleWithSeed(prompts, seed);\n  var i = 0;\n  el.textContent = daily[i];\n  if(reduceMotion) return;\n  setInterval(function(){\n    el.classList.add('is-out');\n    setTimeout(function(){\n      i = (i + 1) % daily.length;\n      el.textContent = daily[i];\n      el.classList.remove('is-out');\n    }, 420);\n  }, 7000);\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0398f4e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0398f4e\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wide\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-6356b5f\" data-id=\"6356b5f\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5465f0b elementor-grid-1 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts\" data-id=\"5465f0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;classic_row_gap_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-45999 post type-post status-publish format-standard has-post-thumbnail hentry category-dobbel category-event category-gratis category-ukategorisert\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/footpadel\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/footpadel-300x169.jpg\" class=\"attachment-medium size-medium wp-image-46005\" alt=\"fotballspillere og robot p\u00e5 en fotballbane\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/footpadel-300x169.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel-1024x576.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel-768x432.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel-1536x864.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel-805x452.jpg 805w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel-1090x613.jpg 1090w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel-600x338.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/footpadel.jpg 1672w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/footpadel\/\" >\n\t\t\t\tFootpadel\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Verdens enkleste &laquo;fotballspill&raquo; &#8211; FOOTPADEL. Alle kan spille og alle kan vinne!<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-45323 post type-post status-publish format-standard has-post-thumbnail hentry category-dobbel category-gratis category-nyheter category-pop category-profilert category-spill category-topp category-ukategorisert\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/slipp-ballen\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-300x169.jpg\" class=\"attachment-medium size-medium wp-image-45355\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-300x169.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1024x576.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-768x432.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1536x864.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-805x452.jpg 805w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1090x613.jpg 1090w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-600x338.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball.jpg 1672w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/slipp-ballen\/\" >\n\t\t\t\tSlipp ballen\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Slipp ballen! Finn riktig fart og riktig sted. Bruk vinklene til din fordel. Klarer du \u00e5 komme inn p\u00e5 lista?<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-36265 post type-post status-publish format-standard has-post-thumbnail hentry category-dobbel category-europa category-geografi category-kart category-topp category-ukategorisert\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/europa-ministater\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"188\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-300x188.jpg\" class=\"attachment-medium size-medium wp-image-36462\" alt=\"kart over Europa\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-300x188.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-1024x640.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-768x480.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-1536x960.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-600x375.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb.jpg 1788w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/europa-ministater\/\" >\n\t\t\t\tEuropa med ministater\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Klarer du \u00e5 finne b\u00e5de store og sm\u00e5 land i Europa?<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-07fe164\" data-id=\"07fe164\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-87fae80 elementor-widget elementor-widget-html\" data-id=\"87fae80\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\" \/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n    <title>Rainbow Puzzle Light<\/title>\n    <!-- Poppins (som i Elementor-varianten) -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins&display=swap\" rel=\"stylesheet\">\n    <style>\n    \/*\n    ------------------------------------------------------------\n    SENTRAL FARGEKONFIGURASJON\n    ------------------------------------------------------------\n    *\/\n    :root {\n        --color-red: #e74c3c;\n        --color-blue: #1e90ff;\n        --color-yellow: #f1c40f;\n        --color-orange: #e67e22;\n        --color-pink: #ff8cbf;\n        --color-green: #28a745;\n        --color-black: #111111;\n        --color-white: #f5f5f5;\n\n        --border-red: #c0392b;\n        --border-blue: #1c6ea4;\n        --border-yellow: #d4ac0d;\n        --border-orange: #cf711f;\n        --border-pink: #e06699;\n        --border-green: #1e7e34;\n        --border-black: #000000;\n        --border-white: #d0d0d0;\n\n        --text-red: white;\n        --text-blue: white;\n        --text-yellow: #2e003e;  \n        --text-orange: white;\n        --text-pink: #2e003e;    \n        --text-green: white;\n        --text-black: white;\n        --text-white: #2e003e;\n\n        --bg-color: #2e003e; \n        --global-text-color: white;\n    }\n\n    \/*\n    ------------------------------------------------------------\n    GLOBAL STIL\n    ------------------------------------------------------------\n    *\/\n    body {\n        font-family: 'Poppins', sans-serif !important;\n        font-weight: 400 !important;\n        color: var(--global-text-color) !important;\n        margin: 0 !important;\n        padding: 0 !important;\n        text-align: center !important;\n        background-color: var(--bg-color);\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n\n    strong, b { font-weight: 700 !important; }\n    h1, h2, h3, h4, h5, h6 {\n        font-family: 'Poppins', sans-serif !important;\n        font-weight: 700 !important;\n    }\n\n    \/*\n    ------------------------------------------------------------\n    SPILLBRETT OG RUTER (5x5)\n    ------------------------------------------------------------\n    *\/\n    .game-container {\n        display: grid;\n        grid-template-columns: repeat(5, 1fr);\n        gap: 2px;\n        margin: 20px auto;\n        width: 100%;\n        max-width: 500px;\n    }\n    .game-cell {\n        width: 100%;\n        aspect-ratio: 1 \/ 1;\n        cursor: pointer;\n        border-radius: 8px;\n        transition: background-color 0.3s;\n        box-shadow: 0 0 3px rgba(255, 255, 255, 0.3);\n    }\n    .game-cell:hover {\n        box-shadow: 0 0 8px rgba(255, 255, 255, 0.7);\n        transform: scale(1.02);\n    }\n\n    .message-board {\n        margin: 20px;\n        font-size: 16px;\n        min-height: 50px;\n    }\n    .message-board:empty { display: none; }\n\n    .color-red    { background-color: var(--color-red); }\n    .color-blue   { background-color: var(--color-blue); }\n    .color-yellow { background-color: var(--color-yellow); }\n    .color-orange { background-color: var(--color-orange); }\n    .color-pink   { background-color: var(--color-pink); }\n    .color-green  { background-color: var(--color-green); }\n    .color-black  { background-color: var(--color-black); }\n    .color-white  { background-color: var(--color-white); }\n\n    .subtitle {\n        color: var(--color-blue);\n        font-size: 1.2em;\n    }\n\n    \/* Hovedtittel over spillet: kicker + hovedtittel p\u00e5 hver sin linje *\/\n    .topline {\n        margin: 10px 0 14px;\n        padding: 0 12px;\n        box-sizing: border-box;\n        opacity: 1;\n        color: white;\n        text-align: center;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 4px;\n        line-height: 1.15;\n    }\n    .topline-kicker {\n        font-size: clamp(13px, 3.5vw, 17px);\n        font-weight: 700;\n        letter-spacing: 0.08em;\n        line-height: 1.2;\n        opacity: 0.9;\n    }\n    .topline-main {\n        font-size: clamp(28px, 7.2vw, 44px);\n        font-weight: 900;\n        letter-spacing: 0.2px;\n        line-height: 1.08;\n    }\n\n    \/*\n    ------------------------------------------------------------\n    KNAPPER\n    ------------------------------------------------------------\n    *\/\n    .start-button {\n        background-color: #8e44ad !important;\n        color: white !important;\n        border: 2px solid #732d91 !important;\n        padding: 12px 24px !important;\n        font-size: 18px !important;\n        border-radius: 50px !important;\n        cursor: pointer !important;\n        margin: 20px auto !important;\n        text-decoration: none !important;\n        box-shadow: 0 8px 15px rgba(0, 0, 0, 0.4) !important;\n        transition: background-color 0.3s, box-shadow 0.3s !important;\n        display: flex !important;\n        align-items: center;\n        justify-content: center;\n        width: fit-content;\n        outline: none;\n    }\n    .start-button:hover {\n        background-color: #732d91 !important;\n        box-shadow: 0 12px 20px rgba(0, 0, 0, 0.5) !important;\n    }\n\n    \/* Flyttet ?-knapp nederst (litt mindre) *\/\n    .help-button {\n        padding: 10px 18px !important;\n        font-size: 18px !important;\n        margin: 10px auto 20px !important;\n        min-width: 56px;\n        border-radius: 999px !important;\n        line-height: 1;\n    }\n\n    \/*\n    ------------------------------------------------------------\n    POENGVISNING\n    ------------------------------------------------------------\n    *\/\n    #scoreDisplay {\n        font-size: 20px;\n        margin: 10px auto;\n        padding: 8px 16px;\n        border-radius: 25px;\n        width: 120px;\n        display: block !important;\n        transition: background-color 0.3s, color 0.3s, box-shadow 0.3s, border 0.3s;\n        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);\n        border: 2px solid transparent;\n        text-align: center !important;\n        margin: 0 auto !important;\n    }\n    #scoreDisplay.color-red {\n        background-color: var(--color-red);\n        color: var(--text-red);\n        border: 2px solid var(--border-red);\n    }\n    #scoreDisplay.color-blue {\n        background-color: var(--color-blue);\n        color: var(--text-blue);\n        border: 2px solid var(--border-blue);\n    }\n    #scoreDisplay.color-yellow {\n        background-color: var(--color-yellow);\n        color: var(--text-yellow);\n        border: 2px solid var(--border-yellow);\n    }\n    #scoreDisplay.color-orange {\n        background-color: var(--color-orange);\n        color: var(--text-orange);\n        border: 2px solid var(--border-orange);\n    }\n    #scoreDisplay.color-pink {\n        background-color: var(--color-pink);\n        color: var(--text-pink);\n        border: 2px solid var(--border-pink);\n    }\n    #scoreDisplay.color-green {\n        background-color: var(--color-green);\n        color: var(--text-green);\n        border: 2px solid var(--border-green);\n    }\n    #scoreDisplay.color-black {\n        background-color: var(--color-black);\n        color: var(--text-black);\n        border: 2px solid var(--border-black);\n    }\n    #scoreDisplay.color-white {\n        background-color: var(--color-white);\n        color: var(--text-white);\n        border: 2px solid var(--border-white);\n    }\n\n    \/* Liten \"dagens rekord\" rute p\u00e5 forsiden *\/\n    .daily-top-card {\n        margin: 10px auto 8px;\n        width: fit-content;\n        max-width: calc(100% - 24px);\n        padding: 8px 14px;\n        border-radius: 999px;\n        border: 2px solid rgba(255,255,255,0.22);\n        background: rgba(255,255,255,0.10);\n        color: white;\n        font-size: 14px;\n        line-height: 1.2;\n        box-shadow: 0 6px 12px rgba(0,0,0,0.25);\n        box-sizing: border-box;\n    }\n    .daily-top-card {\n        cursor: pointer;\n    }\n    .daily-top-card:focus {\n        outline: 3px solid rgba(255,255,255,0.35);\n        outline-offset: 2px;\n    }\n    .daily-top-card strong { font-weight: 700; }\n    .daily-top-card.loading { opacity: 0.75; font-style: italic; }\n    .daily-top-card.beat { animation: dailyTopBeat 1.1s ease-in-out infinite; }\n    @keyframes dailyTopBeat {\n        0%, 100% { transform: scale(1); }\n        50% { transform: scale(1.05); }\n    }\n\n    \/* Dagens beste + krone-knapp p\u00e5 samme linje *\/\n    .daily-top-row {\n        margin: 10px auto 8px;\n        width: fit-content;\n        max-width: calc(100% - 24px);\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 10px;\n    }\n    .daily-top-row .daily-top-card {\n        margin: 0;\n    }\n    .daily-top-rank {\n        \/* Reset typisk WordPress\/Elementor button-styling *\/\n        all: unset;\n        -webkit-appearance: none;\n        appearance: none;\n\n        width: 36px;\n        height: 36px;\n        border-radius: 999px;\n        border: 2px solid rgba(255,255,255,0.22) !important;\n        background: rgba(255,255,255,0.10) !important;\n        color: white !important;\n        box-shadow: 0 6px 12px rgba(0,0,0,0.25) !important;\n        display: inline-flex !important;\n        align-items: center;\n        justify-content: center;\n        cursor: pointer !important;\n        padding: 0 !important;\n        line-height: 1;\n        box-sizing: border-box;\n        font-weight: 900;\n        font-size: 16px;\n        letter-spacing: 0.2px;\n    }\n    .daily-top-rank:hover {\n        background: rgba(255,255,255,0.16) !important;\n        transform: translateY(-1px);\n    }\n    .daily-top-rank:active { transform: translateY(0); }\n    .daily-top-rank:focus {\n        outline: 3px solid rgba(255,255,255,0.35);\n        outline-offset: 2px;\n    }\n    .daily-top-crown {\n        \/* Reset typisk WordPress\/Elementor button-styling *\/\n        all: unset;\n        -webkit-appearance: none;\n        appearance: none;\n\n        width: 36px;\n        height: 36px;\n        border-radius: 999px;\n        border: 2px solid rgba(255,255,255,0.22) !important;\n        background: rgba(255,255,255,0.10) !important;\n        color: white !important;\n        box-shadow: 0 6px 12px rgba(0,0,0,0.25) !important;\n        display: inline-flex !important;\n        align-items: center;\n        justify-content: center;\n        cursor: pointer !important;\n        padding: 0 !important;\n        line-height: 1;\n        box-sizing: border-box;\n    }\n    .daily-top-crown:hover {\n        background: rgba(255,255,255,0.16) !important;\n        transform: translateY(-1px);\n    }\n    .daily-top-crown:active {\n        transform: translateY(0);\n    }\n    .daily-top-crown:focus {\n        outline: 3px solid rgba(255,255,255,0.35);\n        outline-offset: 2px;\n    }\n    .daily-top-crown svg {\n        width: 18px;\n        height: 18px;\n        fill: currentColor;\n        display: block;\n    }\n\n    \/*\n    ------------------------------------------------------------\n    INSTRUKSJONS-POPUP\n    ------------------------------------------------------------\n    *\/\n    .instructions-popup {\n        display: none;\n        position: fixed;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        background-color: #ffffff;\n        color: #2e003e;\n        padding: 20px;\n        border-radius: 10px;\n        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);\n        z-index: 1000;\n        max-width: 80%;\n        text-align: left;\n        overflow-y: auto;\n        max-height: 80vh;\n    }\n    .instructions-popup h2,\n    .instructions-popup h3,\n    .instructions-popup p,\n    .instructions-popup ul,\n    .instructions-popup li {\n        color: #2e003e;\n    }\n    .instructions-popup button {\n        margin-top: 15px;\n        background-color: #8e44ad !important;\n        color: white !important;\n        border: none !important;\n        padding: 10px 20px !important;\n        border-radius: 25px !important;\n        cursor: pointer !important;\n        transition: background-color 0.3s !important;\n    }\n    .instructions-popup button:hover { background-color: #732d91 !important; }\n    .overlay {\n        display: none;\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        background-color: rgba(0, 0, 0, 0.5);\n        z-index: 999;\n    }\n\n    \/* Modal for dagens beste (topp 5 \/ i g\u00e5r topp 3) *\/\n    .daily-modal {\n        display: none;\n        position: fixed;\n        left: 50%;\n        top: 50%;\n        transform: translate(-50%, -50%);\n        background: radial-gradient(120% 120% at 50% 0%, rgba(142, 68, 173, 0.14), rgba(255,255,255,1) 55%);\n        color: #2e003e !important;\n        padding: 18px;\n        border-radius: 16px;\n        box-shadow: 0 16px 40px rgba(0, 0, 0, 0.35);\n        z-index: 2000;\n        width: 92%;\n        max-width: 520px;\n        text-align: center !important;\n        overflow-y: auto;\n        max-height: 80vh;\n        box-sizing: border-box;\n        border: 3px solid rgba(142, 68, 173, 0.28);\n    }\n    .rank-modal {\n        max-width: 460px;\n    }\n    \/* S\u00f8rg for at ekstern CSS ikke gj\u00f8r teksten hvit *\/\n    .daily-modal, .daily-modal h2, .daily-modal h3, .daily-modal p, .daily-modal div, .daily-modal span {\n        color: #2e003e !important;\n    }\n    .daily-modal.is-open {\n        animation: dailyModalIn 240ms ease-out;\n    }\n    @keyframes dailyModalIn {\n        0% { transform: translate(-50%, -50%) scale(0.94); opacity: 0; }\n        100% { transform: translate(-50%, -50%) scale(1); opacity: 1; }\n    }\n    .daily-modal h2 {\n        margin: 0 0 6px 0;\n        font-size: 22px;\n        letter-spacing: 0.2px;\n        text-shadow: 0 6px 18px rgba(142, 68, 173, 0.18);\n    }\n    .daily-modal .subtitle {\n        margin: 0 0 14px 0;\n        font-size: 13px;\n        opacity: 0.85;\n    }\n    .daily-modal h3 {\n        margin: 16px 0 10px 0;\n        font-size: 15px;\n        text-transform: uppercase;\n        letter-spacing: 0.6px;\n        opacity: 0.9;\n    }\n    .score-badges {\n        display: flex;\n        justify-content: center;\n        gap: 10px;\n        flex-wrap: wrap;\n        margin: 0 auto;\n    }\n    .score-badges.leader-row {\n        margin: 0 auto 12px;\n    }\n    .score-badges.rest-row {\n        margin: 0 auto;\n    }\n    .score-badge {\n        display: inline-flex !important;\n        align-items: center;\n        justify-content: center;\n        padding: 10px 14px;\n        border-radius: 999px;\n        font-weight: 800;\n        font-size: 16px;\n        line-height: 1;\n        min-width: 92px;\n        box-shadow: 0 10px 18px rgba(0,0,0,0.12);\n        border: 2px solid rgba(46,0,62,0.14);\n        transform: translateY(0);\n        animation: badgePop 520ms ease-out both;\n        flex-direction: column !important;\n        text-align: center !important;\n    }\n    .score-badge .score-number {\n        font-size: 18px !important;\n        line-height: 1 !important;\n        display: block !important;\n    }\n    .score-badge.is-leader {\n        min-width: 126px !important;\n        padding: 12px 18px !important;\n    }\n    .score-badge.is-leader .score-number {\n        font-size: 22px !important;\n    }\n    .score-badge.is-leader small {\n        font-size: 12px !important;\n        margin-top: 8px !important;\n    }\n    .score-badge.is-highlight {\n        outline: 4px solid rgba(46,0,62,0.55);\n        outline-offset: 2px;\n        box-shadow: 0 14px 26px rgba(0,0,0,0.18);\n    }\n    .score-badge.is-yesterday .score-number {\n        font-size: 16px !important;\n    }\n    @keyframes badgePop {\n        0% { transform: translateY(6px) scale(0.96); opacity: 0; }\n        100% { transform: translateY(0) scale(1); opacity: 1; }\n    }\n    .score-badge small {\n        display: block !important;\n        font-size: 11px;\n        font-weight: 600;\n        opacity: 0.85;\n        margin-top: 0;\n        margin-top: 6px;\n        white-space: nowrap;\n    }\n    .rank-1 { background: linear-gradient(135deg, #ffd700, #ffb400); }\n    .rank-2 { background: linear-gradient(135deg, #e6e6e6, #bfbfbf); }\n    .rank-3 { background: linear-gradient(135deg, #e8c39e, #c79b6d); }\n    .rank-4 { background: linear-gradient(135deg, #cbb2ff, #8f6bff); color: white !important; }\n    .rank-5 { background: linear-gradient(135deg, #7dd3ff, #1e90ff); color: white !important; }\n    .empty-hint {\n        margin: 6px 0 0;\n        font-size: 14px;\n        opacity: 0.85;\n    }\n    .daily-modal .modal-actions {\n        margin-top: 16px;\n        display: flex;\n        justify-content: center;\n    }\n    .daily-modal button {\n        background-color: #8e44ad !important;\n        color: white !important;\n        border: none !important;\n        padding: 10px 20px !important;\n        border-radius: 999px !important;\n        cursor: pointer !important;\n        box-shadow: 0 10px 18px rgba(142, 68, 173, 0.22);\n    }\n    .daily-modal button:hover { background-color: #732d91 !important; }\n\n    \/*\n    ------------------------------------------------------------\n    END SCREEN (erstatter brett etter fullf\u00f8rt spill)\n    ------------------------------------------------------------\n    *\/\n    .end-content {\n        margin: 20px auto;\n        width: 100%;\n        max-width: 500px;\n        min-height: 320px;\n        border-radius: 12px;\n        padding: 18px;\n        border: 2px solid rgba(255,255,255,0.35);\n        display: none;\n        align-items: center;\n        justify-content: center;\n        text-align: center;\n        box-shadow: 0 0 10px rgba(255,255,255,0.15);\n        background: rgba(255,255,255,0.06);\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n        box-sizing: border-box;\n    }\n    \n    .score-display-row {\n        margin-top: 20px;\n        display: flex;\n        gap: 12px;\n        justify-content: center;\n        align-items: stretch;\n        width: 100%;\n        max-width: 500px;\n        flex-wrap: wrap;\n    }\n    \n    .score-window {\n        padding: 14px 16px;\n        background: rgba(46,0,62,0.12);\n        border-radius: 10px;\n        border: 2px solid rgba(46,0,62,0.2);\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        box-shadow: 0 4px 8px rgba(0,0,0,0.15);\n        flex: 1;\n        min-width: 120px;\n        max-width: 140px;\n    }\n    \n    .score-window.player-score {\n        flex: 1.4;\n        min-width: 160px;\n        max-width: 200px;\n        background: rgba(46,0,62,0.18);\n        border-width: 3px;\n        padding: 18px 20px;\n    }\n    \n    .score-window h3 {\n        margin: 0 0 8px 0;\n        font-size: 13px;\n        font-weight: 600;\n        opacity: 0.9;\n        text-transform: uppercase;\n        letter-spacing: 0.5px;\n    }\n    \n    .score-window.player-score h3 {\n        font-size: 15px;\n        margin-bottom: 10px;\n    }\n    \n    .score-window .score-value {\n        font-size: 24px;\n        font-weight: 700;\n        margin: 0;\n        line-height: 1.2;\n    }\n    \n    .score-window.player-score .score-value {\n        font-size: 32px;\n    }\n    \n    .score-window .new-record {\n        color: #c0392b;\n        font-weight: 700;\n        animation: newRecordPulse 1.5s ease-in-out infinite;\n        position: relative;\n    }\n    \n    @keyframes newRecordPulse {\n        0%, 100% {\n            transform: scale(1);\n            text-shadow: 0 0 0 rgba(192, 57, 43, 0);\n        }\n        50% {\n            transform: scale(1.08);\n            text-shadow: 0 0 20px rgba(192, 57, 43, 0.8), 0 0 30px rgba(192, 57, 43, 0.6);\n        }\n    }\n    \n    .score-window.player-score.new-record-window {\n        animation: recordWindowGlow 2s ease-in-out infinite;\n        border-color: rgba(192, 57, 43, 0.6);\n    }\n    \n    @keyframes recordWindowGlow {\n        0%, 100% {\n            box-shadow: 0 4px 8px rgba(0,0,0,0.15), 0 0 0 rgba(192, 57, 43, 0);\n            border-color: rgba(46,0,62,0.2);\n        }\n        50% {\n            box-shadow: 0 4px 8px rgba(0,0,0,0.15), 0 0 25px rgba(192, 57, 43, 0.6), 0 0 40px rgba(192, 57, 43, 0.4);\n            border-color: rgba(192, 57, 43, 0.8);\n        }\n    }\n    \n    .score-window .loading {\n        opacity: 0.7;\n        font-style: italic;\n        font-size: 12px;\n        margin: 0;\n    }\n\n    \/*\n    ------------------------------------------------------------\n    ADMIN-KONTROLLER (vises kun for innlogget admin)\n    ------------------------------------------------------------\n    *\/\n    .admin-controls {\n        width: 100%;\n        max-width: 500px;\n        margin-top: 10px;\n        padding: 12px;\n        border-radius: 10px;\n        background: rgba(46,0,62,0.10);\n        border: 2px dashed rgba(46,0,62,0.25);\n        box-sizing: border-box;\n    }\n    .admin-controls-row {\n        display: flex;\n        gap: 10px;\n        justify-content: center;\n        align-items: center;\n        flex-wrap: wrap;\n    }\n    .admin-controls input {\n        width: 180px;\n        max-width: 100%;\n        padding: 10px 12px;\n        border-radius: 999px;\n        border: 1px solid rgba(46,0,62,0.3);\n        background: rgba(255,255,255,0.9);\n        color: #2e003e;\n        text-align: center;\n        font-size: 14px;\n        font-family: 'Poppins', sans-serif;\n        outline: none;\n        box-sizing: border-box;\n    }\n    .admin-controls button {\n        padding: 10px 14px;\n        border-radius: 999px;\n        border: 1px solid rgba(46,0,62,0.35);\n        background: rgba(46,0,62,0.14);\n        color: #2e003e;\n        cursor: pointer;\n        font-family: 'Poppins', sans-serif;\n        font-size: 14px;\n        box-sizing: border-box;\n    }\n    .admin-controls button:hover {\n        background: rgba(46,0,62,0.22);\n    }\n    .admin-status {\n        margin: 8px 0 0;\n        font-size: 12px;\n        opacity: 0.85;\n        min-height: 16px;\n    }\n\n    .end-content-inner {\n        width: 100%;\n        display: flex;\n        flex-direction: column;\n        gap: 14px;\n        align-items: center;\n        justify-content: center;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n        box-sizing: border-box;\n    }\n\n    .store-badges {\n        margin-top: 10px;\n        display: flex;\n        gap: 12px;\n        justify-content: center;\n        align-items: center;\n        flex-wrap: wrap;\n    }\n    .store-badges a {\n        text-decoration: none;\n        display: inline-block;\n        transition: transform 0.2s, opacity 0.2s;\n    }\n    .store-badges a:hover {\n        transform: scale(1.05);\n        opacity: 0.9;\n    }\n    .store-badges a:active {\n        transform: scale(0.98);\n    }\n    .store-badges img {\n        height: 44px; \/* samme h\u00f8yde = \"samme st\u00f8rrelse\" visuelt *\/\n        width: auto;\n        display: block;\n        border-radius: 8px;\n        box-shadow: 0 6px 12px rgba(0,0,0,0.25);\n        background: rgba(255,255,255,0.08);\n    }\n\n\n    @media (max-width: 400px) {\n        .game-container {\n            max-width: 100%;\n            padding: 0 12px;\n            box-sizing: border-box;\n        }\n        .start-button { padding: 8px 16px !important; font-size: 16px !important; }\n        \n        .score-display-row {\n            flex-direction: column;\n            align-items: center;\n        }\n        .score-window {\n            width: 100%;\n            max-width: 100%;\n        }\n        .score-window.player-score {\n            order: -1; \/* Vis spillerens score f\u00f8rst p\u00e5 mobile *\/\n        }\n    }\n    \n    \/* Tekst-wrap generelt *\/\n    p, h1, h2, h3, h4, h5, h6, div, span {\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n        max-width: 100%;\n        box-sizing: border-box;\n    }\n    <\/style>\n<\/head>\n<body>\n\n<p class=\"topline\">\n    <span class=\"topline-kicker\">Dagens<\/span>\n    <span class=\"topline-main\">Rainbow Puzzle<\/span>\n<\/p>\n\n<div class=\"daily-top-row\" aria-label=\"Dagens beste\">\n    <button type=\"button\" id=\"dailyTopRankBtn\" class=\"daily-top-rank\" aria-label=\"Din plassering i dag\">?<\/button>\n    <div id=\"dailyTopCard\" class=\"daily-top-card loading\" aria-live=\"polite\" role=\"button\" tabindex=\"0\">Laster dagens beste\u2026<\/div>\n    <button type=\"button\" id=\"dailyTopCrown\" class=\"daily-top-crown\" aria-label=\"Se flere rekorder (topp 5 i dag og topp 3 i g\u00e5r)\">\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n            <path d=\"M3 7l4 4 5-7 5 7 4-4v11H3V7zm2 9h14v-5.2l-2.7 2.7L12 6.9 7.7 13.5 5 10.8V16z\"\/>\n        <\/svg>\n    <\/button>\n<\/div>\n<div id=\"scoreDisplay\" class=\"color-red\" tabindex=\"-1\">0<\/div>\n<div class=\"message-board\" id=\"messageBoard\" tabindex=\"-1\"><\/div>\n\n<div id=\"gameContainer\" class=\"game-container\" data-post-id=\"post5x5\"><\/div>\n<div id=\"endContent\" class=\"end-content\" aria-live=\"polite\"><\/div>\n\n<button class=\"start-button\" onclick=\"initGame()\" id=\"startButton\" tabindex=\"0\">Nytt fors\u00f8k<\/button>\n\n<button class=\"start-button help-button\" onclick=\"toggleInstructions()\" id=\"instructionsButton\" tabindex=\"0\">?<\/button>\n\n<div class=\"overlay\" id=\"overlay\" onclick=\"toggleInstructions()\"><\/div>\n<div class=\"instructions-popup\" id=\"instructionsPopup\">\n    <h2>Forklaring<\/h2>\n    <p>N\u00e5r du klikker p\u00e5 en farge, eller p\u00e5 en gruppe med samme farge, smittes rutene som ligger inntil, og f\u00e5r samme farge som den fargen du klikket p\u00e5.<\/p>\n    <p>Spillet er ferdig n\u00e5r alle rutene har samme farge.<\/p>\n    <button onclick=\"toggleInstructions()\">Lukk<\/button>\n<\/div>\n\n<!-- Modal: Dagens beste (topp 5) + i g\u00e5r (topp 3) -->\n<div class=\"overlay\" id=\"dailyOverlay\"><\/div>\n<div class=\"daily-modal\" id=\"dailyModal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Dagens beste\">\n    <h2>Dagens beste<\/h2>\n    <p class=\"subtitle\">Topp 5 i dag + topp 3 i g\u00e5r<\/p>\n    <div id=\"dailyModalContent\">Laster\u2026<\/div>\n    <div class=\"modal-actions\">\n        <button type=\"button\" id=\"dailyModalClose\">Lukk<\/button>\n    <\/div>\n<\/div>\n\n<!-- Modal: Plassering-info (n\u00e5r du er utenfor topp 5) -->\n<div class=\"daily-modal rank-modal\" id=\"rankModal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Plassering\">\n    <h2>Plassering<\/h2>\n    <p class=\"subtitle\">Slik f\u00e5r du et plassnummer<\/p>\n    <div id=\"rankModalContent\">\n        Kom inn p\u00e5 topp 5-lista i dag, s\u00e5 f\u00e5r du et plassnummer her.\n    <\/div>\n    <div class=\"modal-actions\">\n        <button type=\"button\" id=\"rankModalClose\">Lukk<\/button>\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ Spillvariabler\n    let totalScore        = 0;\n    let colors            = [];\n    let isAnimating       = false;\n    let currentFocusIndex = 0;\n    let isGameOver        = false;\n\n    \/\/ DOM-elementer\n    const gameContainer      = document.getElementById('gameContainer');\n    const messageBoard       = document.getElementById('messageBoard');\n    const startButton        = document.getElementById('startButton');\n    const instructionsButton = document.getElementById('instructionsButton');\n    const scoreDisplay       = document.getElementById('scoreDisplay');\n    const dailyTopCard       = document.getElementById('dailyTopCard');\n    const dailyTopCrown      = document.getElementById('dailyTopCrown');\n    const dailyTopRankBtn    = document.getElementById('dailyTopRankBtn');\n    const endContent         = document.getElementById('endContent');\n\n    \/\/ === 5x5 KONFIG ===\n    const GRID_SIZE    = 5;\n    const TOTAL_CELLS  = GRID_SIZE * GRID_SIZE;\n\n    const colorList = ['red', 'blue', 'yellow', 'orange', 'pink', 'green', 'black', 'white'];\n\n    \/\/ --- Dagens brett (deterministisk per dag) ---\n    \/\/ Bruker Europe\/Oslo slik at \"dagens brett\" skifter ved midnatt i Norge.\n    function getOsloDateKey() {\n        const dtf = new Intl.DateTimeFormat('en-CA', {\n            timeZone: 'Europe\/Oslo',\n            year: 'numeric',\n            month: '2-digit',\n            day: '2-digit'\n        });\n        \/\/ en-CA gir YYYY-MM-DD\n        return dtf.format(new Date());\n    }\n\n    function hashStringToUint32(str) {\n        \/\/ enkel 32-bit hash (FNV-1a-ish)\n        let h = 2166136261;\n        for (let i = 0; i < str.length; i++) {\n            h ^= str.charCodeAt(i);\n            h = Math.imul(h, 16777619);\n        }\n        return h >>> 0;\n    }\n\n    function mulberry32(seed) {\n        let a = seed >>> 0;\n        return function () {\n            a |= 0;\n            a = (a + 0x6D2B79F5) | 0;\n            let t = Math.imul(a ^ (a >>> 15), 1 | a);\n            t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n            return ((t ^ (t >>> 14)) >>> 0) \/ 4294967296;\n        };\n    }\n\n    function generateDailyBoardColors() {\n        const postId = gameContainer?.dataset?.postId || 'default';\n        const dateKey = getOsloDateKey();\n        const seed = hashStringToUint32(`rainbowpuzzle|${postId}|${dateKey}`);\n        const rnd = mulberry32(seed);\n\n        \/\/ Garant\u00e9r fordeling: alle 8 farger med 3+3+3+3+3+3+3+4 = 25 celler\n        \/\/ Velg tilfeldig (men deterministisk) hvilken farge som f\u00e5r 4 (resten f\u00e5r 3)\n        const fourColorIdx = Math.floor(rnd() * colorList.length);\n        const colorCounts = [];\n        for (let i = 0; i < colorList.length; i++) {\n            colorCounts.push(i === fourColorIdx ? 4 : 3);\n        }\n\n        \/\/ Bygg en liste med alle farger i riktig antall\n        const colorPool = [];\n        for (let i = 0; i < colorList.length; i++) {\n            for (let j = 0; j < colorCounts[i]; j++) {\n                colorPool.push(colorList[i]);\n            }\n        }\n\n        \/\/ Stokk colorPool deterministisk (Fisher-Yates shuffle med seed)\n        for (let i = colorPool.length - 1; i > 0; i--) {\n            const j = Math.floor(rnd() * (i + 1));\n            [colorPool[i], colorPool[j]] = [colorPool[j], colorPool[i]];\n        }\n\n        \/\/ Fyll brettet med stokket liste\n        const out = colorPool.slice();\n\n        \/\/ Forbedre spredning: minimer like-farge naboer (reduser sammenhengende klynger)\n        \/\/ Vi gj\u00f8r en deterministisk lokal-s\u00f8k (hill-climb) basert p\u00e5 seed.\n        \/\/ VIKTIG: Vi bytter kun mellom celler som har samme farge-telling, s\u00e5 fordelingen bevares.\n        const neighborsOf = (index) => {\n            const row = Math.floor(index \/ GRID_SIZE);\n            const col = index % GRID_SIZE;\n            const outIdx = [];\n            if (row > 0) outIdx.push(index - GRID_SIZE);\n            if (row < GRID_SIZE - 1) outIdx.push(index + GRID_SIZE);\n            if (col > 0) outIdx.push(index - 1);\n            if (col < GRID_SIZE - 1) outIdx.push(index + 1);\n            return outIdx;\n        };\n\n        const localMatches = (index, color) => {\n            \/\/ Hvor mange naboer (4-retning) som har samme farge\n            let m = 0;\n            const nbs = neighborsOf(index);\n            for (let k = 0; k < nbs.length; k++) {\n                if (out[nbs[k]] === color) m++;\n            }\n            return m;\n        };\n\n        \/\/ Antall iterasjoner er lite (5x5), men nok til \u00e5 redusere klynger merkbart.\n        const ITERATIONS = 2500;\n        for (let t = 0; t < ITERATIONS; t++) {\n            const i = Math.floor(rnd() * TOTAL_CELLS);\n            const j = Math.floor(rnd() * TOTAL_CELLS);\n            if (i === j) continue;\n\n            const colorI = out[i];\n            const colorJ = out[j];\n\n            \/\/ Bytt kun hvis fargene er ulike (bevarer fordelingen)\n            if (colorI === colorJ) continue;\n\n            const beforeI = localMatches(i, colorI);\n            const beforeJ = localMatches(j, colorJ);\n            const afterI = localMatches(i, colorJ);\n            const afterJ = localMatches(j, colorI);\n\n            \/\/ Godta hvis totalt antall matcher reduseres, eller av og til hvis likt (litt \"st\u00f8y\")\n            const totalBefore = beforeI + beforeJ;\n            const totalAfter = afterI + afterJ;\n            if (totalAfter < totalBefore || (totalAfter === totalBefore && rnd() < 0.06)) {\n                out[i] = colorJ;\n                out[j] = colorI;\n            }\n        }\n\n        \/\/ Unng\u00e5 \"ferdig brett\" (alle samme farge) - dette skal ikke skje med v\u00e5r garanterte fordeling,\n        \/\/ men vi sjekker likevel for sikkerhet\n        const first = out[0];\n        const allSame = out.every(c => c === first);\n        if (allSame) {\n            \/\/ Dette skal ikke skje, men hvis det gj\u00f8r det, endre en celle\n            out[TOTAL_CELLS - 1] = colorList[(colorList.indexOf(first) + 1) % colorList.length];\n        }\n\n        return out;\n    }\n\n    function getEndLevel(score) {\n        if (score <= 1000) return 1; \/\/ 0\u20131000\n        if (score <= 2000) return 2; \/\/ 1001\u20132000\n        if (score <= 3000) return 3; \/\/ 2001\u20133000\n        return 4;                    \/\/ 3001+\n    }\n\n    function escapeHtml(str) {\n        return String(str)\n            .replaceAll('&', '&amp;')\n            .replaceAll('<', '&lt;')\n            .replaceAll('>', '&gt;')\n            .replaceAll('\"', '&quot;')\n            .replaceAll(\"'\", '&#039;');\n    }\n\n    \/\/ === DAGENS\/G\u00c5RSDAGENS H\u00d8YESTE SCORE (WordPress REST API) ===\n    let cachedTodayTop = 0;\n    let lastCompletedScore = null; \/\/ siste fullf\u00f8rte score (denne runden)\n    let modalHighlightScore = null;\n    const BEST_SCORE_LS_KEY = 'rainbowpuzzle:bestScore'; \/\/ per nettleser, per dag\n\n    function updateBestScoreForToday(score) {\n        try {\n            const dateKey = getOsloDateKey();\n            const s = Math.floor(Number(score));\n            if (!Number.isFinite(s) || s < 0) return null;\n\n            let best = s;\n            const raw = localStorage.getItem(BEST_SCORE_LS_KEY);\n            if (raw) {\n                const obj = JSON.parse(raw);\n                if (obj && obj.dateKey === dateKey && Number.isFinite(Number(obj.bestScore))) {\n                    best = Math.max(best, Math.floor(Number(obj.bestScore)));\n                }\n            }\n\n            const payload = { dateKey, bestScore: best };\n            localStorage.setItem(BEST_SCORE_LS_KEY, JSON.stringify(payload));\n            return best;\n        } catch (e) {\n            \/\/ localStorage kan v\u00e6re blokkert i enkelte milj\u00f8er\n            console.warn('Kunne ikke lagre score lokalt:', e);\n            return null;\n        }\n    }\n\n    function loadBestScoreForToday() {\n        try {\n            const dateKey = getOsloDateKey();\n            const raw = localStorage.getItem(BEST_SCORE_LS_KEY);\n            if (!raw) return null;\n            const obj = JSON.parse(raw);\n            if (!obj || obj.dateKey !== dateKey) {\n                \/\/ ikke overf\u00f8r til neste dag\n                localStorage.removeItem(BEST_SCORE_LS_KEY);\n                return null;\n            }\n            const s = Number(obj.bestScore);\n            return Number.isFinite(s) ? Math.floor(s) : null;\n        } catch (e) {\n            console.warn('Kunne ikke lese lagret score:', e);\n            return null;\n        }\n    }\n\n    function setDailyRankBadge(rank) {\n        if (!dailyTopRankBtn) return;\n        const r = Number(rank);\n        const inTop5 = Number.isFinite(r) && r >= 1 && r <= 5;\n        dailyTopRankBtn.textContent = inTop5 ? String(r) : '?';\n        dailyTopRankBtn.dataset.rank = inTop5 ? String(r) : '';\n        dailyTopRankBtn.setAttribute(\n            'aria-label',\n            inTop5 ? `Din plassering i dag: ${r}. Trykk for \u00e5 se lista.` : 'Du er ikke p\u00e5 topp 5 i dag. Trykk for info.'\n        );\n    }\n\n    async function refreshDailyRankBadge(score) {\n        \/\/ score her er \"din score vi rangerer etter\" (vi bruker n\u00e5 beste score i dag)\n        lastCompletedScore = Number(score);\n        try {\n            const { today } = await fetchDailyLeaderboard();\n            const uniqToday = Array.from(new Set(today)).sort((a,b)=>b-a).slice(0,5);\n            const idx = uniqToday.indexOf(Math.floor(lastCompletedScore));\n            const rank = idx >= 0 ? (idx + 1) : null;\n            setDailyRankBadge(rank);\n            return rank;\n        } catch (e) {\n            console.warn('Kunne ikke beregne plassering:', e);\n            setDailyRankBadge(null);\n            return null;\n        }\n    }\n\n    function openRankInfoModal() {\n        const overlay = document.getElementById('dailyOverlay');\n        const modal = document.getElementById('rankModal');\n        if (!overlay || !modal) return;\n        \/\/ S\u00f8rg for at leaderboard-modal er skjult\n        const dailyModal = document.getElementById('dailyModal');\n        if (dailyModal) dailyModal.style.display = 'none';\n\n        overlay.style.display = 'block';\n        modal.style.display = 'block';\n        modal.classList.remove('is-open');\n        \/\/ eslint-disable-next-line no-unused-expressions\n        modal.offsetHeight;\n        modal.classList.add('is-open');\n    }\n\n    function setDailyTopCard(value, isLoading = false) {\n        if (!dailyTopCard) return;\n        dailyTopCard.classList.toggle('loading', isLoading);\n        if (isLoading) {\n            dailyTopCard.textContent = 'Laster dagens beste\u2026';\n            return;\n        }\n        const v = Number(value || 0);\n        cachedTodayTop = v;\n        dailyTopCard.innerHTML = `Dagens beste: <strong>${v > 0 ? v.toLocaleString('nb-NO') : '\u2014'}<\/strong>`;\n    }\n\n    function markBeatDailyTopCard() {\n        if (!dailyTopCard) return;\n        dailyTopCard.classList.add('beat');\n        setTimeout(() => dailyTopCard.classList.remove('beat'), 2200);\n    }\n\n    async function fetchDailyHighscores() {\n        try {\n            const response = await fetch('\/wp-json\/rainbowpuzzle\/v1\/daily-highscores');\n            if (!response.ok) throw new Error('Failed to fetch');\n            const data = await response.json();\n            \/\/ Speil dagens beste p\u00e5 forsiden\n            setDailyTopCard(Number(data.today || 0), false);\n            return {\n                today: Number(data.today || 0),\n                yesterday: Number(data.yesterday || 0)\n            };\n        } catch (error) {\n            console.error('Feil ved henting av dagens highscores:', error);\n            return { today: 0, yesterday: 0 };\n        }\n    }\n\n    async function fetchDailyLeaderboard() {\n        const res = await fetch('\/wp-json\/rainbowpuzzle\/v1\/daily-leaderboard');\n        if (!res.ok) throw new Error('Failed to fetch daily leaderboard');\n        const data = await res.json();\n        return {\n            today: Array.isArray(data.today) ? data.today.map(Number).filter(n => Number.isFinite(n)) : [],\n            yesterday: Array.isArray(data.yesterday) ? data.yesterday.map(Number).filter(n => Number.isFinite(n)) : []\n        };\n    }\n\n    function renderDailyModalContent(todayScores, yesterdayScores, highlightScore = null) {\n        const uniqToday = Array.from(new Set(todayScores)).sort((a,b)=>b-a).slice(0,5);\n        const uniqYesterday = Array.from(new Set(yesterdayScores)).sort((a,b)=>b-a).slice(0,3);\n\n        const badgeClassForIndex = (i) => {\n            switch (i) {\n                case 0: return 'rank-1';\n                case 1: return 'rank-2';\n                case 2: return 'rank-3';\n                case 3: return 'rank-4';\n                default: return 'rank-5';\n            }\n        };\n\n        const todayHtml = (() => {\n            if (!uniqToday.length) return `<p class=\"empty-hint\">Ingen score enn\u00e5 i dag.<\/p>`;\n            const leader = uniqToday[0];\n            const rest = uniqToday.slice(1);\n            const leaderIsHighlight = (highlightScore !== null && Number(leader) === Number(highlightScore));\n            const leaderHtml = `\n                <div class=\"score-badges leader-row\">\n                    <div class=\"score-badge is-leader ${leaderIsHighlight ? 'is-highlight' : ''} ${badgeClassForIndex(0)}\" style=\"animation-delay:0ms\">\n                        <span class=\"score-number\">${leader.toLocaleString('nb-NO')}<\/span>\n                        <small>poeng<\/small>\n                    <\/div>\n                <\/div>\n            `;\n            const restHtml = rest.length ? `\n                <div class=\"score-badges rest-row\">${\n                    rest.map((s, i) =>\n                        `<div class=\"score-badge ${(highlightScore !== null && Number(s) === Number(highlightScore)) ? 'is-highlight' : ''} ${badgeClassForIndex(i + 1)}\" style=\"animation-delay:${(i + 1) * 60}ms\">\n                            <span class=\"score-number\">${s.toLocaleString('nb-NO')}<\/span>\n                            <small>poeng<\/small>\n                        <\/div>`\n                    ).join('')\n                }<\/div>\n            ` : '';\n            return leaderHtml + restHtml;\n        })();\n\n        const yesterdayHtml = (() => {\n            if (!uniqYesterday.length) return `<p class=\"empty-hint\">Ingen score i g\u00e5r.<\/p>`;\n            const leader = uniqYesterday[0];\n            const rest = uniqYesterday.slice(1);\n            const leaderIsHighlight = (highlightScore !== null && Number(leader) === Number(highlightScore));\n            const leaderHtml = `\n                <div class=\"score-badges leader-row\">\n                    <div class=\"score-badge is-leader is-yesterday ${leaderIsHighlight ? 'is-highlight' : ''} ${badgeClassForIndex(0)}\" style=\"animation-delay:0ms; min-width:86px; padding:9px 12px\">\n                        <span class=\"score-number\">${leader.toLocaleString('nb-NO')}<\/span>\n                        <small>poeng<\/small>\n                    <\/div>\n                <\/div>\n            `;\n            const restHtml = rest.length ? `\n                <div class=\"score-badges rest-row\">${\n                    rest.map((s, i) =>\n                        `<div class=\"score-badge is-yesterday ${(highlightScore !== null && Number(s) === Number(highlightScore)) ? 'is-highlight' : ''} ${badgeClassForIndex(i + 1)}\" style=\"animation-delay:${(i + 1) * 60}ms; min-width:86px; padding:9px 12px\">\n                            <span class=\"score-number\">${s.toLocaleString('nb-NO')}<\/span>\n                            <small>poeng<\/small>\n                        <\/div>`\n                    ).join('')\n                }<\/div>\n            ` : '';\n            return leaderHtml + restHtml;\n        })();\n\n        return `\n            <h3>Topp 5 i dag<\/h3>\n            ${todayHtml}\n            <h3>Topp 3 i g\u00e5r<\/h3>\n            ${yesterdayHtml}\n        `;\n    }\n\n    function openDailyModal() {\n        const overlay = document.getElementById('dailyOverlay');\n        const modal = document.getElementById('dailyModal');\n        const content = document.getElementById('dailyModalContent');\n        if (!overlay || !modal || !content) return;\n\n        overlay.style.display = 'block';\n        modal.style.display = 'block';\n        \/\/ retrigger entrance animation\n        modal.classList.remove('is-open');\n        \/\/ eslint-disable-next-line no-unused-expressions\n        modal.offsetHeight;\n        modal.classList.add('is-open');\n        content.textContent = 'Laster\u2026';\n\n        fetchDailyLeaderboard()\n            .then(({today, yesterday}) => {\n                \/\/ Bruk eksplisitt highlight fra rank-knapp hvis satt, ellers automatisk fra beste score i dag\n                let highlight = modalHighlightScore;\n                modalHighlightScore = null;\n                \n                \/\/ Hvis ingen eksplisitt highlight, sjekk om din beste score i dag er i topplisten\n                if (highlight === null) {\n                    const bestToday = loadBestScoreForToday();\n                    if (Number.isFinite(bestToday)) {\n                        const uniqToday = Array.from(new Set(today)).sort((a,b)=>b-a).slice(0,5);\n                        if (uniqToday.includes(Math.floor(bestToday))) {\n                            highlight = bestToday;\n                        }\n                    }\n                }\n                \n                content.innerHTML = renderDailyModalContent(today, yesterday, highlight);\n            })\n            .catch((e) => {\n                console.error('Feil ved henting av modal-data:', e);\n                content.textContent = 'Kunne ikke laste listen akkurat n\u00e5.';\n            });\n    }\n\n    function closeDailyModal() {\n        const overlay = document.getElementById('dailyOverlay');\n        const modal = document.getElementById('dailyModal');\n        if (overlay) overlay.style.display = 'none';\n        if (modal) modal.style.display = 'none';\n    }\n\n    async function submitScore(score) {\n        try {\n            const response = await fetch('\/wp-json\/rainbowpuzzle\/v1\/submit-score', {\n                method: 'POST',\n                headers: { 'Content-Type': 'application\/json' },\n                body: JSON.stringify({ score: Number(score) })\n            });\n            if (!response.ok) throw new Error('Failed to submit');\n            const data = await response.json();\n            return data;\n        } catch (error) {\n            console.error('Feil ved innsending av score:', error);\n            return null;\n        }\n    }\n\n    \/\/ === ADMIN (WordPress cookie + nonce) ===\n    let adminNonceCache = null;\n\n    async function fetchAdminNonce() {\n        \/\/ Best: nonce injisert av WordPress for admin\n        if (window.RAINBOWPUZZLE_ADMIN_NONCE) return window.RAINBOWPUZZLE_ADMIN_NONCE;\n\n        if (adminNonceCache) return adminNonceCache;\n        try {\n            \/\/ Fallback: noen WP-oppsett har wpApiSettings.nonce globalt\n            adminNonceCache = window.wpApiSettings?.nonce || null;\n            if (!adminNonceCache) console.warn('[admin-controls] no admin nonce found');\n            return adminNonceCache;\n        } catch {\n            console.warn('[admin-controls] nonce lookup error');\n            return null;\n        }\n    }\n\n    async function adminResetToday() {\n        const nonce = await fetchAdminNonce();\n        if (!nonce) return { ok: false, message: 'Ikke admin \/ ikke innlogget.' };\n        const res = await fetch('\/wp-json\/rainbowpuzzle\/v1\/reset-today', {\n            method: 'POST',\n            credentials: 'include',\n            headers: { 'X-WP-Nonce': nonce }\n        });\n        const data = await res.json().catch(() => null);\n        return { ok: res.ok, data, message: res.ok ? 'Nullstilt.' : 'Feil ved nullstilling.' };\n    }\n\n    async function adminSetToday(score) {\n        const nonce = await fetchAdminNonce();\n        if (!nonce) return { ok: false, message: 'Ikke admin \/ ikke innlogget.' };\n        const res = await fetch('\/wp-json\/rainbowpuzzle\/v1\/set-today', {\n            method: 'POST',\n            credentials: 'include',\n            headers: { 'Content-Type': 'application\/json', 'X-WP-Nonce': nonce },\n            body: JSON.stringify({ score: Number(score) })\n        });\n        const data = await res.json().catch(() => null);\n        return { ok: res.ok, data, message: res.ok ? 'Oppdatert.' : 'Feil ved oppdatering.' };\n    }\n\n    async function adminResetYesterday() {\n        const nonce = await fetchAdminNonce();\n        if (!nonce) return { ok: false, message: 'Ikke admin \/ ikke innlogget.' };\n        const res = await fetch('\/wp-json\/rainbowpuzzle\/v1\/reset-yesterday', {\n            method: 'POST',\n            credentials: 'include',\n            headers: { 'X-WP-Nonce': nonce }\n        });\n        const data = await res.json().catch(() => null);\n        return { ok: res.ok, data, message: res.ok ? 'Nullstilt.' : 'Feil ved nullstilling.' };\n    }\n\n    async function adminSetYesterday(score) {\n        const nonce = await fetchAdminNonce();\n        if (!nonce) return { ok: false, message: 'Ikke admin \/ ikke innlogget.' };\n        const res = await fetch('\/wp-json\/rainbowpuzzle\/v1\/set-yesterday', {\n            method: 'POST',\n            credentials: 'include',\n            headers: { 'Content-Type': 'application\/json', 'X-WP-Nonce': nonce },\n            body: JSON.stringify({ score: Number(score) })\n        });\n        const data = await res.json().catch(() => null);\n        return { ok: res.ok, data, message: res.ok ? 'Oppdatert.' : 'Feil ved oppdatering.' };\n    }\n\n    function getAdminControlsHtml() {\n        return `\n            <div id=\"adminControls\" class=\"admin-controls\" style=\"display:none;\">\n                <div class=\"admin-controls-row\" style=\"margin-bottom:10px;\">\n                    <button id=\"adminResetBtn\" type=\"button\">Nullstill dagens beste<\/button>\n                <\/div>\n                <div class=\"admin-controls-row\">\n                    <input id=\"adminSetInput\" type=\"number\" min=\"0\" step=\"1\" placeholder=\"Sett dagens beste\" \/>\n                    <button id=\"adminSetBtn\" type=\"button\">Sett<\/button>\n                <\/div>\n                <div class=\"admin-controls-row\" style=\"margin-top:10px; margin-bottom:10px;\">\n                    <button id=\"adminResetYesterdayBtn\" type=\"button\">Nullstill g\u00e5rsdagens topp<\/button>\n                <\/div>\n                <div class=\"admin-controls-row\">\n                    <input id=\"adminSetYesterdayInput\" type=\"number\" min=\"0\" step=\"1\" placeholder=\"Sett g\u00e5rsdagens topp\" \/>\n                    <button id=\"adminSetYesterdayBtn\" type=\"button\">Sett<\/button>\n                <\/div>\n                <p id=\"adminStatus\" class=\"admin-status\"><\/p>\n            <\/div>\n        `;\n    }\n\n    async function setupAdminControls(root, currentScore) {\n        const panel = root?.querySelector?.('#adminControls');\n        if (!panel) return;\n\n        const nonce = await fetchAdminNonce();\n        if (!nonce) {\n            \/\/ Fjern helt hvis ikke admin\n            console.warn('[admin-controls] hidden (not admin \/ no nonce)');\n            panel.remove();\n            return;\n        }\n\n        panel.style.display = 'block';\n\n        const statusEl = panel.querySelector('#adminStatus');\n        const resetBtn = panel.querySelector('#adminResetBtn');\n        const setBtn = panel.querySelector('#adminSetBtn');\n        const input = panel.querySelector('#adminSetInput');\n        const resetYBtn = panel.querySelector('#adminResetYesterdayBtn');\n        const setYBtn = panel.querySelector('#adminSetYesterdayBtn');\n        const inputY = panel.querySelector('#adminSetYesterdayInput');\n\n        const setStatus = (txt) => { if (statusEl) statusEl.textContent = txt || ''; };\n\n        const refreshScoreRow = async () => {\n            const hs = await fetchDailyHighscores();\n            const row = root.querySelector('.score-display-row');\n            if (row) row.outerHTML = renderDailyHighscoresHtml(hs.today, hs.yesterday, currentScore);\n        };\n\n        if (resetBtn) {\n            resetBtn.onclick = async () => {\n                setStatus('Nullstiller dagens beste\u2026');\n                const result = await adminResetToday();\n                setStatus(result.message);\n                await refreshScoreRow();\n            };\n        }\n\n        if (setBtn) {\n            setBtn.onclick = async () => {\n                const v = Number(input?.value);\n                if (!Number.isFinite(v) || v < 0) {\n                    setStatus('Ugyldig score.');\n                    return;\n                }\n                setStatus('Setter dagens beste\u2026');\n                const result = await adminSetToday(Math.floor(v));\n                setStatus(result.message);\n                await refreshScoreRow();\n            };\n        }\n\n        if (resetYBtn) {\n            resetYBtn.onclick = async () => {\n                setStatus('Nullstiller g\u00e5rsdagens topp\u2026');\n                const result = await adminResetYesterday();\n                setStatus(result.message);\n                await refreshScoreRow();\n            };\n        }\n\n        if (setYBtn) {\n            setYBtn.onclick = async () => {\n                const v = Number(inputY?.value);\n                if (!Number.isFinite(v) || v < 0) {\n                    setStatus('Ugyldig score.');\n                    return;\n                }\n                setStatus('Setter g\u00e5rsdagens topp\u2026');\n                const result = await adminSetYesterday(Math.floor(v));\n                setStatus(result.message);\n                await refreshScoreRow();\n            };\n        }\n    }\n\n    function renderDailyHighscoresHtml(today, yesterday, currentScore) {\n        const isNewRecord = currentScore > today;\n        const bestToday = loadBestScoreForToday();\n        return `\n            <div class=\"score-display-row\">\n                <div class=\"score-window\">\n                    <h3>Dagens beste<\/h3>\n                    <p class=\"score-value\">${today > 0 ? today.toLocaleString('nb-NO') : '\u2014'}<\/p>\n                <\/div>\n                <div class=\"score-window player-score ${isNewRecord ? 'new-record-window' : ''}\">\n                    <h3>Din poengsum<\/h3>\n                    <p class=\"score-value ${isNewRecord ? 'new-record' : ''}\">\n                        ${isNewRecord ? '\ud83c\udf89 ' : ''}${currentScore.toLocaleString('nb-NO')}\n                    <\/p>\n                    ${Number.isFinite(bestToday) ? `<p style=\"margin:6px 0 0; font-size:12px; opacity:0.85;\">Din beste i dag: <strong>${Number(bestToday).toLocaleString('nb-NO')}<\/strong><\/p>` : ''}\n                <\/div>\n                <div class=\"score-window\">\n                    <h3>G\u00e5rsdagens topp<\/h3>\n                    <p class=\"score-value\">${yesterday > 0 ? yesterday.toLocaleString('nb-NO') : '\u2014'}<\/p>\n                <\/div>\n            <\/div>\n        `;\n    }\n\n    function renderEndContent(score) {\n        const level = getEndLevel(score);\n\n        \/\/ Niv\u00e5-tekster\n        const levelTexts = {\n            1: 'Du har fullf\u00f8rt brettet med lav poengsum. Du f\u00e5r mange poeng hvis du endrer farge mange ganger.',\n            2: 'Du har begynt \u00e5 forst\u00e5 det. \u00c5 endre store grupper gir mange poeng. Det l\u00f8nner seg \u00e5 klikke p\u00e5 brikker som ikke er del av en fargegruppe. Du kan laste ned appen (nedenfor), men det er ikke sikkert at du er helt klar for det niv\u00e5et. Kanskje du b\u00f8r trene litt mer f\u00f8rst.',\n            3: 'Dette er imponerende. \u00c5 isolere enkeltst\u00e5ende farger mot slutten gir gode poengsummer. Du er klar til \u00e5 laste ned appen. Klikk p\u00e5 en av knappene nedenfor.',\n            4: 'Du er en stormester. Gruble.net kan ikke l\u00e6re deg mer om dette spillet. Men vi anbefaler deg sterkt \u00e5 laste ned appen, og konkurrere med de beste av de beste.'\n        };\n\n        \/\/ Bakgrunnsfarger per niv\u00e5\n        const levelBgColors = {\n            1: '#ffffff',      \/\/ hvit\n            2: '#e8c39e',      \/\/ lys bronse\n            3: '#c0c0c0',      \/\/ s\u00f8lv\n            4: '#ffd700'       \/\/ gull\n        };\n\n        \/\/ Sett bakgrunnsfarge og tekstfarge\n        const bgColor = levelBgColors[level] || '#ffffff';\n        endContent.style.backgroundColor = bgColor;\n        endContent.style.color = '#2e003e'; \/\/ m\u00f8rk tekst p\u00e5 lyse bakgrunner\n        endContent.style.borderColor = 'rgba(46,0,62,0.25)';\n\n        const storeBadgesHtml = (level === 1) ? '' : `\n            <div class=\"store-badges\" aria-label=\"App-butikker\">\n                <a href=\"https:\/\/apps.apple.com\/no\/app\/rainbow-puzzle\/id6751543177?l=nb\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Last ned i App Store\">\n                    <img decoding=\"async\"\n                        src=\"https:\/\/gruble.net\/wp-content\/uploads\/appstore-btn.png\"\n                        alt=\"Last ned i App Store\"\n                        loading=\"lazy\"\n                    \/>\n                <\/a>\n                <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.VEGILLITOCANSTUDIO.RAINBOWPUZZLE\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"F\u00e5 den p\u00e5 Google Play\">\n                    <img decoding=\"async\"\n                        src=\"https:\/\/gruble.net\/wp-content\/uploads\/Google_Play_Store_badge_EN.svg.png\"\n                        alt=\"F\u00e5 den p\u00e5 Google Play\"\n                        loading=\"lazy\"\n                    \/>\n                <\/a>\n            <\/div>\n        `;\n        const adminControlsHtml = getAdminControlsHtml();\n\n        \/\/ Vis loading-state f\u00f8rst\n        endContent.innerHTML = `\n            <div class=\"end-content-inner\">\n                <p style=\"margin:0; font-size:18px; line-height:1.6; word-wrap:break-word; overflow-wrap:break-word;\">${escapeHtml(levelTexts[level] || '')}<\/p>\n                <div class=\"score-display-row\">\n                    <div class=\"score-window\">\n                        <p class=\"loading\">Laster...<\/p>\n                    <\/div>\n                    <div class=\"score-window player-score\">\n                        <h3>Din poengsum<\/h3>\n                        <p class=\"score-value\">${score.toLocaleString('nb-NO')}<\/p>\n                    <\/div>\n                    <div class=\"score-window\">\n                        <p class=\"loading\">Laster...<\/p>\n                    <\/div>\n                <\/div>\n                ${adminControlsHtml}\n                ${storeBadgesHtml}\n            <\/div>\n        `;\n        endContent.style.display = 'flex';\n\n        \/\/ Pr\u00f8v \u00e5 aktivere admin-kontroller umiddelbart (hvis admin-nonce finnes)\n        \/\/ (sikrer at panelet ikke blir st\u00e5ende skjult)\n        setupAdminControls(endContent, score);\n\n        \/\/ Hent dagens\/g\u00e5rsdagens highscores og oppdater visningen\n        (async () => {\n            const highscores = await fetchDailyHighscores();\n            const dailyHtml = renderDailyHighscoresHtml(highscores.today, highscores.yesterday, score);\n            \n            \/\/ Oppdater HTML med faktiske verdier\n            const inner = endContent.querySelector('.end-content-inner');\n            if (inner) {\n                inner.innerHTML = `\n                    <p style=\"margin:0; font-size:18px; line-height:1.6; word-wrap:break-word; overflow-wrap:break-word;\">${escapeHtml(levelTexts[level] || '')}<\/p>\n                    ${dailyHtml}\n                    ${adminControlsHtml}\n                    ${storeBadgesHtml}\n                `;\n                await setupAdminControls(inner, score);\n            }\n\n            \/\/ Send alltid inn score: backend lagrer kun topp 5 (unik score) for dagen\n            const submitResult = await submitScore(score);\n            \/\/ Regel B + \"ikke rykke ned av lavere score\":\n            \/\/ lagre og bruke din beste score i dag som grunnlag for plassering\/highlight.\n            const bestToday = updateBestScoreForToday(score);\n            const effective = Number.isFinite(bestToday) ? bestToday : score;\n            await refreshDailyRankBadge(effective);\n\n            \/\/ Hvis ny dagsrekord, hent p\u00e5 nytt for \u00e5 vise oppdatert verdi i UI\n            if (submitResult && submitResult.new_record) {\n                const updated = await fetchDailyHighscores();\n                const updatedHtml = renderDailyHighscoresHtml(updated.today, updated.yesterday, score);\n                if (inner) {\n                    inner.innerHTML = `\n                        <p style=\"margin:0; font-size:18px; line-height:1.6; word-wrap:break-word; overflow-wrap:break-word;\">${escapeHtml(levelTexts[level] || '')}<\/p>\n                        ${updatedHtml}\n                        ${adminControlsHtml}\n                        ${storeBadgesHtml}\n                    `;\n                    await setupAdminControls(inner, score);\n                }\n            }\n        })();\n    }\n\n    function hideEndContent() {\n        endContent.style.display = 'none';\n        endContent.innerHTML = '';\n    }\n\n    \/\/ INITIER SPILLET\n    function initGame() {\n        totalScore = 0;\n        isGameOver = false;\n\n        hideEndContent();\n        gameContainer.style.display = 'grid';\n        gameContainer.innerHTML = '';\n\n        messageBoard.textContent = '';\n        colors = generateDailyBoardColors();\n        isAnimating = false;\n        currentFocusIndex = 0;\n\n        updateScoreDisplay();\n        changeScoreDisplayColor();\n\n        \/\/ Vis dagens beste p\u00e5 \"forsiden\"\n        setDailyTopCard(0, true);\n        setDailyRankBadge(null);\n        fetchDailyHighscores();\n        \/\/ Regel B: bare vis plassering hvis du har spilt i dag (denne nettleseren)\n        const storedBest = loadBestScoreForToday();\n        if (Number.isFinite(storedBest)) {\n            refreshDailyRankBadge(storedBest);\n        }\n\n        for (let i = 0; i < TOTAL_CELLS; i++) {\n            const cell = document.createElement('div');\n            cell.classList.add('game-cell', `color-${colors[i]}`);\n            cell.dataset.color = colors[i];\n            cell.setAttribute('tabindex', '0');\n            cell.dataset.index = i;\n            cell.addEventListener('click', handleCellClick);\n            gameContainer.appendChild(cell);\n        }\n    }\n\n    function updateScoreDisplay() {\n        scoreDisplay.textContent = totalScore;\n    }\n\n    function changeScoreDisplayColor() {\n        const selectedColor = colorList[Math.floor(Math.random() * colorList.length)];\n        colorList.forEach(c => scoreDisplay.classList.remove(`color-${c}`));\n        scoreDisplay.classList.add(`color-${selectedColor}`);\n    }\n\n    \/\/ Klikk p\u00e5 celle\n    async function handleCellClick(e) {\n        if (isGameOver || isAnimating) return;\n        const index = parseInt(e.target.dataset.index);\n        const color = colors[index];\n\n        messageBoard.textContent = '';\n        isAnimating = true;\n\n        try {\n            const { pointsEarned, updatedColors } = await performColorChange(index, color);\n            isAnimating = false;\n\n            if (pointsEarned > 0) {\n                totalScore += pointsEarned;\n                updateScoreDisplay();\n                changeScoreDisplayColor();\n                colors = updatedColors;\n                updateBoardUI();\n\n                \/\/ Motivasjon: hvis du passerer dagens beste underveis\n                if (cachedTodayTop > 0 && totalScore > cachedTodayTop) {\n                    markBeatDailyTopCard();\n                }\n            }\n\n            if (isGameCompleted(updatedColors)) {\n                isGameOver = true;\n                \/\/ Fjern rutene og vis end-screen med niv\u00e5\n                gameContainer.innerHTML = '';\n                gameContainer.style.display = 'none';\n                renderEndContent(totalScore);\n            }\n        } catch (error) {\n            isAnimating = false;\n            console.error('Feil under h\u00e5ndtering av celleklikk:', error);\n        }\n    }\n\n    \/\/ Fargeendring med animasjon\n    async function performColorChange(index, color) {\n        const updatedColors = [...colors];\n        const initialCluster = getConnectedGroup(index, color);\n        const adjacentIndices = getAdjacentIndicesMultiple(initialCluster);\n        const adjacentClusters = getUniqueClusters(adjacentIndices);\n        const allClusters = [initialCluster, ...adjacentClusters];\n        const cellsToChange = [...new Set(allClusters.flat())];\n\n        const cellsThatWillChange = cellsToChange.filter(idx => updatedColors[idx] !== color);\n        const numChangedCells = cellsThatWillChange.length;\n        const pointsEarned = numChangedCells * numChangedCells;\n\n        if (numChangedCells === 0) return { pointsEarned: 0, updatedColors };\n\n        const shuffledCells = shuffleArraySecure(cellsThatWillChange);\n        shuffledCells.forEach((idx, i) => {\n            setTimeout(() => {\n                updatedColors[idx] = color;\n                const cell = gameContainer.children[idx];\n                if (cell) cell.className = `game-cell color-${color}`;\n            }, i * 30);\n        });\n        await delay(numChangedCells * 30 + 50);\n        return { pointsEarned, updatedColors };\n    }\n\n    function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }\n\n    \/\/ Finn sammenhengende cluster\n    function getConnectedGroup(index, color) {\n        const group = [];\n        const queue = [index];\n        const visited = new Set();\n        while (queue.length > 0) {\n            const currentIndex = queue.shift();\n            if (visited.has(currentIndex)) continue;\n            visited.add(currentIndex);\n\n            if (colors[currentIndex] === color) {\n                group.push(currentIndex);\n                const neighbors = getAdjacentIndices(currentIndex);\n                neighbors.forEach(n => {\n                    if (!visited.has(n) && colors[n] === color) queue.push(n);\n                });\n            }\n        }\n        return group;\n    }\n\n    function getAdjacentIndicesMultiple(cluster) {\n        const adjacentIndices = new Set();\n        cluster.forEach(idx => getAdjacentIndices(idx).forEach(a => adjacentIndices.add(a)));\n        return Array.from(adjacentIndices);\n    }\n\n    function getUniqueClusters(indices) {\n        const clusters = [];\n        const seenClusters = new Set();\n        indices.forEach(idx => {\n            if (colors[idx]) {\n                const c = colors[idx];\n                const cluster = getConnectedGroup(idx, c).sort((a,b)=>a-b);\n                const key = cluster.join(',');\n                if (!seenClusters.has(key)) {\n                    seenClusters.add(key);\n                    clusters.push(cluster);\n                }\n            }\n        });\n        return clusters;\n    }\n\n    function getAdjacentIndices(index) {\n        const row = Math.floor(index \/ GRID_SIZE);\n        const col = index % GRID_SIZE;\n        const out = [];\n        if (row > 0) out.push(index - GRID_SIZE);\n        if (row < GRID_SIZE - 1) out.push(index + GRID_SIZE);\n        if (col > 0) out.push(index - 1);\n        if (col < GRID_SIZE - 1) out.push(index + 1);\n        return out;\n    }\n\n    function updateBoardUI() {\n        const cells = document.querySelectorAll('.game-cell');\n        cells.forEach((cell, i) => {\n            const c = colors[i];\n            cell.className = `game-cell color-${c}`;\n            cell.dataset.color = c;\n        });\n    }\n\n    function isGameCompleted(updatedColors = colors) {\n        const firstColor = updatedColors[0];\n        return updatedColors.every(c => c === firstColor);\n    }\n\n    \/\/ Instruksjons-popup\n    function toggleInstructions() {\n        const popup = document.getElementById('instructionsPopup');\n        const overlay= document.getElementById('overlay');\n        const isVisible= (popup.style.display === 'block');\n        popup.style.display   = isVisible ? 'none' : 'block';\n        overlay.style.display = isVisible ? 'none' : 'block';\n    }\n\n    function closeAllRecordModals() {\n        closeDailyModal();\n        const rankModal = document.getElementById('rankModal');\n        if (rankModal) rankModal.style.display = 'none';\n    }\n\n    \/\/ Modal: Dagens beste \/ Plassering\n    document.getElementById('dailyOverlay')?.addEventListener('click', closeAllRecordModals);\n    document.getElementById('dailyModalClose')?.addEventListener('click', closeAllRecordModals);\n    document.getElementById('rankModalClose')?.addEventListener('click', closeAllRecordModals);\n\n    if (dailyTopCard) {\n        dailyTopCard.addEventListener('click', openDailyModal);\n        dailyTopCard.addEventListener('keydown', (e) => {\n            if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault();\n                openDailyModal();\n            }\n        });\n    }\n\n    if (dailyTopCrown) {\n        dailyTopCrown.addEventListener('click', openDailyModal);\n        dailyTopCrown.addEventListener('keydown', (e) => {\n            if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault();\n                openDailyModal();\n            }\n        });\n    }\n\n    if (dailyTopRankBtn) {\n        dailyTopRankBtn.addEventListener('click', () => {\n            const r = Number(dailyTopRankBtn.dataset.rank || 0);\n            if (r >= 1 && r <= 5 && Number.isFinite(lastCompletedScore)) {\n                modalHighlightScore = lastCompletedScore;\n                openDailyModal();\n            } else {\n                openRankInfoModal();\n            }\n        });\n        dailyTopRankBtn.addEventListener('keydown', (e) => {\n            if (e.key === 'Enter' || e.key === ' ') {\n                e.preventDefault();\n                dailyTopRankBtn.click();\n            }\n        });\n    }\n\n    \/\/ Secure random\n    function getSecureRandomInt(max) {\n        const array = new Uint32Array(1);\n        window.crypto.getRandomValues(array);\n        return array[0] % max;\n    }\n    function shuffleArraySecure(array) {\n        for (let i = array.length - 1; i > 0; i--) {\n            const j = getSecureRandomInt(i + 1);\n            [array[i], array[j]] = [array[j], array[i]];\n        }\n        return array;\n    }\n\n    \/\/ Tastaturnavigasjon (for test: ? + start + ruter)\n    document.addEventListener('keydown', (event) => {\n        const isInstructionsOpen = (document.getElementById('instructionsPopup').style.display === 'block');\n        if (isInstructionsOpen) return;\n\n        const cells = document.querySelectorAll('.game-cell');\n\n        if (document.activeElement === instructionsButton) {\n            if (event.key === 'ArrowDown') {\n                event.preventDefault();\n                currentFocusIndex = 0;\n                updateCellFocus();\n            }\n        }\n        else if (document.activeElement === startButton) {\n            if (event.key === 'Enter' || event.key === ' ') {\n                event.preventDefault();\n                startButton.click();\n            }\n        }\n        else if (document.activeElement.classList.contains('game-cell')) {\n            if (['ArrowUp','ArrowDown','ArrowLeft','ArrowRight'].includes(event.key)) {\n                event.preventDefault();\n                switch (event.key) {\n                    case 'ArrowUp':\n                        if (currentFocusIndex >= GRID_SIZE) currentFocusIndex -= GRID_SIZE;\n                        break;\n                    case 'ArrowDown':\n                        if (currentFocusIndex < TOTAL_CELLS - GRID_SIZE) currentFocusIndex += GRID_SIZE;\n                        break;\n                    case 'ArrowLeft':\n                        if (currentFocusIndex % GRID_SIZE !== 0) currentFocusIndex -= 1;\n                        break;\n                    case 'ArrowRight':\n                        if ((currentFocusIndex + 1) % GRID_SIZE !== 0) currentFocusIndex += 1;\n                        break;\n                }\n                updateCellFocus();\n            }\n            else if (event.key === 'Enter' || event.key === ' ') {\n                event.preventDefault();\n                if (cells[currentFocusIndex]) cells[currentFocusIndex].click();\n            }\n        }\n    });\n\n    function updateCellFocus() {\n        const cells = document.querySelectorAll('.game-cell');\n        if (cells[currentFocusIndex] && document.activeElement !== cells[currentFocusIndex]) {\n            cells[currentFocusIndex].focus();\n        }\n    }\n\n    \/\/ Start spillet ved innlasting\n    window.addEventListener('load', initGame);\n<\/script>\n<\/body>\n<\/html>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9156e27 elementor-widget elementor-widget-heading\" data-id=\"9156e27\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Tre gode tips<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d67a0ac elementor-widget elementor-widget-text-editor\" data-id=\"d67a0ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Velge trekk som gj\u00f8r at du kan klikke mange ganger f\u00f8r brettet er fylt.<\/p><p>Alltid klikke p\u00e5 en flis som grenser til omr\u00e5det som allerede vokser, slik at du bygger videre p\u00e5 det du har.<\/p><p>\u00c5 endre farge p\u00e5 mange fliser p\u00e5 ett trekk gir mange poeng.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7fbb6f6 elementor-widget elementor-widget-button\" data-id=\"7fbb6f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/gruble.net\/rpl\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Spill p\u00e5 egen side<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6300e98 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6300e98\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wide\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a79690c\" data-id=\"a79690c\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6c326ab elementor-widget elementor-widget-heading\" data-id=\"6c326ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/gruble.net\/grubleoppgaver\/\">Mest brukt<\/a><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-841c607 elementor-grid-4 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-posts__hover-gradient load-more-align-center elementor-widget elementor-widget-posts\" data-id=\"841c607\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;cards_columns&quot;:&quot;4&quot;,&quot;pagination_type&quot;:&quot;load_more_on_click&quot;,&quot;cards_columns_tablet&quot;:&quot;2&quot;,&quot;cards_columns_mobile&quot;:&quot;1&quot;,&quot;cards_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;load_more_spinner&quot;:{&quot;value&quot;:&quot;fas fa-spinner&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}\" data-widget_type=\"posts.cards\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-43963 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-kunnskap category-naturfag category-norsk category-nyheter category-pop category-quiz category-spill category-topp category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/wikilaerer\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/wikilarer.jpg\" class=\"attachment-full size-full wp-image-43969\" alt=\"Kvinne sitter med bok p\u00e5 fanget\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/wikilarer.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/wikilarer-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/wikilarer-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/wikilarer-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/wikilarer-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/wikilaerer\/\" >\n\t\t\t\tWonderStream\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-43896 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-matematikk category-nyheter category-pop category-smating category-spill category-topp category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/prisgrubler\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/prisgrubler-thumb.jpg\" class=\"attachment-full size-full wp-image-43898\" alt=\"Mann holder to varer i en butikk.\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/prisgrubler-thumb.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/prisgrubler-thumb-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/prisgrubler-thumb-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/prisgrubler-thumb-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/prisgrubler-thumb-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/prisgrubler\/\" >\n\t\t\t\tPrisGrubler\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-44346 post type-post status-publish format-standard has-post-thumbnail hentry category-geografi category-gratis category-kunnskap category-nyheter category-paske category-pop category-quiz category-topp category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/grubletrotter\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert.jpg\" class=\"attachment-full size-full wp-image-44342\" alt=\"koffert av gull\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert-300x300.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert-150x150.jpg 150w, https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert-768x768.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert-80x80.jpg 80w, https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert-600x600.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/grubletrotter-koffert-100x100.jpg 100w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/grubletrotter\/\" >\n\t\t\t\tJorda rundt p\u00e5 80 bilder\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-36265 post type-post status-publish format-standard has-post-thumbnail hentry category-dobbel category-europa category-geografi category-kart category-topp category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/europa-ministater\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1788\" height=\"1118\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb.jpg\" class=\"attachment-full size-full wp-image-36462\" alt=\"kart over Europa\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb.jpg 1788w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-300x188.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-1024x640.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-768x480.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-1536x960.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/europa-thumb-600x375.jpg 600w\" sizes=\"(max-width: 1788px) 100vw, 1788px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/europa-ministater\/\" >\n\t\t\t\tEuropa med ministater\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-44464 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-matematikk category-nyheter category-pop category-smating category-spill category-topp category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/prisswitch\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/prisswitch.jpg\" class=\"attachment-full size-full wp-image-44470\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/prisswitch.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/prisswitch-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/prisswitch-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/prisswitch-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/prisswitch-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/prisswitch\/\" >\n\t\t\t\tPrisSwitch\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-45323 post type-post status-publish format-standard has-post-thumbnail hentry category-dobbel category-gratis category-nyheter category-pop category-profilert category-spill category-topp category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/slipp-ballen\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1672\" height=\"941\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball.jpg\" class=\"attachment-full size-full wp-image-45355\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball.jpg 1672w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-300x169.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1024x576.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-768x432.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1536x864.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-805x452.jpg 805w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1090x613.jpg 1090w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-600x338.jpg 600w\" sizes=\"(max-width: 1672px) 100vw, 1672px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/slipp-ballen\/\" >\n\t\t\t\tSlipp ballen\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-31116 post type-post status-publish format-standard has-post-thumbnail hentry category-grubliser category-hoderegning category-matematikk category-nyheter category-pop category-spill category-topp category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/bingomoji\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"256\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/bingomoji-thumb.jpg\" class=\"attachment-full size-full wp-image-31220\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/bingomoji-thumb.jpg 400w, https:\/\/gruble.net\/wp-content\/uploads\/bingomoji-thumb-300x192.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/bingomoji\/\" >\n\t\t\t\tBingomoji\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-44063 post type-post status-publish format-standard has-post-thumbnail hentry category-paske category-quiz category-topp category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/blir-du-lurt\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/paskequiz.jpg\" class=\"attachment-full size-full wp-image-44065\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/paskequiz.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/paskequiz-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/paskequiz-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/paskequiz-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/paskequiz-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/blir-du-lurt\/\" >\n\t\t\t\tBlir du lurt?\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\t\t\t<span class=\"e-load-more-spinner\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-spinner\"><\/i>\t\t\t<\/span>\n\t\t\n\t\t\t\t<div class=\"e-load-more-anchor\" data-page=\"1\" data-max-page=\"2\" data-next-page=\"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages\/43680\/page\/2\/\"><\/div>\n\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Se flere<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<div class=\"e-load-more-message\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e2d8d3 elementor-grid-4 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-posts__hover-gradient load-more-align-center elementor-widget elementor-widget-posts\" data-id=\"2e2d8d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;cards_columns&quot;:&quot;4&quot;,&quot;pagination_type&quot;:&quot;load_more_on_click&quot;,&quot;cards_columns_tablet&quot;:&quot;2&quot;,&quot;cards_columns_mobile&quot;:&quot;1&quot;,&quot;cards_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;load_more_spinner&quot;:{&quot;value&quot;:&quot;fas fa-spinner&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}\" data-widget_type=\"posts.cards\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-23899 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-norsk category-nyheter category-profilert category-smating category-tasting category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/turbotaster-2-0\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/tastehender.jpg\" class=\"attachment-full size-full wp-image-23902\" alt=\"hender som skriver p\u00e5 et tastatur\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/tastehender.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-1024x585.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-1536x878.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-600x343.jpg 600w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/turbotaster-2-0\/\" >\n\t\t\t\tTurboTaster &#8211; 2.0\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-39236 post type-post status-publish format-standard has-post-thumbnail hentry category-europa category-geografi category-kart category-nyheter category-pop category-profilert category-spill category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/flaggmeister5000\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1070\" height=\"574\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister.jpg\" class=\"attachment-full size-full wp-image-39311\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister.jpg 1070w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-300x161.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-1024x549.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-768x412.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-600x322.jpg 600w\" sizes=\"(max-width: 1070px) 100vw, 1070px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/flaggmeister5000\/\" >\n\t\t\t\tFlaggmeister 5000\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-33012 post type-post status-publish format-standard has-post-thumbnail hentry category-lesetester category-norsk category-pop category-profilert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/lesetester-1\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/lesetest.jpg\" class=\"attachment-full size-full wp-image-32448\" alt=\"Gutt sitter og leser i en bok mens han skriver.\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/lesetest.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/lesetester-1\/\" >\n\t\t\t\tVarierte lesetester &#8211; 1\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-9138 post type-post status-publish format-standard has-post-thumbnail hentry category-grubliser category-nyheter category-paske category-profilert category-quiz\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/trollsult\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/e-forside.jpeg\" class=\"attachment-full size-full wp-image-9140\" alt=\"sultne troll\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/e-forside.jpeg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-600x343.jpeg 600w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-300x171.jpeg 300w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-1024x585.jpeg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-768x439.jpeg 768w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-1536x878.jpeg 1536w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/trollsult\/\" >\n\t\t\t\tTrollsult\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-36795 post type-post status-publish format-standard has-post-thumbnail hentry category-geografi category-kart category-nyheter category-pop category-profilert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/norbyer\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1964\" height=\"1224\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb.jpg\" class=\"attachment-full size-full wp-image-36816\" alt=\"Norgeskart\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb.jpg 1964w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-300x187.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-1024x638.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-768x479.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-1536x957.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-600x374.jpg 600w\" sizes=\"(max-width: 1964px) 100vw, 1964px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/norbyer\/\" >\n\t\t\t\tByer i Norge\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-34625 post type-post status-publish format-standard has-post-thumbnail hentry category-geografi category-nyheter category-profilert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/kartflagg\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/kart-europa.jpg\" class=\"attachment-full size-full wp-image-34621\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/kart-europa.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/kart-europa-150x150.jpg 150w, https:\/\/gruble.net\/wp-content\/uploads\/kart-europa-80x80.jpg 80w, https:\/\/gruble.net\/wp-content\/uploads\/kart-europa-100x100.jpg 100w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/kartflagg\/\" >\n\t\t\t\tKart og flagg p\u00e5 Gruble.net\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-43395 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-gruiz category-lesetester category-norsk category-nyheter category-pop category-profilert category-quiz category-smating category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/nakviz\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz.jpg\" class=\"attachment-full size-full wp-image-43462\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz.jpg 800w, https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz-600x400.jpg 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/nakviz\/\" >\n\t\t\t\tNyhetsKvIz\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-37721 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-matematikk category-nyheter category-pop category-profilert category-smating category-spill category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/prisexpert-2-0\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/handle1.jpg?ver=1773740711\" class=\"attachment-full size-full wp-image-35772\" alt=\"Familie p\u00e5 handletur i dagligvarebutikk\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/handle1.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/handle1-300x200.jpg 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/prisexpert-2-0\/\" >\n\t\t\t\tPrisExpert -2.0\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\t\t\t<span class=\"e-load-more-spinner\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-spinner\"><\/i>\t\t\t<\/span>\n\t\t\n\t\t\t\t<div class=\"e-load-more-anchor\" data-page=\"1\" data-max-page=\"2\" data-next-page=\"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages\/43680\/page\/2\/\"><\/div>\n\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Se flere<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<div class=\"e-load-more-message\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2a1b396 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2a1b396\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-98b054f\" data-id=\"98b054f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a6e083e elementor-widget elementor-widget-html\" data-id=\"a6e083e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!--\n  Katt og mus \u2013 banner (4:1) for Elementor HTML-widget\n  - Self-contained (lim inn i Elementor)\n  - Klikkbart banner som peikar til spelet\n  - Canvas \"mini-film\" inspirert av spelet (katt jaktar mus) + kj\u00f8kkengulv-bakgrunn\n-->\n\n<a class=\"gcm-banner\" href=\"\/katt-og-mus\/\" aria-label=\"\u00c5pne Katt og mus-spillet\">\n  <span class=\"gcm-banner__sr\">\u00c5pne spillet<\/span>\n  <canvas class=\"gcm-banner__canvas\" aria-hidden=\"true\"><\/canvas>\n  <div class=\"gcm-banner__ui\" aria-hidden=\"true\">\n    <div class=\"gcm-banner__title\">\ud83d\ude3c Katt og mus<\/div>\n    <div class=\"gcm-banner__sub\">Klikk for \u00e5 spille<\/div>\n    <div class=\"gcm-banner__cta\">Spill n\u00e5<\/div>\n  <\/div>\n<\/a>\n\n<style>\n  \/* Scoped til banneret *\/\n  .gcm-banner {\n    --gcm-radius: 22px;\n    --gcm-border: rgba(255, 255, 255, 0.14);\n    --gcm-glow1: rgba(167, 139, 250, 0.22);\n    --gcm-glow2: rgba(34, 211, 238, 0.14);\n    --gcm-ink: rgba(255, 255, 255, 0.92);\n\n    display: block;\n    width: 100%;\n    max-width: 1200px;\n    margin: 0 auto;\n    position: relative;\n    border-radius: var(--gcm-radius);\n    border: 1px solid var(--gcm-border);\n    overflow: hidden;\n    text-decoration: none;\n    color: var(--gcm-ink);\n\n    \/* Banner-format *\/\n    aspect-ratio: 4 \/ 1;\n    background: linear-gradient(180deg, rgba(9, 12, 30, 0.66), rgba(3, 5, 16, 0.72));\n    box-shadow:\n      0 20px 64px rgba(0, 0, 0, 0.42),\n      0 0 0 1px rgba(122, 92, 255, 0.14) inset,\n      0 0 48px rgba(167, 139, 250, 0.14),\n      0 0 70px rgba(34, 211, 238, 0.08);\n    backdrop-filter: blur(8px);\n  }\n\n  .gcm-banner__sr {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    padding: 0;\n    margin: -1px;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0;\n  }\n\n  .gcm-banner__canvas {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    display: block;\n    touch-action: manipulation;\n  }\n\n  .gcm-banner__ui {\n    position: absolute;\n    inset: 0;\n    display: grid;\n    align-content: center;\n    gap: 6px;\n    padding: 18px 18px;\n    pointer-events: none;\n  }\n\n  .gcm-banner__title {\n    font: 900 22px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n    letter-spacing: 0.2px;\n    text-shadow: 0 16px 34px rgba(0, 0, 0, 0.55);\n  }\n\n  .gcm-banner__sub {\n    font: 600 14px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n    opacity: 0.9;\n    text-shadow: 0 16px 34px rgba(0, 0, 0, 0.55);\n  }\n\n  .gcm-banner__cta {\n    justify-self: start;\n    margin-top: 8px;\n    padding: 10px 12px;\n    border-radius: 999px;\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    border: 1px solid rgba(255, 255, 255, 0.18);\n    background: rgba(2, 6, 23, 0.38);\n    box-shadow: 0 14px 36px rgba(0, 0, 0, 0.35);\n    font: 800 13px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n    letter-spacing: 0.3px;\n  }\n\n  .gcm-banner::after {\n    \/* Glass overlay + vignett for lesbarheit *\/\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    background:\n      radial-gradient(1200px 340px at 20% 40%, rgba(167, 139, 250, 0.12), rgba(0, 0, 0, 0)),\n      radial-gradient(900px 320px at 70% 45%, rgba(34, 211, 238, 0.10), rgba(0, 0, 0, 0)),\n      linear-gradient(90deg, rgba(2, 6, 23, 0.45), rgba(2, 6, 23, 0.08) 60%, rgba(2, 6, 23, 0.35));\n    pointer-events: none;\n  }\n\n  .gcm-banner:focus-visible {\n    outline: 3px solid rgba(167, 139, 250, 0.90);\n    outline-offset: 3px;\n  }\n\n  @media (max-width: 520px) {\n    .gcm-banner__ui { padding: 14px; }\n    .gcm-banner__title { font-size: 18px; }\n    .gcm-banner__sub { font-size: 12px; }\n    .gcm-banner__cta { font-size: 12px; padding: 9px 11px; }\n  }\n<\/style>\n\n<script type=\"module\">\n  (() => {\n    const root = document.currentScript?.previousElementSibling?.previousElementSibling?.previousElementSibling;\n    \/\/ Fallback: finn n\u00e6raste .gcm-banner i DOM.\n    const banner = (root && root.classList?.contains(\"gcm-banner\")) ? root : document.querySelector(\".gcm-banner\");\n    if (!banner) return;\n\n    const canvas = banner.querySelector(\".gcm-banner__canvas\");\n    const ctx = canvas.getContext(\"2d\");\n    if (!ctx) return;\n\n    \/\/ --- Konfig ---\n    const FLOOR_URL = \"https:\/\/gruble.net\/wp-content\/uploads\/gulv.jpg\";\n    const floorImg = new Image();\n    floorImg.decoding = \"async\";\n    floorImg.loading = \"eager\";\n    floorImg.src = FLOOR_URL;\n\n    \/\/ Verda (CSS-pixlar)\n    const world = { w: 800, h: 200, scale: 1 };\n\n    function clamp(v, a, b) { return Math.max(a, Math.min(b, v)); }\n    function rand(a, b) { return a + Math.random() * (b - a); }\n    function hypot(x, y) { return Math.hypot(x, y); }\n    function norm(x, y) { const m = hypot(x, y) || 1; return { x: x \/ m, y: y \/ m }; }\n\n    function drawImageCover(img, x, y, w, h) {\n      const iw = img.naturalWidth || img.width;\n      const ih = img.naturalHeight || img.height;\n      if (!iw || !ih) return false;\n      const s = Math.max(w \/ iw, h \/ ih);\n      const dw = iw * s, dh = ih * s;\n      const dx = x + (w - dw) \/ 2;\n      const dy = y + (h - dh) \/ 2;\n      ctx.drawImage(img, dx, dy, dw, dh);\n      return true;\n    }\n\n    function resize() {\n      const r = banner.getBoundingClientRect();\n      const w = Math.max(280, r.width);\n      const h = Math.max(70, r.height);\n      const dpr = Math.max(1, Math.min(2, window.devicePixelRatio || 1));\n\n      world.w = w;\n      world.h = h;\n      world.scale = clamp(Math.min(w \/ 900, h \/ 240), 0.65, 1.25);\n\n      canvas.style.width = `${w}px`;\n      canvas.style.height = `${h}px`;\n      canvas.width = Math.floor(w * dpr);\n      canvas.height = Math.floor(h * dpr);\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    }\n\n    const ro = window.ResizeObserver ? new ResizeObserver(() => resize()) : null;\n    ro?.observe(banner);\n    window.visualViewport?.addEventListener(\"resize\", resize);\n    window.addEventListener(\"resize\", resize);\n    resize();\n\n    \/\/ --- Mini-spel: katt + mus ---\n    const cat = {\n      x: 0, y: 0, vx: 0, vy: 0,\n      maxSpeed: 240, accel: 520,\n      baseMaxSpeed: 240, baseAccel: 520, baseSize: 42,\n      emoji: \"\ud83d\ude3c\",\n      size: 42,\n      r: 18,\n      t: 0,\n    };\n\n    \/\/ Effekter (same id\u00e9 som i spelet)\n    const effects = { lyn: 0, vox: 0 };\n    const EFFECT_DUR = { lyn: 10, vox: 10 };\n    let bombPulse = 0;\n    let bombX = 0, bombY = 0;\n\n    function resetCat() {\n      cat.x = world.w * 0.22;\n      cat.y = world.h * 0.62;\n      cat.vx = 140 * world.scale;\n      cat.vy = -20 * world.scale;\n      cat.baseSize = Math.round(44 * world.scale);\n      cat.size = cat.baseSize;\n      cat.r = Math.round(cat.size * 0.40);\n      cat.baseMaxSpeed = 300 * world.scale;\n      cat.baseAccel = 620 * world.scale;\n      cat.maxSpeed = cat.baseMaxSpeed;\n      cat.accel = cat.baseAccel;\n    }\n\n    const mice = [];\n    function spawnMouse() {\n      const r = 8 * world.scale;\n      const pad = r + 10 * world.scale;\n      const x = rand(world.w * 0.30, world.w - pad);\n      const y = rand(pad, world.h - pad);\n      const a = rand(0, Math.PI * 2);\n      const sp = rand(55, 120) * world.scale;\n      return {\n        x,\n        y,\n        vx: Math.cos(a) * sp,\n        vy: Math.sin(a) * sp,\n        r,\n        t: rand(0, 10),\n        color: `hsl(${rand(18, 45)} 90% 70%)`,\n      };\n    }\n\n    function resetMice() {\n      mice.length = 0;\n      for (let i = 0; i < 5; i++) mice.push(spawnMouse());\n    }\n\n    resetCat();\n    resetMice();\n\n    const spark = [];\n    function addSpark(x, y, n = 6) {\n      for (let i = 0; i < n; i++) {\n        spark.push({\n          x, y,\n          vx: rand(-1, 1) * 120 * world.scale,\n          vy: rand(-1, 1) * 120 * world.scale,\n          r: rand(1.2, 2.2) * world.scale,\n          a: 1,\n          life: rand(0.25, 0.55),\n          hue: rand(180, 290),\n        });\n      }\n    }\n\n    function updateMice(dt) {\n      for (const m of mice) {\n        m.t += dt;\n        \/\/ Lite \"wander\"\n        const turn = Math.sin(m.t * 2.1) * 0.35;\n        const ca = Math.cos(turn * dt), sa = Math.sin(turn * dt);\n        const vx = m.vx * ca - m.vy * sa;\n        const vy = m.vx * sa + m.vy * ca;\n        m.vx = vx; m.vy = vy;\n        \/\/ Hastighet mot target\n        const sp = hypot(m.vx, m.vy) || 1;\n        const target = 95 * world.scale;\n        const k = target \/ sp;\n        const mix = 1 - Math.pow(0.01, dt);\n        m.vx = m.vx * (1 - mix) + m.vx * k * mix;\n        m.vy = m.vy * (1 - mix) + m.vy * k * mix;\n\n        m.x += m.vx * dt;\n        m.y += m.vy * dt;\n\n        const pad = m.r + 6 * world.scale;\n        if (m.x < pad) { m.x = pad; m.vx = Math.abs(m.vx); }\n        else if (m.x > world.w - pad) { m.x = world.w - pad; m.vx = -Math.abs(m.vx); }\n        if (m.y < pad) { m.y = pad; m.vy = Math.abs(m.vy); }\n        else if (m.y > world.h - pad) { m.y = world.h - pad; m.vy = -Math.abs(m.vy); }\n      }\n    }\n\n    function drawMouse(m) {\n      \/\/ Same teiknefilm-stil som i spelet: kropp + \u00f8yre + hale\n      ctx.save();\n      ctx.translate(m.x, m.y);\n      const ang = Math.atan2(m.vy, m.vx);\n      ctx.rotate(ang);\n\n      \/\/ Kropp (oval)\n      ctx.shadowColor = \"rgba(0,0,0,0.35)\";\n      ctx.shadowBlur = 10 * world.scale;\n      ctx.shadowOffsetY = 6 * world.scale;\n      ctx.fillStyle = m.color;\n      ctx.beginPath();\n      ctx.ellipse(0, 0, m.r * 1.6, m.r * 1.05, 0, 0, Math.PI * 2);\n      ctx.fill();\n\n      \/\/ Mage-lys\n      ctx.shadowBlur = 0;\n      ctx.fillStyle = \"rgba(255,255,255,0.25)\";\n      ctx.beginPath();\n      ctx.ellipse(-m.r * 0.25, m.r * 0.12, m.r * 0.95, m.r * 0.55, 0, 0, Math.PI * 2);\n      ctx.fill();\n\n      \/\/ \u00d8rer\n      ctx.fillStyle = \"rgba(0,0,0,0.12)\";\n      ctx.beginPath();\n      ctx.arc(-m.r * 0.55, -m.r * 0.75, m.r * 0.42, 0, Math.PI * 2);\n      ctx.arc(m.r * 0.2, -m.r * 0.75, m.r * 0.38, 0, Math.PI * 2);\n      ctx.fill();\n\n      \/\/ Nese\n      ctx.fillStyle = \"rgba(0,0,0,0.45)\";\n      ctx.beginPath();\n      ctx.arc(m.r * 1.6, 0, m.r * 0.22, 0, Math.PI * 2);\n      ctx.fill();\n\n      \/\/ Hale\n      ctx.strokeStyle = \"rgba(255,255,255,0.35)\";\n      ctx.lineWidth = Math.max(1.2, 2 * world.scale);\n      ctx.lineCap = \"round\";\n      ctx.beginPath();\n      ctx.moveTo(-m.r * 1.6, m.r * 0.15);\n      ctx.quadraticCurveTo(-m.r * 2.6, m.r * 0.8, -m.r * 3.3, m.r * 0.25);\n      ctx.stroke();\n\n      ctx.restore();\n    }\n\n    \/\/ --- Boosters (visuelle pickups) ---\n    const pickups = [];\n    const PICKUP_KINDS = [\"tid\", \"lyn\", \"vox\", \"spreng\"];\n    function randomPickupKind() {\n      \/\/ Lyn\/vox skal ikkje respawne medan effekten p\u00e5g\u00e5r\n      const allowed = PICKUP_KINDS.filter((k) => (k === \"lyn\" ? effects.lyn <= 0 : k === \"vox\" ? effects.vox <= 0 : true));\n      return allowed[Math.floor(rand(0, allowed.length))];\n    }\n    function spawnPickup(kind) {\n      const r = 18 * world.scale;\n      const pad = r + 10 * world.scale;\n      const x = rand(world.w * 0.35, world.w - pad);\n      const y = rand(pad, world.h - pad);\n      const a = rand(0, Math.PI * 2);\n      const sp = rand(35, 70) * world.scale;\n      const value = kind === \"tid\" ? [5, 10, 15, 30][Math.floor(rand(0, 4))] : 0;\n      return { kind, value, x, y, vx: Math.cos(a) * sp, vy: Math.sin(a) * sp, r, t: rand(0, 10) };\n    }\n\n    function resetPickups() {\n      pickups.length = 0;\n      pickups.push(spawnPickup(\"tid\"));\n      pickups.push(spawnPickup(randomPickupKind()));\n    }\n\n    function updatePickups(dt) {\n      for (const p of pickups) {\n        p.t += dt;\n        p.x += p.vx * dt;\n        p.y += p.vy * dt;\n        const pad = p.r + 8 * world.scale;\n        if (p.x < pad) { p.x = pad; p.vx = Math.abs(p.vx); }\n        else if (p.x > world.w - pad) { p.x = world.w - pad; p.vx = -Math.abs(p.vx); }\n        if (p.y < pad) { p.y = pad; p.vy = Math.abs(p.vy); }\n        else if (p.y > world.h - pad) { p.y = world.h - pad; p.vy = -Math.abs(p.vy); }\n      }\n    }\n\n    function drawPickup(p, now) {\n      ctx.save();\n      ctx.translate(p.x, p.y);\n      const pulse = 0.9 + 0.1 * Math.sin(now \/ 120 + p.t);\n      const rr = p.r * pulse;\n\n      const ring = ctx.createRadialGradient(0, 0, 2, 0, 0, rr * 1.55);\n      ring.addColorStop(0, \"rgba(255,255,255,0.18)\");\n      const c =\n        p.kind === \"lyn\"\n          ? \"rgba(34,211,238,0.22)\"\n          : p.kind === \"vox\"\n            ? \"rgba(251,191,36,0.22)\"\n            : p.kind === \"spreng\"\n              ? \"rgba(251,113,133,0.20)\"\n              : \"rgba(167,139,250,0.22)\";\n      ring.addColorStop(1, c);\n\n      ctx.fillStyle = ring;\n      ctx.shadowColor =\n        p.kind === \"lyn\"\n          ? \"rgba(34,211,238,0.55)\"\n          : p.kind === \"vox\"\n            ? \"rgba(251,191,36,0.55)\"\n            : p.kind === \"spreng\"\n              ? \"rgba(251,113,133,0.55)\"\n              : \"rgba(167,139,250,0.55)\";\n      ctx.shadowBlur = 18 * world.scale;\n      ctx.beginPath();\n      ctx.arc(0, 0, rr * 1.18, 0, Math.PI * 2);\n      ctx.fill();\n\n      ctx.shadowBlur = 0;\n      ctx.strokeStyle =\n        p.kind === \"lyn\"\n          ? \"rgba(34,211,238,0.95)\"\n          : p.kind === \"vox\"\n            ? \"rgba(251,191,36,0.95)\"\n            : p.kind === \"spreng\"\n              ? \"rgba(251,113,133,0.95)\"\n              : \"rgba(167,139,250,0.95)\";\n      ctx.lineWidth = Math.max(2.0, 2.8 * world.scale);\n      ctx.beginPath();\n      ctx.arc(0, 0, rr, 0, Math.PI * 2);\n      ctx.stroke();\n\n      const label = p.kind === \"lyn\" ? \"\u26a1\" : p.kind === \"vox\" ? \"\ud83d\udd0d\" : p.kind === \"spreng\" ? \"\ud83e\udde8\" : String(p.value);\n      ctx.textAlign = \"center\";\n      ctx.textBaseline = \"middle\";\n      if (p.kind === \"tid\") {\n        const fs = Math.round(16 * world.scale);\n        ctx.font = `900 ${fs}px ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif`;\n        ctx.lineWidth = Math.max(3, 3.6 * world.scale);\n        ctx.strokeStyle = \"rgba(2,6,23,0.65)\";\n        ctx.fillStyle = \"rgba(255,255,255,0.98)\";\n        ctx.strokeText(label, 0, 0);\n        ctx.fillText(label, 0, 0);\n      } else {\n        const fs = Math.round(18 * world.scale);\n        ctx.font = `${fs}px \"Apple Color Emoji\",\"Segoe UI Emoji\",\"Noto Color Emoji\",system-ui,sans-serif`;\n        ctx.fillStyle = \"rgba(255,255,255,0.96)\";\n        ctx.fillText(label, 0, 0);\n      }\n      ctx.restore();\n    }\n\n    \/\/ Start med nokre boosters\n    resetPickups();\n\n    function pickTarget() {\n      let best = null, bestD2 = Infinity;\n      for (const m of mice) {\n        const dx = m.x - cat.x, dy = m.y - cat.y;\n        const d2 = dx * dx + dy * dy;\n        if (d2 < bestD2) { bestD2 = d2; best = m; }\n      }\n      return best;\n    }\n\n    function updateCat(dt) {\n      cat.t += dt;\n      effects.lyn = Math.max(0, effects.lyn - dt);\n      effects.vox = Math.max(0, effects.vox - dt);\n      bombPulse = Math.max(0, bombPulse - dt);\n\n      const speedMul = effects.lyn > 0 ? 2 : 1;\n      const sizeMul = effects.vox > 0 ? 1.8 : 1;\n      cat.maxSpeed = cat.baseMaxSpeed * speedMul;\n      cat.accel = cat.baseAccel * speedMul;\n      cat.size = Math.round(cat.baseSize * sizeMul);\n      cat.r = Math.round(cat.size * 0.40);\n\n      const t = pickTarget();\n      if (t) {\n        const dx = t.x - cat.x, dy = t.y - cat.y;\n        const d = norm(dx, dy);\n        const desiredVx = d.x * cat.maxSpeed;\n        const desiredVy = d.y * cat.maxSpeed;\n        const ax = (desiredVx - cat.vx) * 3.8;\n        const ay = (desiredVy - cat.vy) * 3.8;\n        const amag = hypot(ax, ay);\n        const cap = cat.accel;\n        const k = amag > cap ? cap \/ amag : 1;\n        cat.vx += ax * k * dt;\n        cat.vy += ay * k * dt;\n      }\n\n      \/\/ Liten friksjon\n      const drag = Math.pow(0.22, dt);\n      cat.vx *= drag; cat.vy *= drag;\n\n      cat.x += cat.vx * dt;\n      cat.y += cat.vy * dt;\n\n      const pad = cat.r + 8 * world.scale;\n      if (cat.x < pad) { cat.x = pad; cat.vx = Math.abs(cat.vx); }\n      else if (cat.x > world.w - pad) { cat.x = world.w - pad; cat.vx = -Math.abs(cat.vx); }\n      if (cat.y < pad) { cat.y = pad; cat.vy = Math.abs(cat.vy); }\n      else if (cat.y > world.h - pad) { cat.y = world.h - pad; cat.vy = -Math.abs(cat.vy); }\n\n      \/\/ Kollisjon med mus\n      for (let i = mice.length - 1; i >= 0; i--) {\n        const m = mice[i];\n        const dx = m.x - cat.x, dy = m.y - cat.y;\n        if (dx * dx + dy * dy <= (m.r + cat.r) ** 2) {\n          addSpark(m.x, m.y, 8);\n          mice.splice(i, 1);\n          mice.push(spawnMouse());\n        }\n      }\n\n      \/\/ Kollisjon med boosters (visuelt)\n      for (let i = 0; i < pickups.length; i++) {\n        const p = pickups[i];\n        const dx = p.x - cat.x, dy = p.y - cat.y;\n        if (dx * dx + dy * dy <= (p.r + cat.r) ** 2) {\n          if (p.kind === \"lyn\") {\n            effects.lyn = EFFECT_DUR.lyn;\n            addSpark(p.x, p.y, 18);\n          } else if (p.kind === \"vox\") {\n            effects.vox = EFFECT_DUR.vox;\n            addSpark(p.x, p.y, 20);\n          } else if (p.kind === \"spreng\") {\n            \/\/ Bomb: tek mus i eksplosjonsfelt\n            bombPulse = 0.55;\n            bombX = p.x; bombY = p.y;\n            addSpark(p.x, p.y, 30);\n            const R = 120 * world.scale;\n            const R2 = R * R;\n            for (let j = mice.length - 1; j >= 0; j--) {\n              const m = mice[j];\n              const mx = m.x - p.x, my = m.y - p.y;\n              if (mx * mx + my * my <= R2) {\n                mice.splice(j, 1);\n                mice.push(spawnMouse());\n              }\n            }\n          } else {\n            \/\/ Tid: berre ein liten \"pop\"\n            addSpark(p.x, p.y, 14);\n          }\n\n          pickups[i] = spawnPickup(randomPickupKind());\n          break;\n        }\n      }\n    }\n\n    function updateSpark(dt) {\n      for (let i = spark.length - 1; i >= 0; i--) {\n        const p = spark[i];\n        p.life -= dt;\n        p.a = clamp(p.life \/ 0.55, 0, 1);\n        p.x += p.vx * dt;\n        p.y += p.vy * dt;\n        p.vx *= Math.pow(0.06, dt);\n        p.vy *= Math.pow(0.06, dt);\n        if (p.life <= 0) spark.splice(i, 1);\n      }\n    }\n\n    function draw() {\n      ctx.clearRect(0, 0, world.w, world.h);\n\n      \/\/ Kj\u00f8kkengolv\n      if (!drawImageCover(floorImg, 0, 0, world.w, world.h)) {\n        const g = ctx.createLinearGradient(0, 0, world.w, world.h);\n        g.addColorStop(0, \"rgba(26, 35, 84, 0.55)\");\n        g.addColorStop(1, \"rgba(2, 6, 23, 0.75)\");\n        ctx.fillStyle = g;\n        ctx.fillRect(0, 0, world.w, world.h);\n      }\n\n      \/\/ Lesbar overlay\n      ctx.save();\n      ctx.fillStyle = \"rgba(2, 6, 23, 0.18)\";\n      ctx.fillRect(0, 0, world.w, world.h);\n      const vg = ctx.createRadialGradient(world.w * 0.5, world.h * 0.45, 30, world.w * 0.5, world.h * 0.5, world.w * 0.78);\n      vg.addColorStop(0, \"rgba(255,255,255,0.02)\");\n      vg.addColorStop(1, \"rgba(0,0,0,0.38)\");\n      ctx.fillStyle = vg;\n      ctx.fillRect(0, 0, world.w, world.h);\n      ctx.restore();\n\n      const now = performance.now();\n\n      \/\/ Mus\n      for (const m of mice) drawMouse(m);\n\n      \/\/ Boosters\n      for (const p of pickups) drawPickup(p, now);\n\n      \/\/ Bomb shockwave (n\u00e5r spreng blir plukka)\n      if (bombPulse > 0) {\n        ctx.save();\n        const t = 1 - bombPulse \/ 0.55; \/\/ 0..1\n        const R = (40 + 140 * t) * world.scale;\n        ctx.globalAlpha = 0.65 * (1 - t);\n        ctx.strokeStyle = \"rgba(255,255,255,0.92)\";\n        ctx.lineWidth = Math.max(2.2, 3.2 * world.scale);\n        ctx.shadowColor = \"rgba(251,113,133,0.65)\";\n        ctx.shadowBlur = 18 * world.scale;\n        ctx.beginPath();\n        ctx.arc(bombX, bombY, R, 0, Math.PI * 2);\n        ctx.stroke();\n        ctx.restore();\n      }\n\n      \/\/ Aktiv booster-gl\u00f8d rundt katten\n      if (effects.lyn > 0 || effects.vox > 0) {\n        ctx.save();\n        const r = cat.r * (effects.vox > 0 ? 1.75 : 1.45);\n        ctx.globalAlpha = 0.55;\n        ctx.shadowBlur = 22 * world.scale;\n        ctx.shadowColor = effects.lyn > 0 ? \"rgba(34,211,238,0.85)\" : \"rgba(251,191,36,0.85)\";\n        const g = ctx.createRadialGradient(cat.x, cat.y, 2, cat.x, cat.y, r * 1.25);\n        g.addColorStop(0, effects.vox > 0 ? \"rgba(251,191,36,0.30)\" : \"rgba(34,211,238,0.30)\");\n        g.addColorStop(1, \"rgba(0,0,0,0)\");\n        ctx.fillStyle = g;\n        ctx.beginPath();\n        ctx.arc(cat.x, cat.y, r * 1.1, 0, Math.PI * 2);\n        ctx.fill();\n        ctx.restore();\n      }\n\n      \/\/ Katt\n      ctx.save();\n      ctx.translate(cat.x, cat.y);\n      const ang = Math.atan2(cat.vy, cat.vx);\n      ctx.rotate(hypot(cat.vx, cat.vy) > 5 ? ang : Math.sin(cat.t * 0.7) * 0.08);\n      ctx.shadowColor = \"rgba(0,0,0,0.40)\";\n      ctx.shadowBlur = 14 * world.scale;\n      ctx.shadowOffsetY = 8 * world.scale;\n      ctx.font = `${cat.size}px \"Apple Color Emoji\",\"Segoe UI Emoji\",\"Noto Color Emoji\",system-ui,sans-serif`;\n      ctx.textAlign = \"center\";\n      ctx.textBaseline = \"middle\";\n      ctx.fillText(cat.emoji, 0, 0);\n      ctx.restore();\n\n      \/\/ Sparkles\n      for (const p of spark) {\n        ctx.save();\n        ctx.globalAlpha = p.a;\n        ctx.fillStyle = `hsla(${p.hue} 95% 70% \/ 0.95)`;\n        ctx.shadowColor = `hsla(${p.hue} 95% 70% \/ 0.55)`;\n        ctx.shadowBlur = 18 * world.scale;\n        ctx.beginPath();\n        ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\n        ctx.fill();\n        ctx.restore();\n      }\n    }\n\n    let last = performance.now();\n    function frame(now) {\n      const dt = Math.min(0.04, (now - last) \/ 1000);\n      last = now;\n      updateMice(dt);\n      updatePickups(dt);\n      updateCat(dt);\n      updateSpark(dt);\n      draw();\n      requestAnimationFrame(frame);\n    }\n    requestAnimationFrame(frame);\n  })();\n<\/script>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6c21d9e elementor-reverse-tablet elementor-reverse-mobile elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6c21d9e\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;shape_divider_bottom&quot;:&quot;waves&quot;,&quot;background_motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;background_motion_fx_translateY_effect&quot;:&quot;yes&quot;,&quot;shape_divider_top&quot;:&quot;arrow&quot;,&quot;background_motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;tablet_extra&quot;,&quot;tablet&quot;],&quot;background_motion_fx_translateY_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;background_motion_fx_translateY_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}}}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t<div class=\"elementor-shape elementor-shape-top\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 700 10\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M350,10L340,0h20L350,10z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t<div class=\"elementor-shape elementor-shape-bottom\" aria-hidden=\"true\" data-negative=\"false\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 1000 100\" preserveAspectRatio=\"none\">\n\t<path class=\"elementor-shape-fill\" d=\"M421.9,6.5c22.6-2.5,51.5,0.4,75.5,5.3c23.6,4.9,70.9,23.5,100.5,35.7c75.8,32.2,133.7,44.5,192.6,49.7\n\tc23.6,2.1,48.7,3.5,103.4-2.5c54.7-6,106.2-25.6,106.2-25.6V0H0v30.3c0,0,72,32.6,158.4,30.5c39.2-0.7,92.8-6.7,134-22.4\n\tc21.2-8.1,52.2-18.2,79.7-24.2C399.3,7.9,411.6,7.5,421.9,6.5z\"\/>\n<\/svg>\t\t<\/div>\n\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-wide\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6adbbd9\" data-id=\"6adbbd9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-36ede5a elementor-widget elementor-widget-heading\" data-id=\"36ede5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Finn noe du liker<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1375101 elementor-grid-4 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-posts__hover-gradient load-more-align-center elementor-widget elementor-widget-posts\" data-id=\"1375101\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;cards_columns&quot;:&quot;4&quot;,&quot;pagination_type&quot;:&quot;load_more_on_click&quot;,&quot;cards_columns_tablet&quot;:&quot;2&quot;,&quot;cards_columns_mobile&quot;:&quot;1&quot;,&quot;cards_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;load_more_spinner&quot;:{&quot;value&quot;:&quot;fas fa-spinner&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}\" data-widget_type=\"posts.cards\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-45359 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-hoderegning category-matematikk category-nyheter category-pop category-profilert category-spill category-topp\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/2048game\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1672\" height=\"941\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/2048bilde.jpg\" class=\"attachment-full size-full wp-image-45364\" alt=\"2048plakat\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/2048bilde.jpg 1672w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-300x169.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-1024x576.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-768x432.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-1536x864.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-805x452.jpg 805w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-1090x613.jpg 1090w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-600x338.jpg 600w\" sizes=\"(max-width: 1672px) 100vw, 1672px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/2048game\/\" >\n\t\t\t\t2048\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Swipe til h\u00f8yre, venstre, opp eller ned. Doble tallene og f\u00e5 poeng.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-45323 post type-post status-publish format-standard has-post-thumbnail hentry category-dobbel category-gratis category-nyheter category-pop category-profilert category-spill category-topp category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/slipp-ballen\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1672\" height=\"941\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball.jpg\" class=\"attachment-full size-full wp-image-45355\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball.jpg 1672w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-300x169.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1024x576.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-768x432.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1536x864.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-805x452.jpg 805w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-1090x613.jpg 1090w, https:\/\/gruble.net\/wp-content\/uploads\/drop-the-ball-600x338.jpg 600w\" sizes=\"(max-width: 1672px) 100vw, 1672px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/slipp-ballen\/\" >\n\t\t\t\tSlipp ballen\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Slipp ballen! Finn riktig fart og riktig sted. Bruk vinklene til din fordel. Klarer du \u00e5 komme inn p\u00e5 lista?<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-43395 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-gruiz category-lesetester category-norsk category-nyheter category-pop category-profilert category-quiz category-smating category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/nakviz\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"533\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz.jpg\" class=\"attachment-full size-full wp-image-43462\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz.jpg 800w, https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/nyhetskviz-600x400.jpg 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/nakviz\/\" >\n\t\t\t\tNyhetsKvIz\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Bli en nyhetskjenner. Test dine leseferdigheter med ferske nyheter fra Nettavisen. Skaff deg poeng og badger ved \u00e5 ta kvizer, kvirulere, gjenfortelle og reflektere.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-42628 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-kunnskap category-norsk category-nyheter category-pop category-profilert category-quiz category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/kviz-2\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/lessmart.jpg\" class=\"attachment-full size-full wp-image-42617\" alt=\"Man og kvinne leser p\u00e5 mobilskjerm og pc-skjerm.\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/lessmart.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/lessmart-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/lessmart-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/lessmart-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/lessmart-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/kviz-2\/\" >\n\t\t\t\tLive KvIz\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>F\u00e5 nyheter og kunnskap p\u00e5 en ny og spennende m\u00e5te. Oppdatert fra time til time. KI lager sp\u00f8rsm\u00e5l p\u00e5 direkten.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-42412 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-grubling category-matematikk category-nyheter category-pop category-profilert category-smating category-spill\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/katt-og-mus\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/kattogmus.jpg\" class=\"attachment-full size-full wp-image-42462\" alt=\"Katt jager mange mus\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/kattogmus.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/kattogmus-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/kattogmus-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/kattogmus-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/kattogmus-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/katt-og-mus\/\" >\n\t\t\t\tKatt og mus\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Hjelp katten \u00e5 fange magiske mus. F\u00f8rst blir de flere, s\u00e5 blir de f\u00e6rre.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-39236 post type-post status-publish format-standard has-post-thumbnail hentry category-europa category-geografi category-kart category-nyheter category-pop category-profilert category-spill category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/flaggmeister5000\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1070\" height=\"574\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister.jpg\" class=\"attachment-full size-full wp-image-39311\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister.jpg 1070w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-300x161.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-1024x549.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-768x412.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/flaggmeister-600x322.jpg 600w\" sizes=\"(max-width: 1070px) 100vw, 1070px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/flaggmeister5000\/\" >\n\t\t\t\tFlaggmeister 5000\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>L\u00e6r deg flagg fra hele verden.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-37959 post type-post status-publish format-standard has-post-thumbnail hentry category-gangetabellen category-gratis category-hoderegning category-matematikk category-nyheter category-pop category-profilert category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/mattematch\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1011\" height=\"881\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/mattematch-forside-figur-kvadrat.jpeg\" class=\"attachment-full size-full wp-image-37999\" alt=\"Gruble\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/mattematch-forside-figur-kvadrat.jpeg 1011w, https:\/\/gruble.net\/wp-content\/uploads\/mattematch-forside-figur-kvadrat-300x261.jpeg 300w, https:\/\/gruble.net\/wp-content\/uploads\/mattematch-forside-figur-kvadrat-768x669.jpeg 768w, https:\/\/gruble.net\/wp-content\/uploads\/mattematch-forside-figur-kvadrat-600x523.jpeg 600w\" sizes=\"(max-width: 1011px) 100vw, 1011px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/mattematch\/\" >\n\t\t\t\tMatteMatch\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Test Gruble.nets nye &laquo;treningsstudio&raquo; for hoderegning, MatteMatch. Det er en beta-versjon, men kan gi deg mye regneglede, bedre regneferdigheter og flotte sertifikater. <\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-37721 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-matematikk category-nyheter category-pop category-profilert category-smating category-spill category-ukategorisert category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/prisexpert-2-0\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/handle1.jpg?ver=1773740711\" class=\"attachment-full size-full wp-image-35772\" alt=\"Familie p\u00e5 handletur i dagligvarebutikk\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/handle1.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/handle1-300x200.jpg 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/prisexpert-2-0\/\" >\n\t\t\t\tPrisExpert -2.0\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Har du peiling p\u00e5 priser i butikken? Hvem er best i familien? Hvem er best i klassen? Test deg selv.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-36795 post type-post status-publish format-standard has-post-thumbnail hentry category-geografi category-kart category-nyheter category-pop category-profilert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/norbyer\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1964\" height=\"1224\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb.jpg\" class=\"attachment-full size-full wp-image-36816\" alt=\"Norgeskart\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb.jpg 1964w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-300x187.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-1024x638.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-768x479.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-1536x957.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/norbyer-thumb-600x374.jpg 600w\" sizes=\"(max-width: 1964px) 100vw, 1964px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/norbyer\/\" >\n\t\t\t\tByer i Norge\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Klarer du \u00e5 finne de norske byene? <\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-34625 post type-post status-publish format-standard has-post-thumbnail hentry category-geografi category-nyheter category-profilert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/kartflagg\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/kart-europa.jpg\" class=\"attachment-full size-full wp-image-34621\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/kart-europa.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/kart-europa-150x150.jpg 150w, https:\/\/gruble.net\/wp-content\/uploads\/kart-europa-80x80.jpg 80w, https:\/\/gruble.net\/wp-content\/uploads\/kart-europa-100x100.jpg 100w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/kartflagg\/\" >\n\t\t\t\tKart og flagg p\u00e5 Gruble.net\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Popul\u00e6re kart- og flaggoppgaver p\u00e5 Gruble.net. Test deg selv!<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-33012 post type-post status-publish format-standard has-post-thumbnail hentry category-lesetester category-norsk category-pop category-profilert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/lesetester-1\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/lesetest.jpg\" class=\"attachment-full size-full wp-image-32448\" alt=\"Gutt sitter og leser i en bok mens han skriver.\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/lesetest.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/lesetest-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/lesetester-1\/\" >\n\t\t\t\tVarierte lesetester &#8211; 1\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Pr\u00f8v disse lesetestene. Hvilken av dem gir deg best resultat?<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-23899 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-norsk category-nyheter category-profilert category-smating category-tasting category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/turbotaster-2-0\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/tastehender.jpg\" class=\"attachment-full size-full wp-image-23902\" alt=\"hender som skriver p\u00e5 et tastatur\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/tastehender.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-1024x585.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-1536x878.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/tastehender-600x343.jpg 600w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/turbotaster-2-0\/\" >\n\t\t\t\tTurboTaster &#8211; 2.0\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Skriv s\u00e5 fort du kan. Hvor mye klarer du \u00e5 forbedre deg?<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-9138 post type-post status-publish format-standard has-post-thumbnail hentry category-grubliser category-nyheter category-paske category-profilert category-quiz\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/trollsult\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/e-forside.jpeg\" class=\"attachment-full size-full wp-image-9140\" alt=\"sultne troll\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/e-forside.jpeg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-600x343.jpeg 600w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-300x171.jpeg 300w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-1024x585.jpeg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-768x439.jpeg 768w, https:\/\/gruble.net\/wp-content\/uploads\/e-forside-1536x878.jpeg 1536w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/trollsult\/\" >\n\t\t\t\tTrollsult\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Trollene sulter. Det er full krise i underverdenen. De skriker alle etter en helt som kan hjelpe dem.<\/p>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\t\t\t<span class=\"e-load-more-spinner\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-spinner\"><\/i>\t\t\t<\/span>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6101867 elementor-widget elementor-widget-heading\" data-id=\"6101867\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Finn noe mer du liker<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9511b1 elementor-grid-4 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-card-shadow-yes elementor-posts__hover-gradient load-more-align-center elementor-widget elementor-widget-posts\" data-id=\"d9511b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;cards_columns&quot;:&quot;4&quot;,&quot;pagination_type&quot;:&quot;load_more_on_click&quot;,&quot;cards_columns_tablet&quot;:&quot;2&quot;,&quot;cards_columns_mobile&quot;:&quot;1&quot;,&quot;cards_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:35,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet_extra&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;cards_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;load_more_spinner&quot;:{&quot;value&quot;:&quot;fas fa-spinner&quot;,&quot;library&quot;:&quot;fa-solid&quot;}}\" data-widget_type=\"posts.cards\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-cards elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-34211 post type-post status-publish format-standard has-post-thumbnail hentry category-geografi category-gratis category-nyheter category-spill category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/bybokstaver\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/bybokstaver.jpg\" class=\"attachment-full size-full wp-image-34311\" alt=\"rutenett med bokstaver i\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/bybokstaver.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/bybokstaver-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/bybokstaver-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/bybokstaver-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/bybokstaver-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/bybokstaver\/\" >\n\t\t\t\tByer i bokstaver\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Finn navn p\u00e5 byer i fylkene som dukker opp under rutenettet med bokstaver. Hvor mange klarer du?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/bybokstaver\/\" aria-label=\"Read more about Byer i bokstaver\" tabindex=\"-1\" >\n\t\t\tTa utfordringen \u00bb\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-35047 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-matematikk category-nyheter category-spill category-ukategorisert\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/lag-klokkeslett\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/klokke1.jpg\" class=\"attachment-full size-full wp-image-35294\" alt=\"Gutt og jente ser p\u00e5 klokke\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/klokke1.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/klokke1-300x200.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/klokke1-1024x683.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/klokke1-768x512.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/klokke1-600x400.jpg 600w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/lag-klokkeslett\/\" >\n\t\t\t\tKlokketrening\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Tren p\u00e5 klokka i ditt eget tempo. Men du f\u00e5r en liten stresstest helt til slutt.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/lag-klokkeslett\/\" aria-label=\"Read more about Klokketrening\" tabindex=\"-1\" >\n\t\t\tTa utfordringen \u00bb\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-8894 post type-post status-publish format-standard has-post-thumbnail hentry category-abonnement category-konkurranser category-medlemmer category-norsk category-nyheter category-quiz category-voksen\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/uttrykk\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/brent.jpeg\" class=\"attachment-full size-full wp-image-8896\" alt=\"barn som brenner seg p\u00e5 en flamme\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/brent.jpeg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/brent-600x343.jpeg 600w, https:\/\/gruble.net\/wp-content\/uploads\/brent-300x171.jpeg 300w, https:\/\/gruble.net\/wp-content\/uploads\/brent-1024x585.jpeg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/brent-768x439.jpeg 768w, https:\/\/gruble.net\/wp-content\/uploads\/brent-1536x878.jpeg 1536w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/uttrykk\/\" >\n\t\t\t\tNorske uttrykk\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Kan du uttrykkene?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/uttrykk\/\" aria-label=\"Read more about Norske uttrykk\" tabindex=\"-1\" >\n\t\t\tTa utfordringen \u00bb\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-45359 post type-post status-publish format-standard has-post-thumbnail hentry category-gratis category-hoderegning category-matematikk category-nyheter category-pop category-profilert category-spill category-topp\" role=\"listitem\">\n\t\t\t<div class=\"elementor-post__card\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/gruble.net\/2048game\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1672\" height=\"941\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/2048bilde.jpg\" class=\"attachment-full size-full wp-image-45364\" alt=\"2048plakat\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/2048bilde.jpg 1672w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-300x169.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-1024x576.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-768x432.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-1536x864.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-805x452.jpg 805w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-1090x613.jpg 1090w, https:\/\/gruble.net\/wp-content\/uploads\/2048bilde-600x338.jpg 600w\" sizes=\"(max-width: 1672px) 100vw, 1672px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/gruble.net\/2048game\/\" >\n\t\t\t\t2048\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Swipe til h\u00f8yre, venstre, opp eller ned. Doble tallene og f\u00e5 poeng.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/2048game\/\" aria-label=\"Read more about 2048\" tabindex=\"-1\" >\n\t\t\tTa utfordringen \u00bb\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\t\t\t<span class=\"e-load-more-spinner\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-spinner\"><\/i>\t\t\t<\/span>\n\t\t\n\t\t\t\t<div class=\"e-load-more-anchor\" data-page=\"1\" data-max-page=\"24\" data-next-page=\"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages\/43680\/page\/2\/\"><\/div>\n\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Se flere<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t<div class=\"e-load-more-message\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-102d8ae9 elementor-section-content-bottom elementor-reverse-mobile elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"102d8ae9\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;background_motion_fx_motion_fx_mouse&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-29ad6b78\" data-id=\"29ad6b78\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2dda08fc elementor-widget elementor-widget-heading\" data-id=\"2dda08fc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Hvorfor Gruble.net?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f855d6a elementor-widget elementor-widget-heading\" data-id=\"f855d6a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><span>01<\/span> <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76a3515 elementor-widget elementor-widget-icon-box\" data-id=\"76a3515\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tHjernens treningsstudio\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tAkkurat som en muskel blir sterkere med trening, blir hjernen skarpere med tenking. S\u00e5 b\u00f8y hjernens 'biceps' - gruble, tenke, l\u00e6re!\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38e1751 elementor-widget elementor-widget-heading\" data-id=\"38e1751\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><span>02<\/span> <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0084e1 elementor-widget elementor-widget-icon-box\" data-id=\"d0084e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tN\u00e6ring til hodet\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tKunnskap er som potetgull - n\u00e5r du f\u00f8rst starter, kan du ikke stoppe. Og best av alt, det utvider livsviten og ikke livvidden!\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97e9fed elementor-widget elementor-widget-heading\" data-id=\"97e9fed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><span>03<\/span> <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c403fa7 elementor-widget elementor-widget-icon-box\" data-id=\"c403fa7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tNysgjerrigheten tilfredsstilles\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\t\u00c5 tilfredsstille nysgjerrigheten er som \u00e5 n\u00f8ste opp universets hemmeligheter, tr\u00e5d for tr\u00e5d. Hvert svar \u00e5pner d\u00f8ren til en verden av underverker.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a7259a elementor-widget elementor-widget-heading\" data-id=\"9a7259a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\"><span>04<\/span> <\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7bc0031 elementor-widget elementor-widget-icon-box\" data-id=\"7bc0031\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h4 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tVerdien av ny kunnskap\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h4>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tNy kunnskap er en n\u00f8kkel til ukjente verdener, og et verkt\u00f8y for \u00e5 skape glede og mestring i ditt eget liv. \u00c5 l\u00e6re er \u00e5 gi deg selv gaver du kan bruke hver eneste dag.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-63f6ee7\" data-id=\"63f6ee7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c193e96 elementor-widget elementor-widget-image\" data-id=\"c193e96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1477\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen.png\" class=\"attachment-full size-full wp-image-12440\" alt=\"Figur som l\u00f8ffter vekter\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen.png 1920w, https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen-600x462.png 600w, https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen-300x231.png 300w, https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen-1024x788.png 1024w, https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen-768x591.png 768w, https:\/\/gruble.net\/wp-content\/uploads\/trimmer-hjernen-1536x1182.png 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0a3de48 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0a3de48\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c290c8a\" data-id=\"c290c8a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-207256e elementor-widget elementor-widget-html\" data-id=\"207256e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n  \/* Flytende knapp *\/\n  #grubleButton {\n    position: fixed;\n    bottom: 25px;\n    right: 25px;\n    width: 40px;\n    height: 40px;\n    background: #2d6cdf;\n    color: white;\n    font-size: 26px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n    z-index: 9999;\n    transition: transform 0.3s ease;\n  }\n  #grubleButton:hover {\n    transform: scale(1.1);\n  }\n\n  \/* Popup-vindu *\/\n  #grubleChat {\n    position: fixed;\n    bottom: 100px;\n    right: 25px;\n    width: 380px;\n    height: 520px; \/* fast h\u00f8yde *\/\n    background: #f2f2f2;\n    border-radius: 10px;\n    box-shadow: 0 4px 20px rgba(0,0,0,0.4);\n    overflow: hidden;\n    display: none;\n    z-index: 9998;\n    transition: opacity 0.3s ease, transform 0.3s ease;\n    transform: translateY(20px);\n    opacity: 0;\n  }\n\n  #grubleChat iframe {\n    width: 100%;\n    height: 100%;\n    border: none;\n    display: block;\n  }\n\n  \/* Smal vertikal \"grep-linje\" p\u00e5 venstre side *\/\n  #grubleResize {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 6px;\n    height: 100%;\n    cursor: ew-resize; \/* sideveis-dra *\/\n    z-index: 10000;\n    background: transparent;\n  }\n  #grubleResize:hover {\n    background: rgba(0,0,0,0.05);\n  }\n  \n  @media (max-width: 480px) {\n  #grubleChat {\n    width: 90vw;       \/* 90 % av skjermbredden *\/\n    right: 5vw;        \/* flytt den litt inn fra h\u00f8yre *\/\n    left: auto;        \/* s\u00f8rg for at den ikke \"hopper\" til venstre *\/\n    height: 70vh;      \/* gj\u00f8r den ogs\u00e5 litt lavere p\u00e5 sm\u00e5 skjermer *\/\n  }\n}\n  \n<\/style>\n\n<!-- Flytende knapp -->\n<div id=\"grubleButton\" title=\"Snakk med Grublel\u00e6reren\">\ud83e\udde0<\/div>\n\n<!-- Popup med innebygd chat -->\n<div id=\"grubleChat\">\n  <iframe src=\"https:\/\/www.gruble.net\/grublelarer\/\"><\/iframe>\n  <div id=\"grubleResize\" title=\"Dra for \u00e5 justere bredde\"><\/div>\n<\/div>\n\n<script>\n  const btn = document.getElementById(\"grubleButton\");\n  const chat = document.getElementById(\"grubleChat\");\n  const resizeHandle = document.getElementById(\"grubleResize\");\n  const iframe = chat.querySelector(\"iframe\");\n  let isOpen = false;\n  let isResizing = false;\n\n  \/* \u00c5pne \/ lukke *\/\n  btn.addEventListener(\"click\", () => {\n    if (!isOpen) {\n      chat.style.display = \"block\";\n      requestAnimationFrame(() => {\n        chat.style.opacity = 1;\n        chat.style.transform = \"translateY(0)\";\n      });\n      isOpen = true;\n    } else {\n      chat.style.opacity = 0;\n      chat.style.transform = \"translateY(20px)\";\n      setTimeout(() => (chat.style.display = \"none\"), 300);\n      isOpen = false;\n    }\n  });\n\n  \/* --- Sideveis resizing fra venstre kant --- *\/\n  let startX, startW;\n\n  resizeHandle.addEventListener(\"mousedown\", e => {\n    e.preventDefault();\n    isResizing = true;\n    iframe.style.pointerEvents = \"none\"; \/\/ unng\u00e5 at iframe fanger musen\n    startX = e.clientX;\n    startW = chat.offsetWidth;\n    window.addEventListener(\"mousemove\", resizeChat);\n    window.addEventListener(\"mouseup\", stopResize);\n  });\n\n  function resizeChat(e) {\n    if (!isResizing) return;\n    const dx = startX - e.clientX; \/\/ drar mot venstre = \u00f8kt bredde\n    const newW = Math.max(300, Math.min(800, startW + dx));\n    chat.style.width = newW + \"px\";\n  }\n\n  function stopResize() {\n    isResizing = false;\n    iframe.style.pointerEvents = \"\";\n    window.removeEventListener(\"mousemove\", resizeChat);\n    window.removeEventListener(\"mouseup\", stopResize);\n  }\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Hjernekos for folk i alle aldre!<\/p>\n","protected":false},"author":2,"featured_media":5587,"parent":0,"menu_order":51,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[],"tags":[],"folder":[],"class_list":["post-43680","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Forsiden - Gruble.net<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gruble.net\/\" \/>\n<meta property=\"og:locale\" content=\"nb_NO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Forsiden - Gruble.net\" \/>\n<meta property=\"og:description\" content=\"Hjernekos for folk i alle aldre!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gruble.net\/\" \/>\n<meta property=\"og:site_name\" content=\"Gruble.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Gruble.net\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-08T06:00:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gruble.net\/wp-content\/uploads\/hjerne.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Ansl. lesetid\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutter\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gruble.net\\\/\",\"url\":\"https:\\\/\\\/gruble.net\\\/\",\"name\":\"Forsiden - Gruble.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/hjerne.gif\",\"datePublished\":\"2026-03-04T06:47:00+00:00\",\"dateModified\":\"2026-05-08T06:00:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#breadcrumb\"},\"inLanguage\":\"nb-NO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gruble.net\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/hjerne.gif\",\"contentUrl\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/hjerne.gif\",\"width\":350,\"height\":350,\"caption\":\"bilde av hjerne\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Hjem\",\"item\":\"https:\\\/\\\/gruble.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Forsiden\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#website\",\"url\":\"https:\\\/\\\/gruble.net\\\/\",\"name\":\"Gruble.net\",\"description\":\"Spill deg til kunnskap og sett kunnskapen p\u00e5 spill!\",\"publisher\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gruble.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nb-NO\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#organization\",\"name\":\"Gruble.net\",\"url\":\"https:\\\/\\\/gruble.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/logo-1-e1717058548444.png\",\"contentUrl\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/logo-1-e1717058548444.png\",\"width\":483,\"height\":149,\"caption\":\"Gruble.net\"},\"image\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Gruble.net\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Forsiden - Gruble.net","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gruble.net\/","og_locale":"nb_NO","og_type":"article","og_title":"Forsiden - Gruble.net","og_description":"Hjernekos for folk i alle aldre!","og_url":"https:\/\/gruble.net\/","og_site_name":"Gruble.net","article_publisher":"https:\/\/www.facebook.com\/Gruble.net","article_modified_time":"2026-05-08T06:00:20+00:00","og_image":[{"width":350,"height":350,"url":"https:\/\/gruble.net\/wp-content\/uploads\/hjerne.gif","type":"image\/gif"}],"twitter_card":"summary_large_image","twitter_misc":{"Ansl. lesetid":"11 minutter"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gruble.net\/","url":"https:\/\/gruble.net\/","name":"Forsiden - Gruble.net","isPartOf":{"@id":"https:\/\/gruble.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gruble.net\/#primaryimage"},"image":{"@id":"https:\/\/gruble.net\/#primaryimage"},"thumbnailUrl":"https:\/\/gruble.net\/wp-content\/uploads\/hjerne.gif","datePublished":"2026-03-04T06:47:00+00:00","dateModified":"2026-05-08T06:00:20+00:00","breadcrumb":{"@id":"https:\/\/gruble.net\/#breadcrumb"},"inLanguage":"nb-NO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gruble.net\/"]}]},{"@type":"ImageObject","inLanguage":"nb-NO","@id":"https:\/\/gruble.net\/#primaryimage","url":"https:\/\/gruble.net\/wp-content\/uploads\/hjerne.gif","contentUrl":"https:\/\/gruble.net\/wp-content\/uploads\/hjerne.gif","width":350,"height":350,"caption":"bilde av hjerne"},{"@type":"BreadcrumbList","@id":"https:\/\/gruble.net\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Hjem","item":"https:\/\/gruble.net\/"},{"@type":"ListItem","position":2,"name":"Forsiden"}]},{"@type":"WebSite","@id":"https:\/\/gruble.net\/#website","url":"https:\/\/gruble.net\/","name":"Gruble.net","description":"Spill deg til kunnskap og sett kunnskapen p\u00e5 spill!","publisher":{"@id":"https:\/\/gruble.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gruble.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nb-NO"},{"@type":"Organization","@id":"https:\/\/gruble.net\/#organization","name":"Gruble.net","url":"https:\/\/gruble.net\/","logo":{"@type":"ImageObject","inLanguage":"nb-NO","@id":"https:\/\/gruble.net\/#\/schema\/logo\/image\/","url":"https:\/\/gruble.net\/wp-content\/uploads\/logo-1-e1717058548444.png","contentUrl":"https:\/\/gruble.net\/wp-content\/uploads\/logo-1-e1717058548444.png","width":483,"height":149,"caption":"Gruble.net"},"image":{"@id":"https:\/\/gruble.net\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Gruble.net"]}]}},"_links":{"self":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages\/43680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/comments?post=43680"}],"version-history":[{"count":134,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages\/43680\/revisions"}],"predecessor-version":[{"id":45530,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/pages\/43680\/revisions\/45530"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/media\/5587"}],"wp:attachment":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/media?parent=43680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/categories?post=43680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/tags?post=43680"},{"taxonomy":"folder","embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/folder?post=43680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}