{"id":21646,"date":"2024-09-26T12:13:28","date_gmt":"2024-09-26T10:13:28","guid":{"rendered":"https:\/\/gruble.net\/?p=21646"},"modified":"2026-02-18T10:28:39","modified_gmt":"2026-02-18T09:28:39","slug":"flyingdisk","status":"publish","type":"post","link":"https:\/\/gruble.net\/flyingdisk\/","title":{"rendered":"FlyingDisk"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"21646\" class=\"elementor elementor-21646\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-469ccfd elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"469ccfd\" 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-527027e\" data-id=\"527027e\" 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-da79064 elementor-widget elementor-widget-heading\" data-id=\"da79064\" 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\">Beregn vinklene<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3404a55 elementor-widget elementor-widget-html\" data-id=\"3404a55\" 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 lang=\"no\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Frisbeekrigerne Spill<\/title>\n    <!-- Inkluder Poppins-fonten -->\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins&display=swap\" rel=\"stylesheet\">\n    <style>\n        \/* Generell stil *\/\n        body {\n            margin: 0;\n            padding: 0;\n            background-color: #e0ffe0; \/* Lys gr\u00f8nn bakgrunn *\/\n            font-family: 'Poppins', sans-serif;\n        }\n\n        \/* Begrens stilen til spillomr\u00e5det *\/\n        #game-container {\n            width: 100%;\n            max-width: 600px;\n            margin: 0 auto;\n            position: relative;\n            background-color: #32CD32; \/* Gr\u00f8nn bakgrunn *\/\n            border-radius: 20px;\n            overflow: hidden;\n            font-family: 'Poppins', sans-serif;\n        }\n\n        #canvas-container {\n            position: relative;\n            width: 100%;\n            height: 80vh;\n            overflow: hidden;\n            border-radius: 20px;\n            padding-bottom: 50px; \/* Legg til rom under *\/\n            touch-action: none;    \/* Forhindre scrolling *\/\n        }\n\n        \/* Lite bilde under spill *\/\n        #small-logo {\n            position: absolute;\n            z-index: 4;\n            pointer-events: none;\n            transform: translate(-50%, -50%);\n            height: 60px; \/* Juster denne verdien for \u00e5 endre st\u00f8rrelsen p\u00e5 logoen *\/\n        }\n\n        \/* Knapp for \u00e5 endre vinkel *\/\n        #angle-button {\n            position: absolute;\n            padding: 15px 20px;\n            background: transparent;\n            color: #fff;\n            border: none;\n            border-radius: 50px;\n            font-size: 28px;\n            cursor: pointer;\n            z-index: 5;\n            user-select: none;\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);\n            transition: transform 0.2s, background 0.3s;\n            transform: translate(-50%, -50%);\n        }\n\n        \/* Touch-omr\u00e5det rundt disken *\/\n        #disc-wrapper {\n            position: absolute;\n            z-index: 6; \/* Over logo og vinkelknapp *\/\n            width: 42px;\n            height: 42px;\n        }\n\n        \/* Oppdatert diskdesign *\/\n        #disc {\n            width: 40px;\n            height: 40px;\n            \/* Legg til gradient og glanseffekt med bl\u00e5 basefarge *\/\n            background: radial-gradient(circle at 30% 30%, #1E90FF, #0000CD); \/* Bl\u00e5 gradient *\/\n            border-radius: 50%;\n            \/* Fjernet outline\/border *\/\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            cursor: grab;\n            transition: transform 0.1s ease;\n            overflow: hidden;\n        }\n\n        \/* Rotasjonseffekt n\u00e5r disken er i bevegelse *\/\n        #disc.rotating {\n            animation: rotateDisc 1s linear infinite;\n        }\n\n        @keyframes rotateDisc {\n            from {\n                transform: translate(-50%, -50%) rotate(0deg);\n            }\n            to {\n                transform: translate(-50%, -50%) rotate(360deg);\n            }\n        }\n\n        \/* Beholder for sirklene *\/\n        #circle-container {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            z-index: 2;\n        }\n\n        \/* Oppdatert design for treffpunktene *\/\n        .circle {\n            width: 20px;\n            height: 20px;\n            \/* M\u00f8rk r\u00f8d gradient med glanseffekt *\/\n            background: radial-gradient(circle at 30% 30%, #8B0000, #B22222);\n            border-radius: 50%;\n            position: absolute;\n            transform: translate(-50%, -50%);\n        }\n\n        #game-over-message {\n            display: none;\n            position: absolute;\n            top: 20px;\n            bottom: 20px;\n            left: 0;\n            right: 0;\n            text-align: center;\n            background-color: rgba(0, 0, 0, 0.7);\n            color: #FFFFFF;\n            padding: 20px;\n            font-size: 20px;\n            z-index: 6;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            border-radius: 20px;\n            display: flex; \/* Sikrer at meldingen vises korrekt *\/\n        }\n\n        #game-over-message div {\n            margin-bottom: 20px;\n        }\n\n        #game-over-message button {\n            padding: 10px 20px;\n            font-size: 16px;\n            background-color: #00008B;\n            color: white;\n            border: none;\n            cursor: pointer;\n            border-radius: 5px;\n        }\n\n        \/* Livskontainer *\/\n        #lives-container {\n            position: absolute;\n            bottom: 10px;\n            left: 10px;\n            z-index: 5;\n            display: flex;\n            flex-wrap: wrap; \/* Tillater innpakning av hjerter til neste rad *\/\n            max-width: 100px; \/* Juster denne verdien etter behov *\/\n        }\n\n        .heart {\n            font-size: 32px;\n            color: red;\n            margin-right: 5px;\n            margin-bottom: 5px; \/* Legg til litt mellomrom mellom radene *\/\n            animation: pulse 1s infinite;\n        }\n\n        @keyframes pulse {\n            0% { transform: scale(1); }\n            50% { transform: scale(1.1); }\n            100% { transform: scale(1); }\n        }\n\n        #start-overlay {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background-color: rgba(0, 0, 0, 0.3);\n            color: white;\n            font-size: 30px;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            cursor: pointer;\n            z-index: 6;\n            border-radius: 20px;\n        }\n\n        #start-overlay span {\n            position: relative;\n            top: -50px;\n        }\n\n        \/* Bonus time stil *\/\n        #bonus-time {\n            position: absolute;\n            top: 50px; \/* Justert for \u00e5 ikke overlappe med sirkelen *\/\n            left: 10px;\n            font-size: 18px;\n            color: #FFD700;\n            z-index: 5;\n            opacity: 0;\n            transition: opacity 0.5s;\n        }\n\n        \/* Transient badge stil *\/\n        #transient-badge {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%) scale(1);\n            background-color: rgba(255, 215, 0, 0.9);\n            padding: 20px 30px;\n            border-radius: 15px;\n            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);\n            z-index: 7;\n            display: none;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            animation: transientBadgeShow 0.5s forwards;\n            font-family: 'Poppins', sans-serif;\n        }\n\n        #transient-badge.show {\n            display: flex;\n            animation: transientBadgeShow 0.5s forwards, transientBadgeHide 0.5s 2.5s forwards;\n        }\n\n        #transient-badge span {\n            font-size: 24px;\n            color: #00008B;\n            margin-bottom: 10px;\n        }\n\n        #transient-badge p {\n            font-size: 18px;\n            color: #00008B;\n        }\n\n        @keyframes transientBadgeShow {\n            from {\n                opacity: 0;\n                transform: translate(-50%, -50%) scale(0.5);\n            }\n            to {\n                opacity: 1;\n                transform: translate(-50%, -50%) scale(1);\n            }\n        }\n\n        @keyframes transientBadgeHide {\n            from {\n                opacity: 1;\n                transform: translate(-50%, -50%) scale(1);\n            }\n            to {\n                opacity: 0;\n                transform: translate(-50%, -50%) scale(0.5);\n            }\n        }\n\n        \/* Badge-kontainer *\/\n        #badge-container {\n            position: absolute;\n            top: 10px;\n            right: 10px;\n            z-index: 4;\n            display: flex;\n            flex-direction: column;\n            align-items: flex-end;\n        }\n\n        .badge {\n            background-color: gold;\n            color: #000;\n            padding: 10px 15px;\n            margin-top: 10px;\n            border-radius: 10px;\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);\n            display: flex;\n            align-items: center;\n            animation: fadeIn 0.5s ease-in-out, fadeOut 0.5s ease-in-out 3s;\n            opacity: 0;\n            font-family: 'Poppins', sans-serif;\n        }\n\n        .badge span:first-child {\n            font-size: 24px;\n            margin-right: 10px;\n        }\n\n        .badge.show {\n            opacity: 1;\n        }\n\n        @keyframes fadeIn {\n            from { opacity: 0; transform: translateY(-20px); }\n            to   { opacity: 1; transform: translateY(0); }\n        }\n\n        @keyframes fadeOut {\n            from { opacity: 1; transform: translateY(0); }\n            to   { opacity: 0; transform: translateY(-20px); }\n        }\n\n        \/* Liste over alle oppn\u00e5dde badges *\/\n        #all-badges {\n            position: absolute;\n            top: 50px;\n            right: 10px;\n            background-color: rgba(255, 255, 255, 0.95);\n            padding: 10px;\n            border-radius: 10px;\n            max-height: 150px;\n            overflow-y: auto;\n            z-index: 4;\n            display: none;\n            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);\n            width: 300px;\n            font-family: 'Poppins', sans-serif;\n        }\n\n        #all-badges.show {\n            display: block;\n        }\n\n        \/* Flyttet knappen til \u00f8vre h\u00f8yre hj\u00f8rne og endret til ikon *\/\n        #toggle-badges {\n            position: absolute;\n            top: 10px;\n            right: 10px;\n            padding: 5px 10px;\n            font-size: 24px;\n            cursor: pointer;\n            border: none;\n            border-radius: 5px;\n            background-color: transparent;\n            color: white;\n            z-index: 5;\n            display: none;\n        }\n\n        #all-badges ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        #all-badges li {\n            display: flex;\n            align-items: center;\n            margin-bottom: 5px;\n            color: #00008B;\n        }\n\n        #all-badges li span:last-child {\n            color: #00008B;\n        }\n\n        \/* Tittel p\u00e5 Alle Badges-lista *\/\n        #all-badges h3 {\n            color: orange;\n            font-size: 18px;\n            margin-bottom: 10px;\n        }\n\n        \/* Knapp for \u00e5 lagre badges *\/\n        #save-badges-button {\n            margin-top: 10px;\n            padding: 5px 10px;\n            font-size: 14px;\n            cursor: pointer;\n            border: none;\n            border-radius: 5px;\n            background-color: #00008B;\n            color: white;\n        }\n\n        \/* Timer sirkelen *\/\n        #timer-container {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100px;\n            height: 80px;\n            z-index: 5;\n        }\n\n        #countdown-circle {\n            width: 60%;\n            height: 50%;\n            transform: rotate(-90deg); \/* Rot\u00e9r sirkelen slik at den starter fra toppen *\/\n        }\n\n        \/* Juster stroke-width i CSS *\/\n        #countdown-circle circle {\n            stroke-width: 8; \/* Justert tykkelse for mindre sirkel *\/\n        }\n\n        #timer-text {\n            font-size: 12px; \/* Justert fontst\u00f8rrelse for mindre sirkel *\/\n            fill: #00008B;\n            font-family: 'Poppins', sans-serif;\n            text-anchor: middle;\n            dominant-baseline: middle;\n            transform: rotate(90deg); \/* Rot\u00e9r teksten tilbake *\/\n            transition: opacity 0.5s;\n        }\n\n        \/* Fyll inne i sirkelen *\/\n        #fill-circle {\n            transition: fill 1s linear;\n        }\n\n        \/* Leaderboard-stil *\/\n        #leaderboard-container {\n            max-width: 600px;\n            margin: 20px auto;\n            background-color: #f0f0f0;\n            padding: 20px;\n            border-radius: 10px;\n            text-align: center; \/* Midstiller teksten *\/\n        }\n\n        #leaderboard-container h2 {\n            text-align: center;\n            color: #333;\n        }\n\n        #leaderboard-list {\n            list-style: none;\n            padding: 0;\n            margin: 0 auto; \/* Midstiller listen *\/\n            max-width: 500px; \/* Juster denne verdien etter behov *\/\n            counter-reset: leaderboard-counter;\n        }\n\n        #leaderboard-list li {\n            padding: 5px 0;\n            border-bottom: none; \/* Fjern linjene *\/\n            font-size: 18px;\n            color: #00008B;\n            display: flex;\n            justify-content: center; \/* Midstiller innholdet horisontalt *\/\n            align-items: center; \/* Vertikal sentrering *\/\n        }\n\n        #leaderboard-list li::before {\n            counter-increment: leaderboard-counter;\n            content: counter(leaderboard-counter) \". \";\n            margin-right: 10px; \/* Juster mellomrom mellom nummer og initialer *\/\n            color: #00008B;\n            font-weight: bold;\n        }\n\n        #leaderboard-list li:last-child {\n            border-bottom: none; \/* S\u00f8rg for at siste element ogs\u00e5 har ingen border *\/\n        }\n\n        \/* Initialer Modal *\/\n        #initials-modal {\n            display: none; \/* Skjult som standard *\/\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: 10;\n            justify-content: center;\n            align-items: center;\n        }\n\n        #initials-modal .modal-content {\n            background-color: #fff;\n            padding: 30px;\n            border-radius: 10px;\n            text-align: center;\n            width: 80%;\n            max-width: 400px;\n            box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);\n        }\n\n        #initials-modal h3 {\n            color: #00008B;\n            margin-bottom: 20px;\n        }\n\n        #initials-modal input {\n            width: 80%;\n            padding: 10px;\n            font-size: 18px;\n            border: 2px solid #00008B;\n            border-radius: 5px;\n            text-align: center; \/* Midtstiller teksten i inputfeltet *\/\n            color: #00008B;\n            margin-bottom: 20px;\n            text-transform: uppercase; \/* Automatisk konvertering til store bokstaver *\/\n        }\n\n        #initials-modal button {\n            padding: 10px 20px;\n            font-size: 16px;\n            background-color: #00008B;\n            color: white;\n            border: none;\n            cursor: pointer;\n            border-radius: 5px;\n        }\n\n        \/* Responsiv tilpasning *\/\n        @media (min-width: 600px) {\n            #disc-wrapper {\n                width: 42px;\n                height: 42px;\n            }\n\n            #disc {\n                width: 40px;\n                height: 40px;\n            }\n        }\n\n        \/* Deaktiver pointer events n\u00e5r disken beveger seg *\/\n        #disc-wrapper.moving {\n            pointer-events: none;\n        }\n    <\/style>\n\n    <!-- Firebase SDK -->\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-app-compat.js\"><\/script>\n    <script src=\"https:\/\/www.gstatic.com\/firebasejs\/9.23.0\/firebase-firestore-compat.js\"><\/script>\n    <!-- html2canvas for \u00e5 ta skjermbilder -->\n    <script src=\"https:\/\/html2canvas.hertzen.com\/dist\/html2canvas.min.js\"><\/script>\n<\/head>\n<body>\n    <!-- Spillcontainer -->\n    <div id=\"game-container\">\n        <!-- Spillomr\u00e5de -->\n        <div id=\"canvas-container\">\n            <!-- Lite bilde under spill -->\n            <img decoding=\"async\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/fk-logo.png\" id=\"small-logo\" alt=\"Logo\">\n            <!-- Knapp for \u00e5 endre vinkel -->\n            <div id=\"angle-button\">\u21ba<\/div>\n            <!-- Beholder for sirklene -->\n            <div id=\"circle-container\"><\/div>\n            <!-- Touch-omr\u00e5det rundt disken -->\n            <div id=\"disc-wrapper\">\n                <div id=\"disc\"><\/div>\n            <\/div>\n            <!-- Spill slutt melding -->\n            <div id=\"game-over-message\"><\/div>\n            <!-- Start overlay -->\n            <div id=\"start-overlay\"><span>Kast disken!<\/span><\/div>\n            <!-- Timer sirkelen -->\n            <div id=\"timer-container\">\n                <svg id=\"countdown-circle\" width=\"40\" height=\"40\">\n                    <circle cx=\"20\" cy=\"20\" r=\"16\" stroke=\"#FFD700\" fill=\"none\"><\/circle>\n                    <circle id=\"progress-bg\" cx=\"20\" cy=\"20\" r=\"16\" stroke=\"#00008B\" fill=\"none\" opacity=\"0.1\"><\/circle>\n                    <circle id=\"progress\" cx=\"20\" cy=\"20\" r=\"16\" stroke=\"#00008B\" fill=\"none\"><\/circle>\n                    <circle id=\"fill-circle\" cx=\"20\" cy=\"20\" r=\"14\" fill=\"#00FF00\"><\/circle>\n                    <text id=\"timer-text\" x=\"50%\" y=\"50%\" dy=\".3em\">10<\/text>\n                <\/svg>\n            <\/div>\n            <!-- Bonus time -->\n            <div id=\"bonus-time\">+1 sek<\/div>\n            <!-- Transient badge display -->\n            <div id=\"transient-badge\">\n                <span id=\"transient-badge-icon\">\ud83c\udfc5<\/span>\n                <p id=\"transient-badge-name\">Runde 1<\/p>\n            <\/div>\n            <!-- Badge-kontainer -->\n            <div id=\"badge-container\"><\/div>\n            <!-- Toggle for \u00e5 vise alle badges -->\n            <button id=\"toggle-badges\">\ud83c\udfc6<\/button>\n            <!-- Liste over alle oppn\u00e5dde badges -->\n            <div id=\"all-badges\">\n                <h3>Alle Badges<\/h3>\n                <ul id=\"badge-list\"><\/ul>\n                <!-- Knapp for \u00e5 lagre badges -->\n                <button id=\"save-badges-button\" data-html2canvas-ignore=\"true\">Lagre badges<\/button>\n            <\/div>\n            <!-- Livskontainer -->\n            <div id=\"lives-container\"><\/div>\n        <\/div>\n    <\/div>\n\n    <!-- Leaderboard-seksjon -->\n    <div id=\"leaderboard-container\">\n        <h2>Eliten<\/h2>\n        <ol id=\"leaderboard-list\">\n            <!-- Top 50 poengsummer vil bli lagt til her -->\n        <\/ol>\n    <\/div>\n\n    <!-- Initialer Modal -->\n    <div id=\"initials-modal\">\n        <div class=\"modal-content\">\n            <h3>Gratulerer!<\/h3><br>Du har en topp 50 poengsum.\n\n            <input \n                type=\"text\" \n                id=\"initials-input\" \n                maxlength=\"3\" \n                placeholder=\"Skriv inn dine initialer\" \n                autocomplete=\"off\" \n                pattern=\"[A-Za-z\u00c6\u00d8\u00c5\u00e6\u00f8\u00e5]{2,3}\" \n                title=\"Bruk 2 eller 3 bokstaver, inkludert \u00c6, \u00d8, \u00c5.\"\n            >\n            <button id=\"submit-initials\">Send<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- JavaScript -->\n    <script>\n    document.addEventListener('DOMContentLoaded', function() {\n        \/\/ Firebase initialisering\n        const firebaseConfig = {\n            apiKey: \"AIzaSyAUR8TQW6wGwnT3wckULbcaVztdZD7A4o0\",\n            authDomain: \"gruble-70356.firebaseapp.com\",\n            projectId: \"gruble-70356\",\n            storageBucket: \"gruble-70356.appspot.com\",\n            messagingSenderId: \"559626993773\",\n            appId: \"1:559626993773:web:7fd87d65601a8ddac73f64\",\n            measurementId: \"G-X2KHFNJ6L7\"\n        };\n\n        firebase.initializeApp(firebaseConfig);\n        const db = firebase.firestore();\n\n        \/\/ Funksjoner for Leaderboard\n        function fetchLeaderboard() {\n            db.collection(\"frisbeekrigerne\")\n              .orderBy(\"points\", \"desc\")\n              .limit(50)\n              .get()\n              .then((querySnapshot) => {\n                  const leaderboardList = document.getElementById('leaderboard-list');\n                  leaderboardList.innerHTML = ''; \/\/ T\u00f8m listen f\u00f8r du legger til nye elementer\n                  \n                  querySnapshot.forEach((doc) => {\n                      const data = doc.data();\n                      const listItem = document.createElement('li');\n                      listItem.textContent = `${data.initials}: ${data.points.toFixed(2)} poeng`;\n                      leaderboardList.appendChild(listItem);\n                  });\n              })\n              .catch((error) => {\n                  console.error(\"Feil ved henting av leaderboard:\", error);\n              });\n        }\n\n        function setupLeaderboardListener() {\n            db.collection(\"frisbeekrigerne\")\n              .orderBy(\"points\", \"desc\")\n              .limit(50)\n              .onSnapshot((querySnapshot) => {\n                  const leaderboardList = document.getElementById('leaderboard-list');\n                  leaderboardList.innerHTML = ''; \/\/ T\u00f8m listen f\u00f8r du legger til nye elementer\n                  \n                  querySnapshot.forEach((doc) => {\n                      const data = doc.data();\n                      const listItem = document.createElement('li');\n                      listItem.textContent = `${data.initials}: ${data.points.toFixed(2)} poeng`;\n                      leaderboardList.appendChild(listItem);\n                  });\n              }, (error) => {\n                  console.error(\"Feil med leaderboard listener:\", error);\n              });\n        }\n\n        \/\/ Sjekk om brukerens poeng er i topp 50\n        function checkIfTopScore(userPoints) {\n            return db.collection(\"frisbeekrigerne\")\n                     .orderBy(\"points\", \"desc\")\n                     .limit(50)\n                     .get()\n                     .then((querySnapshot) => {\n                         if (querySnapshot.size < 50) {\n                             return true; \/\/ Mindre enn 50 scores, s\u00e5 brukeren kvalifiserer seg\n                         }\n                         const lowestTopScore = querySnapshot.docs[querySnapshot.size - 1].data().points;\n                         return userPoints > lowestTopScore;\n                     })\n                     .catch((error) => {\n                         console.error(\"Feil ved sjekk av top score:\", error);\n                         return false;\n                     });\n        }\n\n        \/\/ Prompt bruker for initialer med custom modal\n        function promptForInitials(userPoints) {\n            const modal = document.getElementById('initials-modal');\n            const submitButton = document.getElementById('submit-initials');\n            const initialsInput = document.getElementById('initials-input');\n\n            modal.style.display = 'flex';\n\n            \/\/ Begrense antall tegn ved liming\n            initialsInput.addEventListener('paste', function(event) {\n                event.preventDefault();\n                const paste = (event.clipboardData || window.clipboardData).getData('text');\n                const sanitizedPaste = paste.toUpperCase().replace(\/[^A-Z\u00c6\u00d8\u00c5]\/g, '').slice(0, 3);\n                initialsInput.value = sanitizedPaste;\n            });\n\n            submitButton.onclick = function() {\n                let initials = initialsInput.value.trim().toUpperCase();\n                \/\/ Tillat kun 2 til 3 bokstaver inkludert \u00c6\u00d8\u00c5\n                if (\/^[A-Z\u00c6\u00d8\u00c5]{2,3}$\/.test(initials)) {\n                    modal.style.display = 'none';\n                    initialsInput.value = '';\n                    addScoreToLeaderboard(initials, userPoints);\n                } else {\n                    alert(\"Ugyldige initialer. Vennligst bruk 2 eller 3 STORE bokstaver (A-\u00c5).\");\n                }\n            }\n\n            \/\/ Lukke modal hvis brukeren klikker utenfor modal-content\n            window.onclick = function(event) {\n                if (event.target == modal) {\n                    modal.style.display = 'none';\n                }\n            }\n        }\n\n        \/\/ Legg til score i Firestore\n        function addScoreToLeaderboard(initials, points) {\n            db.collection(\"frisbeekrigerne\")\n              .add({\n                  initials: initials,\n                  points: points\n              })\n              .then(() => {\n                  \/\/ Etter \u00e5 ha lagt til, sjekk om vi har mer enn 50 score og fjern den laveste\n                  db.collection(\"frisbeekrigerne\")\n                    .orderBy(\"points\", \"desc\")\n                    .limit(51)\n                    .get()\n                    .then((querySnapshot) => {\n                        if (querySnapshot.size > 50) {\n                            const lastDoc = querySnapshot.docs[50];\n                            db.collection(\"frisbeekrigerne\").doc(lastDoc.id).delete()\n                              .then(() => {\n                                  console.log(\"Laveste score fjernet for \u00e5 opprettholde top 50.\");\n                                  \/\/ fetchLeaderboard(); \/\/ Oppdater leaderboardet hvis ikke allerede gjort via listener\n                              })\n                              .catch((error) => {\n                                  console.error(\"Feil ved fjerning av laveste score:\", error);\n                              });\n                        }\n                    });\n              })\n              .catch((error) => {\n                  console.error(\"Feil ved \u00e5 legge til score:\", error);\n              });\n        }\n\n        \/\/ H\u00e5ndter spillavslutning\n        function handleGameCompletion(userPoints) {\n            checkIfTopScore(userPoints)\n                .then((isTopScore) => {\n                    if (isTopScore) {\n                        promptForInitials(userPoints);\n                    } else {\n                        alert(\"Flott innsats! Du er ikke i topp 50, men pr\u00f8v igjen!\");\n                    }\n                });\n        }\n\n        \/\/ Initialiser leaderboard ved lasting av siden\n        fetchLeaderboard();\n        setupLeaderboardListener();\n\n        \/\/ Resten av spillets JavaScript-kode f\u00f8lger her...\n        \/\/ Funksjoner for spillet\n        const circleContainer = document.getElementById('circle-container');\n        const badgeContainer = document.getElementById('badge-container');\n        const badgeList = document.getElementById('badge-list');\n        const toggleBadgesButton = document.getElementById('toggle-badges');\n        const allBadges = document.getElementById('all-badges');\n        const bonusTimeDisplay = document.getElementById('bonus-time');\n        const transientBadge = document.getElementById('transient-badge');\n        const transientBadgeIcon = document.getElementById('transient-badge-icon');\n        const transientBadgeName = document.getElementById('transient-badge-name');\n        const timerText = document.getElementById('timer-text');\n        const fillCircle = document.getElementById('fill-circle');\n\n        \/\/ Variabler for runder og sirkler\n        let currentRound = 1;\n        let circlesPerRound = 3;\n        let totalTime = 10; \/\/ Start med 10 sekunder\n        let timeRemaining = totalTime;\n        let timerInterval = null;\n        let gameOver = false;\n\n        const circles = []; \/\/ Array for \u00e5 holde referanser til sirklene\n\n        \/\/ Badgesystem\n        let awardedBadges = {\n            rounds: [],\n            points: [],\n            super: false\n        };\n\n        let savedBadges = {\n            rounds: [],\n            points: [],\n            super: false\n        };\n\n        \/\/ Bonus time\n        let bonusTimeout = null;\n\n        \/\/ Last oppn\u00e5dde badges fra localStorage\n        loadBadges();\n\n        \/\/ Timer sirkel variabler\n        const circle = document.getElementById('progress');\n        const radius = 16; \/\/ Oppdatert radius\n        const circumference = 2 * Math.PI * radius;\n\n        circle.style.strokeDasharray = `${circumference} ${circumference}`;\n        circle.style.strokeDashoffset = `${circumference}`;\n\n        function setStartPosition() {\n            const container = document.getElementById('canvas-container');\n            const discWrapper = document.getElementById('disc-wrapper');\n            const angleButton = document.getElementById('angle-button');\n            const smallLogo = document.getElementById('small-logo');\n\n            const startPosX = (container.offsetWidth \/ 2) - (discWrapper.offsetWidth \/ 2);\n            const startPosY = container.offsetHeight - discWrapper.offsetHeight - 60; \/\/ Justert for padding-bottom\n            discWrapper.style.left = `${startPosX}px`;\n            discWrapper.style.top = `${startPosY}px`;\n\n            \/\/ Posisjoner vinkelknappen og logoen p\u00e5 samme sted som disken\n            angleButton.style.left = `${startPosX + discWrapper.offsetWidth \/ 2}px`;\n            angleButton.style.top = `${startPosY + discWrapper.offsetHeight \/ 2}px`;\n\n            smallLogo.style.left = `${startPosX + discWrapper.offsetWidth \/ 2}px`;\n            smallLogo.style.top = `${startPosY + discWrapper.offsetHeight \/ 2}px`;\n        }\n\n        function generateCircles() {\n            circleContainer.innerHTML = ''; \/\/ T\u00f8m containeren\n            circles.length = 0; \/\/ T\u00f8m arrayet\n\n            const container = document.getElementById('canvas-container');\n            const containerWidth = container.offsetWidth;\n            const containerHeight = container.offsetHeight;\n\n            \/\/ Definer eksklusjonsomr\u00e5der hvor sirkler ikke skal vises\n            const exclusionZones = [\n                \/\/ Timer sirkelen\n                { x: 0, y: 0, width: 50, height: 50 }, \/\/ Justert for mindre st\u00f8rrelse\n                \/\/ Livskontainer (hjerter)\n                { x: 0, y: containerHeight - 100, width: 150, height: 100 },\n                \/\/ Badge-knapp\n                { x: containerWidth - 60, y: 0, width: 60, height: 60 },\n                \/\/ Logo og vinkelknapp (rundt disken)\n                { x: 0, y: containerHeight - 150, width: containerWidth, height: 150 }\n            ];\n\n            for (let i = 0; i < circlesPerRound; i++) {\n                let pos, overlaps;\n                let attempts = 0;\n                do {\n                    \/\/ Generer tilfeldige posisjoner i piksler\n                    pos = {\n                        x: Math.random() * (containerWidth - 40) + 20, \/\/ Unng\u00e5 kantene\n                        y: Math.random() * (containerHeight - 40) + 20\n                    };\n\n                    overlaps = exclusionZones.some(zone => {\n                        return (\n                            pos.x >= zone.x &&\n                            pos.x <= zone.x + zone.width &&\n                            pos.y >= zone.y &&\n                            pos.y <= zone.y + zone.height\n                        );\n                    });\n\n                    attempts++;\n                    if (attempts > 100) {\n                        \/\/ Unng\u00e5 uendelig l\u00f8kke hvis det er vanskelig \u00e5 plassere sirkler\n                        break;\n                    }\n                } while (overlaps);\n\n                const circle = document.createElement('div');\n                circle.classList.add('circle');\n                circle.style.left = `${pos.x}px`;\n                circle.style.top = `${pos.y}px`;\n                circleContainer.appendChild(circle);\n\n                \/\/ Legg til circle i arrayet for senere referanse\n                circles.push(circle);\n            }\n        }\n\n        function resetGame() {\n            isDragging = false;\n            velocityX = 0;\n            velocityY = 0;\n            totalDragDistance = 0;\n            gameOver = false;\n            timerStarted = false; \/\/ Timeren har ikke startet enn\u00e5\n            timeRemaining = totalTime; \/\/ Resetter tiden til totalTime\n            isMoving = false; \/\/ Reset isMoving\n\n            \/\/ Fjern \"moving\" klassen hvis satt\n            discWrapper.classList.remove('moving');\n            disc.classList.remove('rotating'); \/\/ Fjern rotasjon\n\n            if (animationId) {\n                cancelAnimationFrame(animationId);\n            }\n\n            setStartPosition();\n            disc.style.cursor = 'grab';\n\n            generateCircles();\n\n            updateLivesCounter();\n            updateCircleProgress(); \/\/ Oppdater sirkelen til \u00e5 vise starttid\n\n            \/\/ S\u00f8rg for at gameOverMessage er skjult\n            gameOverMessage.style.display = 'none';\n        }\n\n        \/\/ Resten av spillets JavaScript-kode f\u00f8lger her...\n        \/\/ Funksjoner for fargeinterpolering\n        function hexToRgb(hex) {\n            var bigint = parseInt(hex.slice(1), 16);\n            var r = (bigint >> 16) & 255;\n            var g = (bigint >> 8) & 255;\n            var b = bigint & 255;\n            return [r, g, b];\n        }\n\n        function rgbToHex(rgb) {\n            return \"#\" + rgb.map(function(x) {\n                var hex = x.toString(16);\n                return hex.length == 1 ? \"0\" + hex : hex;\n            }).join('');\n        }\n\n        function interpolateColor(color1, color2, factor) {\n            if (factor < 0) factor = 0;\n            if (factor > 1) factor = 1;\n            var result = color1.slice();\n            for (var i = 0; i < 3; i++) {\n                result[i] = Math.round(result[i] + factor * (color2[i] - color1[i]));\n            }\n            return result;\n        }\n\n        function updateCircleProgress() {\n            const offset = circumference - (timeRemaining \/ totalTime) * circumference;\n            circle.style.strokeDashoffset = offset;\n\n            \/\/ Oppdater teksten i sirkelen\n            timerText.textContent = timeRemaining;\n\n            \/\/ Beregn fargen basert p\u00e5 gjenv\u00e6rende tid\n            var factor = 1 - (timeRemaining \/ totalTime);\n            var startColor = hexToRgb(\"#00FF00\"); \/\/ Lys gr\u00f8nn\n            var endColor = hexToRgb(\"#8B0000\"); \/\/ M\u00f8rk r\u00f8d\n            var currentColor = interpolateColor(startColor, endColor, factor);\n            var colorHex = rgbToHex(currentColor);\n\n            \/\/ Oppdater fyllet i sirkelen\n            fillCircle.setAttribute('fill', colorHex);\n        }\n\n        function startTimer() {\n            timeRemaining = totalTime; \/\/ Bruk total tid som er akkumulert\n            updateCircleProgress();\n\n            if (timerInterval) {\n                clearInterval(timerInterval);\n            }\n\n            timerInterval = setInterval(function() {\n                timeRemaining -= 1;\n                updateCircleProgress();\n\n                if (timeRemaining <= 0) {\n                    clearInterval(timerInterval);\n                    endGame(false); \/\/ Spilleren tapte\n                }\n            }, 1000);\n        }\n\n        function checkCircleCollisions() {\n            const discRect = disc.getBoundingClientRect();\n            const discCenterX = discRect.left + discRect.width \/ 2;\n            const discCenterY = discRect.top + discRect.height \/ 2;\n            const discRadius = discRect.width \/ 2;\n\n            for (let i = circles.length - 1; i >= 0; i--) {\n                const circleRect = circles[i].getBoundingClientRect();\n                const circleCenterX = circleRect.left + circleRect.width \/ 2;\n                const circleCenterY = circleRect.top + circleRect.height \/ 2;\n                const circleRadius = circleRect.width \/ 2;\n\n                const dx = discCenterX - circleCenterX;\n                const dy = discCenterY - circleCenterY;\n                const distance = Math.sqrt(dx * dx + dy * dy);\n                const combinedRadii = discRadius + circleRadius;\n\n                if (distance < combinedRadii) {\n                    \/\/ Kollisjon oppdaget\n                    circleContainer.removeChild(circles[i]);\n                    circles.splice(i, 1);\n\n                    if (circles.length === 0) {\n                        endGame(true); \/\/ Spilleren vant\n                    }\n                    return;\n                }\n            }\n        }\n\n        function endGame(success) {\n            cancelAnimationFrame(animationId);\n            clearInterval(timerInterval);\n            disc.style.cursor = 'default';\n            gameOver = true;\n            velocityX = 0; \/\/ Stopp disken\n            velocityY = 0;\n            isMoving = false; \/\/ Disken er ikke lenger i bevegelse\n\n            \/\/ Fjern \"moving\" klassen hvis satt\n            discWrapper.classList.remove('moving');\n            disc.classList.remove('rotating'); \/\/ Fjern rotasjon\n\n            if (success) {\n                \/\/ Spilleren klarte runden\n                let timeUsed = (Date.now() - startTime) \/ 1000; \/\/ Tid brukt i sekunder\n                let roundScore = circlesPerRound \/ timeUsed; \/\/ Poeng for denne runden\n                totalScore += roundScore;\n\n                \/\/ Justere total tid basert p\u00e5 gjennomf\u00f8ringstid\n                if (timeUsed < 3) {\n                    totalTime += 1; \/\/ Legg til ett sekund\n                } else if (timeRemaining <= 5) {\n                    totalTime -= 1; \/\/ Trekk fra ett sekund, men ikke g\u00e5 under 1 sekund\n                    if (totalTime < 1) totalTime = 1;\n                }\n\n                \/\/ Sjekk for badges\n                checkBadges(roundScore);\n\n                updateLivesCounter();\n\n                gameOverMessage.innerHTML = `\n                    <div>Gratulerer! Du klarte runde ${currentRound}!<\/div>\n                    <div>Rundepoeng: ${roundScore.toFixed(2)}<\/div>\n                    <div>Totalt: ${totalScore.toFixed(2)}<\/div>\n                    <div>Tidsvindu: ${totalTime} sekunder<\/div>\n                    <div>Liv: ${lives}<\/div>\n                    <button id=\"next-round-button\">Neste runde<\/button>\n                `;\n                gameOverMessage.style.display = 'flex'; \/\/ S\u00f8rg for at meldingen vises som flex\n\n                const nextRoundButton = document.getElementById('next-round-button');\n                nextRoundButton.addEventListener('click', function() {\n                    gameOverMessage.style.display = 'none';\n                    \/\/ Oppdater rundenummer og antall sirkler\n                    currentRound++;\n                    circlesPerRound += 2;\n                    resetGame();\n                });\n\n                \/\/ Ikke kall handleGameCompletion her\n            } else {\n                \/\/ Spilleren tapte\n                lives -= 1; \/\/ Mist ett liv\n                updateLivesCounter();\n\n                if (lives > 0) {\n                    \/\/ Spilleren har fortsatt liv igjen\n                    gameOverMessage.innerHTML = `\n                        <div>Du misset! Du har ${lives} liv igjen.<\/div>\n                        <button id=\"retry-button\">Pr\u00f8v igjen<\/button>\n                    `;\n                    gameOverMessage.style.display = 'flex'; \/\/ S\u00f8rg for at meldingen vises som flex\n\n                    const retryButton = document.getElementById('retry-button');\n                    retryButton.addEventListener('click', function() {\n                        gameOverMessage.style.display = 'none';\n                        resetGame();\n                    });\n                } else {\n                    \/\/ Spilleren har brukt opp alle liv\n                    gameOverMessage.innerHTML = `\n                        <div>Game Over!<\/div>\n                        <div>Du fikk ${totalScore.toFixed(2)} poeng<\/div>\n                        <button id=\"restart-button\">Start p\u00e5 nytt<\/button>\n                    `;\n                    gameOverMessage.style.display = 'flex'; \/\/ S\u00f8rg for at meldingen vises som flex\n\n                    const restartButton = document.getElementById('restart-button');\n                    restartButton.addEventListener('click', function() {\n                        \/\/ Tilbakestill spillvariabler, men behold badges\n                        currentRound = 1;\n                        circlesPerRound = 3;\n                        totalScore = 0; \/\/ Tilbakestill totalpoeng\n                        totalTime = 10; \/\/ Tilbakestill tiden\n                        lives = 3; \/\/ Tilbakestill liv\n\n                        \/\/ Tilbakestill awardedBadges ved starten av et nytt spill\n                        awardedBadges = {\n                            rounds: [],\n                            points: [],\n                            super: false\n                        };\n\n                        gameOverMessage.style.display = 'none';\n                        resetGame();\n\n                        \/\/ Ikke kall handleGameCompletion ved restart\n                    });\n\n                    \/\/ H\u00e5ndter leaderboard n\u00e5 n\u00e5r spillet er fullf\u00f8rt\n                    handleGameCompletion(totalScore);\n                }\n            }\n        }\n\n        function updateLivesCounter() {\n            const livesContainer = document.getElementById('lives-container');\n            livesContainer.innerHTML = ''; \/\/ T\u00f8m containeren\n\n            \/\/ Begrens antall liv til maks 6\n            const displayLives = Math.min(lives, 6);\n\n            for (let i = 0; i < displayLives; i++) {\n                const heart = document.createElement('span');\n                heart.classList.add('heart');\n                heart.textContent = '\u2764\ufe0f';\n                livesContainer.appendChild(heart);\n            }\n        }\n\n        \/\/ Event handlers\n        function handleStart(event) {\n            if (gameOver) return;\n            if (isMoving) return; \/\/ Forhindre interaksjon mens disken beveger seg\n\n            if (event.target === disc || event.target === discWrapper) {\n                event.preventDefault(); \/\/ Forhindre standard scrolling\n                if (event.touches.length > 0) {\n                    const touch = event.touches[0];\n                    disc.classList.add('active');\n                    handleMouseDown({ clientX: touch.clientX, clientY: touch.clientY });\n                }\n            }\n        }\n\n        function handleMove(event) {\n            if (isDragging && !gameOver) {\n                event.preventDefault(); \/\/ Forhindre standard scrolling\n                if (event.touches.length > 0) {\n                    const touch = event.touches[0];\n                    handleMouseMove({ clientX: touch.clientX, clientY: touch.clientY });\n                }\n            }\n        }\n\n        function handleEnd(event) {\n            if (isDragging) {\n                event.preventDefault(); \/\/ Forhindre standard scrolling\n                disc.classList.remove('active');\n                handleMouseUp();\n            }\n        }\n\n        function handleMouseDown(e) {\n            if (discSnapped || gameOver || isMoving) return;\n\n            isDragging = true;\n            velocityX = 0;\n            velocityY = 0;\n            const container = document.getElementById('canvas-container');\n            const discWrapper = document.getElementById('disc-wrapper');\n            const containerRect = container.getBoundingClientRect();\n            const discRect = discWrapper.getBoundingClientRect();\n            offsetX = e.clientX - discRect.left;\n            offsetY = e.clientY - discRect.top;\n            lastX = e.clientX;\n            lastY = e.clientY;\n            totalDragDistance = 0;\n            disc.style.cursor = 'grabbing';\n        }\n\n        function handleMouseMove(e) {\n            if (isDragging && !gameOver) {\n                const container = document.getElementById('canvas-container');\n                const discWrapper = document.getElementById('disc-wrapper');\n                const containerRect = container.getBoundingClientRect();\n                const discRect = discWrapper.getBoundingClientRect();\n\n                let newX = e.clientX - offsetX - containerRect.left;\n                let newY = e.clientY - offsetY - containerRect.top;\n\n                if (newX <= 0) {\n                    newX = 0;\n                } else if (newX + discRect.width >= containerRect.width) {\n                    newX = containerRect.width - discRect.width;\n                }\n\n                if (newY <= 0) {\n                    newY = 0;\n                } else if (newY + discRect.height >= containerRect.height) {\n                    newY = containerRect.height - discRect.height;\n                }\n\n                discWrapper.style.left = `${newX}px`;\n                discWrapper.style.top = `${newY}px`;\n\n                velocityX = e.clientX - lastX;\n                velocityY = e.clientY - lastY;\n                lastX = e.clientX;\n                lastY = e.clientY;\n\n                totalDragDistance += Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n            }\n        }\n\n        function handleMouseUp() {\n            if (discSnapped || gameOver) return;\n\n            if (isDragging) {\n                isDragging = false;\n\n                \/\/ Beregn total hastighet\n                const totalVelocity = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n\n                \/\/ Begrens maksimal hastighet\n                if (totalVelocity > MAX_VELOCITY) {\n                    const scale = MAX_VELOCITY \/ totalVelocity;\n                    velocityX *= scale;\n                    velocityY *= scale;\n                }\n\n                \/\/ S\u00f8rg for minimumshastighet\n                if (totalVelocity < MIN_VELOCITY && totalVelocity > 0) {\n                    const scale = MIN_VELOCITY \/ totalVelocity;\n                    velocityX *= scale;\n                    velocityY *= scale;\n                }\n\n                \/\/ Start timeren hvis den ikke har startet\n                if (!timerStarted) {\n                    startTimer(); \/\/ Start timeren\n                    startTime = Date.now(); \/\/ Start tidsm\u00e5ling\n                    timerStarted = true;\n                }\n\n                \/\/ Sett isMoving til true og legg til \"moving\" klassen for \u00e5 deaktivere interaksjon\n                isMoving = true;\n                discWrapper.classList.add('moving');\n                disc.classList.add('rotating'); \/\/ Legg til rotasjon\n\n                moveDisc();\n            }\n            disc.style.cursor = 'grab';\n            disc.classList.remove('active');\n        }\n\n        function moveDisc() {\n            if (gameOver) return; \/\/ Ikke fortsett hvis spillet er over\n\n            const container = document.getElementById('canvas-container');\n            const discWrapper = document.getElementById('disc-wrapper');\n            const containerRect = container.getBoundingClientRect();\n            const discRect = discWrapper.getBoundingClientRect();\n\n            let newX = discWrapper.offsetLeft + velocityX;\n            let newY = discWrapper.offsetTop + velocityY;\n\n            let collided = false;\n\n            \/\/ Juster for venstre kant\n            if (newX <= 0) {\n                newX = 0;\n                velocityX = -velocityX;\n                collided = true;\n            }\n            \/\/ Juster for h\u00f8yre kant\n            else if (newX + discRect.width >= containerRect.width) {\n                newX = containerRect.width - discRect.width;\n                velocityX = -velocityX;\n                collided = true;\n            }\n\n            \/\/ Juster for toppkant\n            if (newY <= 0) {\n                newY = 0;\n                velocityY = -velocityY;\n                collided = true;\n            }\n            \/\/ Juster for bunnkant\n            else if (newY + discRect.height >= containerRect.height) {\n                newY = containerRect.height - discRect.height;\n                velocityY = -velocityY;\n                collided = true;\n            }\n\n            \/\/ Juster hastigheten hvis det var en kollisjon\n            if (collided) {\n                adjustVelocity();\n            }\n\n            discWrapper.style.left = `${newX}px`;\n            discWrapper.style.top = `${newY}px`;\n\n            \/\/ Sjekk kollisjon med sirklene\n            checkCircleCollisions();\n\n            \/\/ Sjekk om disken har stoppet\n            if (velocityX === 0 && velocityY === 0) {\n                isMoving = false;\n                discWrapper.classList.remove('moving');\n                disc.classList.remove('rotating'); \/\/ Fjern rotasjon\n                return; \/\/ Stopp animasjonen\n            }\n\n            animationId = requestAnimationFrame(moveDisc);\n        }\n\n        function adjustVelocity() {\n            \/\/ Fast vinkel\u00f8kning p\u00e5 5 grader (konvertert til radianer)\n            const angleChange = 5 * (Math.PI \/ 180); \/\/ 5 grader til en side\n            const speed = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n            const currentAngle = Math.atan2(velocityY, velocityX);\n            let newAngle = currentAngle + angleChange;\n\n            \/\/ Oppdater velocity basert p\u00e5 den nye vinkelen\n            velocityX = speed * Math.cos(newAngle);\n            velocityY = speed * Math.sin(newAngle);\n        }\n\n        \/\/ Legg til event listeners p\u00e5 n\u00f8dvendige elementer\n        const disc = document.getElementById('disc');\n        const discWrapper = document.getElementById('disc-wrapper');\n        const container = document.getElementById('canvas-container');\n        const gameOverMessage = document.getElementById('game-over-message');\n        const startOverlay = document.getElementById('start-overlay');\n        const angleButton = document.getElementById('angle-button');\n        let isDragging = false;\n        let discSnapped = false; \/\/ Kan tilpasses hvis du har snapping-logikk\n        let offsetX, offsetY;\n        let velocityX = 0;\n        let velocityY = 0;\n        let lastX, lastY;\n        let totalDragDistance = 0;\n        let animationId = null;\n        let startTime = null;\n        let totalScore = 0; \/\/ Total poengsum\n        const MAX_VELOCITY = 15; \/\/ Maksimal hastighet\n        const MIN_VELOCITY = 10; \/\/ Minimum hastighet\n\n        let lives = 4; \/\/ Spilleren har 4 liv\n        let timerStarted = false; \/\/ Flag for om timeren har startet\n        let isMoving = false; \/\/ Flag for om disken er i bevegelse\n\n        \/\/ Toggle-knapp for \u00e5 vise\/hide alle badges\n        toggleBadgesButton.addEventListener('click', function(event) {\n            allBadges.classList.toggle('show');\n            event.stopPropagation(); \/\/ Forhindre at dokumentklikket ogs\u00e5 trigges\n        });\n\n        \/\/ Klikk utenfor for \u00e5 lukke all badges\n        document.addEventListener('click', function(event) {\n            if (allBadges.classList.contains('show') && !allBadges.contains(event.target) && event.target !== toggleBadgesButton) {\n                allBadges.classList.remove('show');\n            }\n        });\n\n        \/\/ Badgesystem funksjoner\n        function checkBadges(roundScore) {\n            \/\/ Legg til badge for Runde 1\n            if (currentRound === 1 && !awardedBadges.rounds.includes(currentRound)) {\n                awardBadge(`Runde ${currentRound}`, '\ud83e\udd47'); \/\/ Vis transient badge og gi bonus tid\n                awardedBadges.rounds.push(currentRound);\n                if (!savedBadges.rounds.includes(currentRound)) {\n                    savedBadges.rounds.push(currentRound);\n                    addBadgeToList(`Runde ${currentRound}`, '\ud83e\udd47'); \/\/ Legg til i liste kun \u00e9n gang\n                }\n            }\n\n            \/\/ Runder: hver 10. runde\n            if (currentRound % 10 === 0 && !awardedBadges.rounds.includes(currentRound)) {\n                awardBadge(`Runde ${currentRound}`, '\ud83c\udfc5'); \/\/ Vis transient badge og gi bonus tid\n                awardedBadges.rounds.push(currentRound);\n                if (!savedBadges.rounds.includes(currentRound)) {\n                    savedBadges.rounds.push(currentRound);\n                    addBadgeToList(`Runde ${currentRound}`, '\ud83c\udfc5'); \/\/ Legg til i liste kun \u00e9n gang\n                }\n            }\n\n            \/\/ Poengmilep\u00e6ler\n            const pointMilestones = [10, 50, 100, 500, 1000]; \/\/ Inkluderer 10 poeng\n\n            pointMilestones.forEach(milestone => {\n                if (totalScore >= milestone && !awardedBadges.points.includes(milestone)) {\n                    awardBadge(`Poeng: ${milestone}`, '\ud83c\udf96\ufe0f'); \/\/ Vis transient badge og gi bonus tid\n                    awardedBadges.points.push(milestone);\n                    if (!savedBadges.points.includes(milestone)) {\n                        savedBadges.points.push(milestone);\n                        addBadgeToList(`Poeng: ${milestone}`, '\ud83c\udf96\ufe0f'); \/\/ Legg til i liste kun \u00e9n gang\n                    }\n                }\n            });\n\n            \/\/ Super Badge: 10 poeng p\u00e5 ett kast, kun f\u00f8rste gang per spill\n            if (roundScore >= 10 && !awardedBadges.super) {\n                awardBadge('Superkast!', '\u2b50'); \/\/ Vis transient badge og gi bonus tid\n                awardedBadges.super = true;\n                if (!savedBadges.super) {\n                    savedBadges.super = true;\n                    addBadgeToList('Superkast!', '\u2b50');\n                }\n\n                \/\/ Gi spilleren et ekstra liv, men ikke over maks 6 liv\n                if (lives < 6) {\n                    lives += 1;\n                    updateLivesCounter();\n                }\n            }\n\n            \/\/ Lagre badges\n            saveBadges();\n        }\n\n        function awardBadge(name, icon) {\n            \/\/ Legg til badge i badge-container for sm\u00e5 badges\n            const badge = document.createElement('div');\n            badge.classList.add('badge');\n            badge.innerHTML = `<span>${icon}<\/span><span>${name}<\/span>`;\n            badgeContainer.appendChild(badge);\n\n            \/\/ Trigger CSS animation\n            setTimeout(() => {\n                badge.classList.add('show');\n            }, 10);\n\n            \/\/ Fjern badge etter 3.5 sekunder\n            setTimeout(() => {\n                badge.classList.remove('show');\n                setTimeout(() => {\n                    if (badge.parentElement) { \/\/ Sjekk om badge fortsatt er i DOM\n                        badgeContainer.removeChild(badge);\n                    }\n                }, 500);\n            }, 3500);\n\n            \/\/ Vis transient badge i midten av skjermen\n            transientBadgeIcon.textContent = icon;\n            transientBadgeName.textContent = name;\n            transientBadge.classList.add('show');\n\n            \/\/ Fjern transient badge etter 3 sekunder\n            setTimeout(() => {\n                transientBadge.classList.remove('show');\n            }, 3000);\n\n            \/\/ Gi bonus tid\n            addBonusTime();\n        }\n\n        function addBadgeToList(name, icon) {\n            \/\/ Sjekk om badge allerede er i listen\n            const existingBadge = Array.from(badgeList.children).find(li => li.textContent.includes(name));\n            if (!existingBadge) {\n                const li = document.createElement('li');\n                li.innerHTML = `<span>${icon}<\/span><span>${name}<\/span>`;\n                badgeList.appendChild(li);\n\n                \/\/ Vis toggle-knappen hvis den er skjult\n                if (toggleBadgesButton.style.display === 'none') {\n                    toggleBadgesButton.style.display = 'block';\n                }\n            }\n        }\n\n        function saveBadges() {\n            localStorage.setItem('savedBadges', JSON.stringify(savedBadges));\n        }\n\n        function loadBadges() {\n            const storedBadges = JSON.parse(localStorage.getItem('savedBadges'));\n            if (storedBadges) {\n                savedBadges = storedBadges;\n\n                \/\/ Legg til badges i listen\n                savedBadges.rounds.forEach(round => {\n                    if (round === 1) {\n                        addBadgeToList(`Runde ${round}`, '\ud83e\udd47');\n                    } else {\n                        addBadgeToList(`Runde ${round}`, '\ud83c\udfc5');\n                    }\n                });\n\n                savedBadges.points.forEach(point => {\n                    addBadgeToList(`Poeng: ${point}`, '\ud83c\udf96\ufe0f');\n                });\n\n                if (savedBadges.super) {\n                    addBadgeToList('Superkast!', '\u2b50');\n                }\n\n                \/\/ Vis toggle-knappen hvis det finnes minst en badge\n                if (savedBadges.rounds.length > 0 || savedBadges.points.length > 0 || savedBadges.super) {\n                    toggleBadgesButton.style.display = 'block';\n                }\n            }\n        }\n\n        function addBonusTime() {\n            \/\/ Legg til 1 sekunder til b\u00e5de timeRemaining og totalTime\n            timeRemaining += 1;\n            totalTime += 1;\n            updateCircleProgress();\n\n            \/\/ Vis \"+1 sek\" midlertidig\n            bonusTimeDisplay.textContent = '+1 sek';\n            bonusTimeDisplay.style.opacity = '1';\n\n            \/\/ Fjern \"+1 sek\" etter 2 sekunder\n            if (bonusTimeout) {\n                clearTimeout(bonusTimeout);\n            }\n            bonusTimeout = setTimeout(() => {\n                bonusTimeDisplay.style.opacity = '0';\n            }, 2000);\n        }\n\n        \/\/ Legg til event listener for \"Lagre badges\"-knappen\n        document.getElementById('save-badges-button').addEventListener('click', function() {\n            \/\/ Midlertidig fjern begrensningen p\u00e5 max-height og overflow\n            const originalMaxHeight = allBadges.style.maxHeight;\n            const originalOverflowY = allBadges.style.overflowY;\n            allBadges.style.maxHeight = 'none';\n            allBadges.style.overflowY = 'visible';\n\n            \/\/ Bruk html2canvas for \u00e5 ta et \"skjermbilde\" av badge-listen\n            html2canvas(allBadges, {\n                scrollY: -window.scrollY, \/\/ For \u00e5 h\u00e5ndtere scrolling\n                ignoreElements: function(element) {\n                    return element.getAttribute('data-html2canvas-ignore') === 'true';\n                }\n            }).then(function(canvas) {\n                \/\/ Gjenopprett original stil\n                allBadges.style.maxHeight = originalMaxHeight;\n                allBadges.style.overflowY = originalOverflowY;\n\n                \/\/ Lagre som bilde\n                const link = document.createElement('a');\n                link.download = 'badges.png';\n                link.href = canvas.toDataURL('image\/png');\n                link.click();\n            });\n        });\n\n        \/\/ Initialiser spillet\n        setStartPosition();\n        generateCircles();\n        updateLivesCounter();\n        updateCircleProgress();\n\n        \/\/ Event listeners for drag and drop\n        discWrapper.addEventListener('mousedown', handleMouseDown);\n        document.addEventListener('mousemove', handleMouseMove);\n        document.addEventListener('mouseup', handleMouseUp);\n\n        \/\/ Touch events p\u00e5 canvas-container\n        container.addEventListener('touchstart', handleStart);\n        container.addEventListener('touchmove', handleMove);\n        container.addEventListener('touchend', handleEnd);\n\n        \/\/ Start overlay\n        startOverlay.addEventListener('click', function() {\n            startOverlay.style.display = 'none';\n\n            \/\/ Tilbakestill awardedBadges ved starten av et nytt spill\n            awardedBadges = {\n                rounds: [],\n                points: [],\n                super: false\n            };\n\n            resetGame();\n        });\n\n        \/\/ Resize event\n        window.addEventListener('resize', function() {\n            setStartPosition();\n        });\n\n        \/\/ Knapp for \u00e5 endre vinkel\n        angleButton.addEventListener('click', function() {\n            if (!isDragging && isMoving && (velocityX !== 0 || velocityY !== 0)) {\n                \/\/ Endre vinkel med 37 grader\n                const angleChange = 37 * (Math.PI \/ 180); \/\/ Konverter til radianer\n                const currentAngle = Math.atan2(velocityY, velocityX);\n                const speed = Math.sqrt(velocityX * velocityX + velocityY * velocityY);\n                let newAngle = currentAngle + angleChange;\n\n                \/\/ Oppdater velocity basert p\u00e5 den nye vinkelen\n                velocityX = speed * Math.cos(newAngle);\n                velocityY = speed * Math.sin(newAngle);\n            }\n        });\n\n        \/\/ Badgesystem funksjoner\n        function checkBadges(roundScore) {\n            \/\/ Badgesjekk funksjonen er allerede implementert tidligere\n            \/\/ Denne funksjonen er integrert i spillet\n        }\n\n    });\n    <\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e836da1 elementor-widget elementor-widget-heading\" data-id=\"e836da1\" 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\">Flere utfordringer<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f0a82c 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=\"4f0a82c\" 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-19037 post type-post status-publish format-standard has-post-thumbnail hentry category-abonnement category-grubliser category-nyheter 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\/eurotest\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/eurogloser.jpg\" class=\"attachment-full size-full wp-image-19052\" alt=\"\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/eurogloser.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/eurogloser-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/eurogloser-1024x585.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/eurogloser-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/eurogloser-1536x878.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/eurogloser-600x343.jpg 600w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Abonnement<\/div>\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\/eurotest\/\" >\n\t\t\t\tEuropeisk glosepr\u00f8ve\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Kanskje er du bedre i europeiske spr\u00e5k enn det du tror? Og du f\u00e5r litt hjelp.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/eurotest\/\" aria-label=\"Read more about Europeisk glosepr\u00f8ve\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-18837 post type-post status-publish format-standard has-post-thumbnail hentry category-norsk category-nyheter 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\/rektor\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/rektor.jpg\" class=\"attachment-full size-full wp-image-18987\" alt=\"Rektor taler til elever\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/rektor.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/rektor-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/rektor-1024x585.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/rektor-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/rektor-1536x878.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/rektor-600x343.jpg 600w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Norsk<\/div>\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\/rektor\/\" >\n\t\t\t\tRektors tale\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Orker du hele rektors tale? Klarer du \u00e5 fylle inn ordene som mangler?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/rektor\/\" aria-label=\"Read more about Rektors tale\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-18003 post type-post status-publish format-standard has-post-thumbnail hentry category-matematikk category-nyheter category-pop\" 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\/plussguru\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/plussguru.jpg\" class=\"attachment-full size-full wp-image-18018\" alt=\"mann som regner med blyant og papir\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/plussguru.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/plussguru-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/plussguru-1024x585.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/plussguru-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/plussguru-1536x878.jpg 1536w, https:\/\/gruble.net\/wp-content\/uploads\/plussguru-600x343.jpg 600w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Matematikk<\/div>\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\/plussguru\/\" >\n\t\t\t\tPlussGuru\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Hvor rask er du til \u00e5 legge sammen? Sjekk om du er kvikk nok til \u00e5 komme inn p\u00e5 lista.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/plussguru\/\" aria-label=\"Read more about PlussGuru\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-17803 post type-post status-publish format-standard has-post-thumbnail hentry category-gangetabellen category-matematikk category-nyheter category-pop\" 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\/gangeguru\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"965\" height=\"1020\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/regnegeni-pokal-1.jpg\" class=\"attachment-full size-full wp-image-17886\" alt=\"pokal\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/regnegeni-pokal-1.jpg 965w, https:\/\/gruble.net\/wp-content\/uploads\/regnegeni-pokal-1-284x300.jpg 284w, https:\/\/gruble.net\/wp-content\/uploads\/regnegeni-pokal-1-768x812.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/regnegeni-pokal-1-600x634.jpg 600w\" sizes=\"(max-width: 965px) 100vw, 965px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Gangetabellen<\/div>\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\/gangeguru\/\" >\n\t\t\t\tGangeGuru\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Hvor rask er du i gangetabellen? Sjekk om du er kvikk nok til \u00e5 komme inn p\u00e5 lista.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/gangeguru\/\" aria-label=\"Read more about GangeGuru\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-17710 post type-post status-publish format-standard has-post-thumbnail hentry category-abonnement category-norsk category-nyheter 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\/varierte-setninger\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"457\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/tastmann.jpg\" class=\"attachment-full size-full wp-image-17730\" alt=\"mann skriver p\u00e5 tastatur\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/tastmann.jpg 800w, https:\/\/gruble.net\/wp-content\/uploads\/tastmann-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/tastmann-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/tastmann-600x343.jpg 600w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Abonnement<\/div>\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\/varierte-setninger\/\" >\n\t\t\t\tTurboTaster &#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>Skriv s\u00e5 fort du kan. Uforutsigbare setninger. Hvor mye klarer du \u00e5 forbedre deg?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/varierte-setninger\/\" aria-label=\"Read more about TurboTaster &#8211; 1\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-17215 post type-post status-publish format-standard has-post-thumbnail hentry category-nyheter 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\/dodsgrubling\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"286\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/posplask.jpg\" class=\"attachment-full size-full wp-image-17263\" alt=\"magaplask\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/posplask.jpg 500w, https:\/\/gruble.net\/wp-content\/uploads\/posplask-300x172.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Nyheter<\/div>\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\/dodsgrubling\/\" >\n\t\t\t\tD\u00f8dsGrubling\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Er du d\u00f8dsr\u00e5? Blir det magaplask? Eller rekker du \u00e5 lukke til landingen?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/dodsgrubling\/\" aria-label=\"Read more about D\u00f8dsGrubling\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-15778 post type-post status-publish format-standard has-post-thumbnail hentry category-abonnement category-grubliser category-nyheter category-sortering 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\/ruter\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"661\" height=\"377\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/klovnkul.png\" class=\"attachment-full size-full wp-image-15792\" alt=\"hjerne som sjonglerer med fargerike baller\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/klovnkul.png 661w, https:\/\/gruble.net\/wp-content\/uploads\/klovnkul-300x171.png 300w, https:\/\/gruble.net\/wp-content\/uploads\/klovnkul-600x342.png 600w\" sizes=\"(max-width: 661px) 100vw, 661px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Abonnement<\/div>\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\/ruter\/\" >\n\t\t\t\tDet skjulte bildet\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Lett i starten, umulig etter hvert. Men lykke til!<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/ruter\/\" aria-label=\"Read more about Det skjulte bildet\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-15776 post type-post status-publish format-standard has-post-thumbnail hentry category-grubliser category-nyheter category-pop category-smating category-sortering 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\/grublerekker\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"313\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/grublerekke-thumb-1.jpg\" class=\"attachment-full size-full wp-image-34596\" alt=\"Hjerne som kikker p\u00e5 fargerike sirkler\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/grublerekke-thumb-1.jpg 500w, https:\/\/gruble.net\/wp-content\/uploads\/grublerekke-thumb-1-300x188.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Grubliser<\/div>\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\/grublerekker\/\" >\n\t\t\t\tGrublerekka\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Finn den riktige rekke ved \u00e5 pr\u00f8ve deg fram og bruke din strategiske og logiske sans.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/grublerekker\/\" aria-label=\"Read more about Grublerekka\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-11920 post type-post status-publish format-standard has-post-thumbnail hentry category-multi-hangman category-norsk category-nyheter category-pop 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\/sommergreier\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon.jpg\" class=\"attachment-full size-full wp-image-11935\" alt=\"forskjellig v\u00e6r p\u00e5 bl\u00e5 himmel. Sol, skyer, lyn, regn.\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon-600x343.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon-300x171.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon-1024x585.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon-768x439.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/sommervariasjon-1536x878.jpg 1536w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Multi-Hangman<\/div>\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\/sommergreier\/\" >\n\t\t\t\tSommer-greier\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 alle sommer-ordene f\u00f8r strekmannen henges?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/sommergreier\/\" aria-label=\"Read more about Sommer-greier\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10825 post type-post status-publish format-standard has-post-thumbnail hentry category-lesetester category-norsk category-nyheter 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\/kjempen-i-havet-lesetest\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1786\" height=\"456\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/blahval.jpg\" class=\"attachment-full size-full wp-image-10833\" alt=\"bl\u00e5hval\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/blahval.jpg 1786w, https:\/\/gruble.net\/wp-content\/uploads\/blahval-600x153.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/blahval-300x77.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/blahval-1024x261.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/blahval-768x196.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/blahval-1536x392.jpg 1536w\" sizes=\"(max-width: 1786px) 100vw, 1786px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Lesetester<\/div>\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\/kjempen-i-havet-lesetest\/\" >\n\t\t\t\tKjempen i havet\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Les litt om den st\u00f8rste skapningen som har levd p\u00e5 v\u00e5r planet, og test farten p\u00e5 lesinga i samme slengen.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/kjempen-i-havet-lesetest\/\" aria-label=\"Read more about Kjempen i havet\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10807 post type-post status-publish format-standard has-post-thumbnail hentry category-lesetester category-norsk category-nyheter 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\/taylor-swift-lesetest\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"552\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/sangerinne.jpg\" class=\"attachment-full size-full wp-image-10819\" alt=\"sangerinne som ser utover et publikumshav\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/sangerinne.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/sangerinne-600x185.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/sangerinne-300x92.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/sangerinne-1024x315.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/sangerinne-768x237.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/sangerinne-1536x473.jpg 1536w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Lesetester<\/div>\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\/taylor-swift-lesetest\/\" >\n\t\t\t\tTaylor Swift\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Les litt om Taylor Swift, og test farten p\u00e5 lesinga i samme slengen.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/taylor-swift-lesetest\/\" aria-label=\"Read more about Taylor Swift\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10623 post type-post status-publish format-standard has-post-thumbnail hentry category-abonnement category-lesetester category-norsk category-nyheter 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\/lesetest-isbjorn-del-2\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"907\" height=\"456\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/isbjorn2.jpg\" class=\"attachment-full size-full wp-image-10625\" alt=\"isbj\u00f8rnmor med isbj\u00f8rnbarn i en sn\u00f8hule\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/isbjorn2.jpg 907w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn2-600x302.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn2-300x151.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn2-768x386.jpg 768w\" sizes=\"(max-width: 907px) 100vw, 907px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Abonnement<\/div>\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\/lesetest-isbjorn-del-2\/\" >\n\t\t\t\tIsbj\u00f8rn &#8211; del 2\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 litt om isbj\u00f8rn, samtidig som du tester hvor flink du er til \u00e5 lese.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/lesetest-isbjorn-del-2\/\" aria-label=\"Read more about Isbj\u00f8rn &#8211; del 2\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10597 post type-post status-publish format-standard has-post-thumbnail hentry category-lesetester category-norsk category-nyheter 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\/lesetest-isbjorn\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1758\" height=\"874\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/isbjorn.jpeg\" class=\"attachment-full size-full wp-image-10610\" alt=\"isbj\u00f8rn som jager en sel\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/isbjorn.jpeg 1758w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn-600x298.jpeg 600w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn-300x149.jpeg 300w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn-1024x509.jpeg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn-768x382.jpeg 768w, https:\/\/gruble.net\/wp-content\/uploads\/isbjorn-1536x764.jpeg 1536w\" sizes=\"(max-width: 1758px) 100vw, 1758px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Lesetester<\/div>\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\/lesetest-isbjorn\/\" >\n\t\t\t\tIsbj\u00f8rn &#8211; del 1\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 litt om isbj\u00f8rn, samtidig som du tester hvor flink du er til \u00e5 lese.<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/lesetest-isbjorn\/\" aria-label=\"Read more about Isbj\u00f8rn &#8211; del 1\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10473 post type-post status-publish format-standard has-post-thumbnail hentry category-abonnement category-lesetester category-norsk category-nyheter 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\/lt1\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"412\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/speedlesing.jpg\" class=\"attachment-full size-full wp-image-10466\" alt=\"mann som leser fort\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/speedlesing.jpg 1792w, https:\/\/gruble.net\/wp-content\/uploads\/speedlesing-600x138.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/speedlesing-300x69.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/speedlesing-1024x235.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/speedlesing-768x177.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/speedlesing-1536x353.jpg 1536w\" sizes=\"(max-width: 1792px) 100vw, 1792px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Abonnement<\/div>\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\/lt1\/\" >\n\t\t\t\tFabrikken\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Hvor fort leser du?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/lt1\/\" aria-label=\"Read more about Fabrikken\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10235 post type-post status-publish format-standard has-post-thumbnail hentry category-norsk category-nyheter 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\/ana1\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1724\" height=\"701\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/anagram.jpg\" class=\"attachment-full size-full wp-image-10175\" alt=\"mennesker som studerer og flytter p\u00e5 ord og bokstaver\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/anagram.jpg 1724w, https:\/\/gruble.net\/wp-content\/uploads\/anagram-600x244.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/anagram-300x122.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/anagram-1024x416.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/anagram-768x312.jpg 768w, https:\/\/gruble.net\/wp-content\/uploads\/anagram-1536x625.jpg 1536w\" sizes=\"(max-width: 1724px) 100vw, 1724px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Norsk<\/div>\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\/ana1\/\" >\n\t\t\t\tDessert, polarhelt og hovedstad\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Er du god til \u00e5 kjenne igjen ord n\u00e5r bokstavene er rotet til?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/ana1\/\" aria-label=\"Read more about Dessert, polarhelt og hovedstad\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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-10022 post type-post status-publish format-standard has-post-thumbnail hentry category-norsk category-nyheter 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\/anagrammer-5\/\" tabindex=\"-1\" ><div class=\"elementor-post__thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"656\" src=\"https:\/\/gruble.net\/wp-content\/uploads\/bokstavgutt.jpg\" class=\"attachment-full size-full wp-image-10027\" alt=\"gutt som tenker p\u00e5 bokstaver\" srcset=\"https:\/\/gruble.net\/wp-content\/uploads\/bokstavgutt.jpg 1024w, https:\/\/gruble.net\/wp-content\/uploads\/bokstavgutt-600x384.jpg 600w, https:\/\/gruble.net\/wp-content\/uploads\/bokstavgutt-300x192.jpg 300w, https:\/\/gruble.net\/wp-content\/uploads\/bokstavgutt-768x492.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/div><\/a>\n\t\t\t\t<div class=\"elementor-post__badge\">Norsk<\/div>\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\/anagrammer-5\/\" >\n\t\t\t\tAnagrammer-2\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__excerpt\">\n\t\t\t<p>Er du god til \u00e5 kjenne igjen ord n\u00e5r bokstavene er rotet til?<\/p>\n\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/gruble.net\/anagrammer-5\/\" aria-label=\"Read more about Anagrammer-2\" tabindex=\"-1\" >\n\t\t\tFinn ut mer \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=\"2\" data-next-page=\"https:\/\/gruble.net\/wp-json\/wp\/v2\/posts\/21646\/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<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Beregn vinkler med disken, og fjern alle de sm\u00e5 sirklene.<\/p>\n","protected":false},"author":2,"featured_media":21637,"comment_status":"closed","ping_status":"open","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"footnotes":""},"categories":[5,41,94,101,42],"tags":[],"post_folder":[],"class_list":["post-21646","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-matematikk","category-nyheter","category-pop","category-spill","category-voksen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>FlyingDisk - 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\/flyingdisk\/\" \/>\n<meta property=\"og:locale\" content=\"nb_NO\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FlyingDisk - Gruble.net\" \/>\n<meta property=\"og:description\" content=\"Beregn vinkler med disken, og fjern alle de sm\u00e5 sirklene.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gruble.net\/flyingdisk\/\" \/>\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:published_time\" content=\"2024-09-26T10:13:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-18T09:28:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/gruble.net\/wp-content\/uploads\/ulvekast.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Stig Hamstad\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Skrevet av\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stig Hamstad\" \/>\n\t<meta name=\"twitter:label2\" content=\"Ansl. lesetid\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minutt\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/\"},\"author\":{\"name\":\"Stig Hamstad\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#\\\/schema\\\/person\\\/713eaee8c60258dd79836b2ce3743569\"},\"headline\":\"FlyingDisk\",\"datePublished\":\"2024-09-26T10:13:28+00:00\",\"dateModified\":\"2026-02-18T09:28:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/\"},\"wordCount\":23,\"publisher\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/ulvekast.jpeg\",\"articleSection\":[\"Matematikk\",\"Nyheter\",\"Popul\u00e6rt\",\"Spill\",\"Voksen\"],\"inLanguage\":\"nb-NO\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/\",\"url\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/\",\"name\":\"FlyingDisk - Gruble.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/ulvekast.jpeg\",\"datePublished\":\"2024-09-26T10:13:28+00:00\",\"dateModified\":\"2026-02-18T09:28:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#breadcrumb\"},\"inLanguage\":\"nb-NO\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/ulvekast.jpeg\",\"contentUrl\":\"https:\\\/\\\/gruble.net\\\/wp-content\\\/uploads\\\/ulvekast.jpeg\",\"width\":1792,\"height\":1024,\"caption\":\"ulv kaster en disk\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gruble.net\\\/flyingdisk\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Hjem\",\"item\":\"https:\\\/\\\/gruble.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FlyingDisk\"}]},{\"@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\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/gruble.net\\\/#\\\/schema\\\/person\\\/713eaee8c60258dd79836b2ce3743569\",\"name\":\"Stig Hamstad\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nb-NO\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7e9060851f3f4d21de8e999d31b1d4646ce70f48ae4f93b9ee6a4a3121b6f40c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7e9060851f3f4d21de8e999d31b1d4646ce70f48ae4f93b9ee6a4a3121b6f40c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7e9060851f3f4d21de8e999d31b1d4646ce70f48ae4f93b9ee6a4a3121b6f40c?s=96&d=mm&r=g\",\"caption\":\"Stig Hamstad\"},\"sameAs\":[\"https:\\\/\\\/gruble.net\"],\"url\":\"https:\\\/\\\/gruble.net\\\/author\\\/stig-hamstad-2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"FlyingDisk - 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\/flyingdisk\/","og_locale":"nb_NO","og_type":"article","og_title":"FlyingDisk - Gruble.net","og_description":"Beregn vinkler med disken, og fjern alle de sm\u00e5 sirklene.","og_url":"https:\/\/gruble.net\/flyingdisk\/","og_site_name":"Gruble.net","article_publisher":"https:\/\/www.facebook.com\/Gruble.net","article_published_time":"2024-09-26T10:13:28+00:00","article_modified_time":"2026-02-18T09:28:39+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/gruble.net\/wp-content\/uploads\/ulvekast.jpeg","type":"image\/jpeg"}],"author":"Stig Hamstad","twitter_card":"summary_large_image","twitter_misc":{"Skrevet av":"Stig Hamstad","Ansl. lesetid":"1 minutt"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gruble.net\/flyingdisk\/#article","isPartOf":{"@id":"https:\/\/gruble.net\/flyingdisk\/"},"author":{"name":"Stig Hamstad","@id":"https:\/\/gruble.net\/#\/schema\/person\/713eaee8c60258dd79836b2ce3743569"},"headline":"FlyingDisk","datePublished":"2024-09-26T10:13:28+00:00","dateModified":"2026-02-18T09:28:39+00:00","mainEntityOfPage":{"@id":"https:\/\/gruble.net\/flyingdisk\/"},"wordCount":23,"publisher":{"@id":"https:\/\/gruble.net\/#organization"},"image":{"@id":"https:\/\/gruble.net\/flyingdisk\/#primaryimage"},"thumbnailUrl":"https:\/\/gruble.net\/wp-content\/uploads\/ulvekast.jpeg","articleSection":["Matematikk","Nyheter","Popul\u00e6rt","Spill","Voksen"],"inLanguage":"nb-NO"},{"@type":"WebPage","@id":"https:\/\/gruble.net\/flyingdisk\/","url":"https:\/\/gruble.net\/flyingdisk\/","name":"FlyingDisk - Gruble.net","isPartOf":{"@id":"https:\/\/gruble.net\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gruble.net\/flyingdisk\/#primaryimage"},"image":{"@id":"https:\/\/gruble.net\/flyingdisk\/#primaryimage"},"thumbnailUrl":"https:\/\/gruble.net\/wp-content\/uploads\/ulvekast.jpeg","datePublished":"2024-09-26T10:13:28+00:00","dateModified":"2026-02-18T09:28:39+00:00","breadcrumb":{"@id":"https:\/\/gruble.net\/flyingdisk\/#breadcrumb"},"inLanguage":"nb-NO","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gruble.net\/flyingdisk\/"]}]},{"@type":"ImageObject","inLanguage":"nb-NO","@id":"https:\/\/gruble.net\/flyingdisk\/#primaryimage","url":"https:\/\/gruble.net\/wp-content\/uploads\/ulvekast.jpeg","contentUrl":"https:\/\/gruble.net\/wp-content\/uploads\/ulvekast.jpeg","width":1792,"height":1024,"caption":"ulv kaster en disk"},{"@type":"BreadcrumbList","@id":"https:\/\/gruble.net\/flyingdisk\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Hjem","item":"https:\/\/gruble.net\/"},{"@type":"ListItem","position":2,"name":"FlyingDisk"}]},{"@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"]},{"@type":"Person","@id":"https:\/\/gruble.net\/#\/schema\/person\/713eaee8c60258dd79836b2ce3743569","name":"Stig Hamstad","image":{"@type":"ImageObject","inLanguage":"nb-NO","@id":"https:\/\/secure.gravatar.com\/avatar\/7e9060851f3f4d21de8e999d31b1d4646ce70f48ae4f93b9ee6a4a3121b6f40c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7e9060851f3f4d21de8e999d31b1d4646ce70f48ae4f93b9ee6a4a3121b6f40c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7e9060851f3f4d21de8e999d31b1d4646ce70f48ae4f93b9ee6a4a3121b6f40c?s=96&d=mm&r=g","caption":"Stig Hamstad"},"sameAs":["https:\/\/gruble.net"],"url":"https:\/\/gruble.net\/author\/stig-hamstad-2\/"}]}},"_links":{"self":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/posts\/21646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/types\/post"}],"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=21646"}],"version-history":[{"count":28,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/posts\/21646\/revisions"}],"predecessor-version":[{"id":27211,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/posts\/21646\/revisions\/27211"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/media\/21637"}],"wp:attachment":[{"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/media?parent=21646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/categories?post=21646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/tags?post=21646"},{"taxonomy":"post_folder","embeddable":true,"href":"https:\/\/gruble.net\/wp-json\/wp\/v2\/post_folder?post=21646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}